pax_global_header00006660000000000000000000000064146050123700014510gustar00rootroot0000000000000052 comment=0569df4cf3977e74cd05146eed85c9c939dfcace soundconverter-4.0.5/000077500000000000000000000000001460501237000145765ustar00rootroot00000000000000soundconverter-4.0.5/.gitignore000066400000000000000000000040311460501237000165640ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # IDEs .vscode .idea tests/tmp *~SC~soundconverter-4.0.5/AUTHORS000066400000000000000000000024531460501237000156520ustar00rootroot00000000000000Maintainer: Gautier Portet Co-author: Sezanzeb Previous maintainer: Lars Wirzenius Translators: Guillaume Bedot (French) Dominik Zabłotny , Piotr Zaryk (Polish) Tomasz Sałaciński (Polish) Jonh Wendell (Portuguese Brazilian) Marc E. (Spanish) Daniel Nylander (Swedish) Alexandre Prokoudine (Russian) Kamil Páral (Czech) Stefano Luciani (Italian) Uwe Bugla (German) Miloš Popović (Serbian) Nizar Kerkeni (Arabic) amenudo (Basque) rainofchaos (Simplified Chinese) Pavol Klačanský (Slovak) Moshe Basanchig https://translations.launchpad.net/soundconverter/trunk/+pots/soundconverter Debian package: Lars Wirzenius William Grant Uwe Bugla Gentoo ebuild: Hanno Böck Better FileAddChooser: Regis FLORET Custom filename patterns: Adolfo González Blázquez Icons + Logo: Julien Gascard + Tango Project soundconverter-4.0.5/CHANGELOG.old000066400000000000000000001144131460501237000165710ustar00rootroot000000000000002011-10-25 Gautier Portet * Add {Ext} to custom filename pattern. Filled by target extension. (Thanks C.Breuer) 2010-11-20 Gautier Portet * src/soundconverter.py: Make sure all child dialog have a transient. (thanks Cosimo) 2010-09-13 Gautier Portet * src/soundconverter.py: Remove wrong default for Ogg Quality combobox. (thanks elitenoobboy, fixes #17503) 2010-07-11 Gautier Portet * po/de.po po/ru.po: Update de and ru translations. (thanks Wolfgang & Oleg) 2010-06-24 Gautier Portet * src/soundconverter.py: Destination filename was url encoded when stored in gconf. (thanks Simón, fixes #17291) 2010-06-24 Gautier Portet * src/soundconverter.py: Fix track number/count missing when writing to AAC files. (thanks Montel and Tim-Philipp, fixes #17291) 2010-06-16 Gautier Portet * src/soundconverter.py: Fix progress bar oddities, crash in TaskQueue and duplicate mp3 entry in desktop file. (Thanks Michael, closes #17269, #17268 and #17266) release 1.5.3 (1.5.2 was broken) 2010-06-13 Gautier Portet * src/soundconverter.py: Fix typo preventing SoundConverter to run. (thanks logicaldash & mpmic, fixes #17244) release 1.5.1 2010-05-18 Gautier Portet * src/soundconverter.py: Faster TypeFinder. Reduce memory usage. (61.9s -> 2.8s, 45.5MB -> 37.8MB to load 2918 files) Fix missing "year" tag. (closes #16425) Code cleaning. release 1.5.0 2010-03-17 Gautier Portet * src/soundconverter.py: Improve command line parser so gstreamer options are working. 2010-03-11 Gautier Portet * src/soundconverter.py: New command line parser. (thanks Marco) 2010-03-02 Gautier Portet * src/soundconverter.py: New Asynchronous core. Wav sample width setting. Flac compression setting. release 1.5.0-alpha1 2010-02-10 Gautier Portet * src/soundconverter.py: Add realaudio to mime whitelist. Fixed tagreader stall when adding unrecognized files. 2009-12-14 Gautier Portet * src/soundconverter.py: Add missing quoting when using destination folder. 2009-11-09 Gautier Portet * src/soundconverter.py: Fix hanging when trying to load DXR files. (thanks Nastrafireblaze, fix lp:479420) 2009-10-03 Gautier Portet * src/soundconverter.py: Remember the last used folder when adding files/folders. (thanks szpak, add #4807) 2009-09-30 Gautier Portet * src/soundconverter.py: Fix wrong destination folder when using both same-folder-as-source, base folder, and custom filename patterns. (thanks Tino, fix #016295) * po/nl.po: Update dutch translation. (thanks Tino) 2009-07-15 Gautier Portet * src/soundconverter.py: Follow symbolic links. Wow, how can something this important can be missing for years ? :) Faster typefinder by removing the useless fakesink. (7m -> 20s on a 16GB folder) 2009-07-02 Gautier Portet * src/soundconverter.py: Force vbr-max-bitrate to 320 when using mp3+vbr, since gstreamer now defaults to 160 (stupid!). (thanks psychoman, fix #15950) release 1.4.4 2009-06-24 Gautier Portet * po/: Rosetta sync. Update all translations. Add Danish, English (Australia), Estonian, Japanese and Vietnamese translations. 2009-06-15 Gautier Portet * src/soundconverter.py: Activate GVfs authentication so we can log to remote shares. (Thanks ikus060, fix lp:386849) 2009-06-10 Gautier Portet * src/soundconverter.py, po/*: update-po ! And marked "All files" for intl. (Thanks Uwe) 2009-06-09 Gautier Portet * src/soundconverter.py data/soundconverter.glade autogen.sh po/de.po: Update german tranlation. Plus some minor changes in autogen. (Thanks Uwe) * src/soundconverter.py: Fix crash in query_duration when pipeline is null. (fix lp:333024) 2009-05-27 Gautier Portet * src/soundconverter.py: Change deprecated Tooltip code. SoundConverter now requires GTK 2.12+! (thanks Matt) 2009-05-19 Gautier Portet * src/soundconverter.py: Reset status after clearing file list. (Thanks Sean) * src/soundconverter.py: Allow loading glade file from source folder. (Thanks Geoff) 2009-05-04 Gautier Portet * po/fr.po: Update french translation. (thanks Olivier) * src/soundconverter.py: Fix unhandled exception when removing original files went bad. (fix lp:278782, thanks surreal) 2009-04-22 Gautier Portet * po/bg.po: Add Bulgarian translation. (thanks Nikola) 2009-04-14 Gautier Portet * src/soundconverter.py: Fix TagReader freeze when adding m4p files. (lp:263889) release 1.4.3 2009-03-11 Gautier Portet * src/soundconverter.py: Sanitize URI handling. 2009-03-10 Gautier Portet * src/soundconverter.py: Fix spelling errors. Removed some translation of log() messages. (thanks Hew) 2009-03-10 Gautier Portet * src/soundconverter.py: Display an error dialog when something bad happened while encoding. 2009-02-22 Gautier Portet * src/soundconverter.py: Add notification at the end of conversion. 2009-01-26 Gautier Portet * src/soundconverter.py, data/soundconverter.glade: Add a checkbox to select .oga extension for vorbis files. * po/*: Update British, Spanish, Russian and Slovak translations. Release 1.4.2 2008-12-19 Gautier Portet * src/soundconverter.py: Oops, removed python 2.5 line, sorry :). (thanks Dag) 2008-12-01 Gautier Portet * po/sv.po: Updated swedish translation, removed useless sv_SE.po. (thanks Daniel) * src/soundconverter.py: add event flushing in BackgroundTask, so GUI should not stall anymore. 2008-11-06 Gautier Portet * src/soundconverter.py: Fixed (?) raising of UnicodeDecodeError when tags contained non-utf-8 strings. (fix LP: #223371) * po/: Add Breton, Greek, Finnish, Hindi, Telugu and Turkish translations. Sync with Rosetta. 2008-10-14 Gautier Portet * src/soundconverter.py: Change status text when adding files, so the user gets a clue of what is happening. 2008-10-04 Gautier Portet * src/soundconverter.py: Fix crash at startup when more than one encoding format is missing. (thanks Denis) Release 1.4.1 2008-09-22 Gautier Portet * src/soundconverter.py: Fix problem with underscores in dest folder name (thanks Robert). Stop soundconverter trying to load all my disk at startup. Maybe a change in getopt, anyway it's fixed... 2008-09-17 Gautier Portet * src/soundconverter.py: Fix old problem with unquoted filenames. When you passed filename in arguments, URI where not quoted when encoding to same folder, pffff... Release 1.4.0 2008-09-16 Gautier Portet * src/soundconverter.py: Add AAC quality setting. 2008-09-10 Gautier Portet * src/soundconverter.py: Add {Timestamp} filename template. (thanks Mark) 2008-09-09 Gautier Portet * data/soundconverter.glade, src/soundconverter.py: Added 320kbps to mp3 quality settings. (thanks Michael) 2008-09-07 Gautier Portet * data/soundconverter.glade, src/soundconverter.py: Added quality 10 to vorbis quality settings. (thanks Juan Martin) 2008-09-03 Gautier Portet * data/soundconverter.glade, src/soundconverter.py: Reverted useless flac quality setting. Flac files were bigger than necessary because of some default settings in gstreamer, causing both channels to be encoded separately. I added the mid-side-stereo=true option, and bumped encoding quality to max. 2008-08-31 Gautier Portet * data/soundconverter.glade, src/soundconverter.py: Applied patch adding optional resampling from Francis. Added flac experimental quality setting. - flac quality do not seems to work with gstreamer ??? - flac files created by gstreamer are huge... 2008-08-03 Gautier Portet * data/soundconverter.glade: Removed the 'translatable' field on stock items. * po/pl/po: Updated Polish translation. (thanks Tomasz) 2008-08-03 Gautier Portet * src/soundconverter.py: Create-folders is also actived when using same-as-input-folder. (fix #13915) Release 1.3.2 2008-08-01 Gautier Portet * src/soundconverter.py: Fix slash in tag. No more creating unwanted folders. This is just a fast hack, slash is just replaced by dash. (fix #14286) 2008-07-30 Gautier Portet * src/soundconverter.py: Add AAC encoding support as it seems to be fixed in gstreamer. (thanks Ian) (fix #001653) 2008-07-29 Gautier Portet * src/soundconverter.py: use giosrc when available. * src/soundconverter.py: fix crash when gnomevfssink not present. (fix #14184) 2008-07-26 Gautier Portet * po/pl/po: Updated Polish tranlation. (thanks Piotr) 2008-07-03 Gautier Portet * src/soundconverter.py: Fix small crasher in batch mode. (fix LP: #243831) 2008-06-23 Gautier Portet * src/soundconverter.py: Fix progress related problems in 1.3.0 Release 1.3.1 2008-06-23 Gautier Portet * src/soundconverter.py: Finally we can process multiple conversions at the same time, yeah! Add --jobs option to force the number of threads, default is number of CPUs. (fix #13735, LP: #226176) Release 1.3.0 2008-06-10 Gautier Portet * src/soundconverter.py: Fixes various crashers reported by Ubunteros. (thanks Michael, Øyvind Stegard, Matthieu) (fix LP: #222031 LP: #226685 LP: #230463) 2008-05-29 Gautier Portet * po/de.po: Update de tranlation. 2008-05-13 Gautier Portet * po/sr*: Update and fix Serbian translation. 2008-05-12 Gautier Portet * po/pl.po: update Polish translation. 2008-05-11 Gautier Portet * src/soundconverter.py: TagReader will not decode whole file anymore, It will even not decode them at all ! TagReader perform *much* faster (500s -> 20s on 260 files) (thanks thaytan on #gstreamer) Release 1.2.0 2008-05-05 Gautier Portet * src/soundconverter.py: Got rid of the progress indicator not beeing reset after a conversion. 2008-05-03 Gautier Portet * po/: Updated Arabic Catalan Czech Spanish French Slovak translations. Added Esperanto Persian translations. Updated po/, updated configure.in. 2008-05-02 Gautier Portet * src/soundconverter.py: Simplified drag_data_received() so it don't duplicate code in add_uris. Display a message when trying to read cdda: uris. Release 1.1.0 2008-04-29 Gautier Portet * src/soundconverter.py: Faster startup time, by not running a useless thread when starting. 2008-04-28 Gautier Portet * src/soundconverter.py: Fix unhandled exception when parsing pipeline command. 2008-04-27 Gautier Portet * src/soundconverter.py: Add support for codeina/codecbuddy. 2008-04-22 Gautier Portet * src/soundconverter.py: Fix crash in add_uris(). (launchpad #211210) 2008-04-16 Gautier Portet * src/soundconverter.py: Fix just another unicode problem, this time when trying to remove messy chars. Please, think of the kitten, and give me ascii back! (launchpad #216119) 2008-04-15 Gautier Portet * src/soundconverter.py: Fix problem with unicode filenames that keep trying to crash the universe. (launchpad #212730) 2008-04-05 Gautier Portet * Release 1.0.0 2008-03-30 Gautier Portet * src/soundconverter.py: Only format tags (list) when displaying, So we don't mess with tags we don't understand. (launchpad #179886 thanks Shawn, Matthaeus, Brian) Release 1.0-rc1 2008-03-27 Gautier Portet * Fix typo which disabled clear list menu item * Fix filename_to_uri so it will play nice with relative and absolute paths, thus removing annoying gvfs error message at startup when output folder is not set. * CustomFileChooser now have case-insensitive filters. 2008-03-20 Gautier Portet * Add 3gp to the mime whitelist. 2008-03-11 Gautier Portet * Add a clear list button on toolbar. (thanks mrennecke) 2008-03-02 Gautier Portet * Add ca, en_GB, ms to the locales. * release 0.9.9 2008-03-02 Gautier Portet * src/soundconverter.py: Fix crash and progress problems after removing from the file list. Fix crash whith some filename encodings. 2008-02-05 Gautier Portet * po/: Added Catalan, English (United Kingdom), Malay Translations. Updated Czech, German, Spanish, Italian, Deutch, Russian, Serbian, Chinese Traductions 2008-01-08 Gautier Portet * src/soundconverter.py: Custom filename patterns can now be translated. * release 0.9.8 2007-12-26 Gautier Portet * src/soundconverter.py: Fixed horrible bug #12782 causing deletion of source file when it's the same as destination. 2007-11-14 Gautier Portet * po/ar,eu,he,sk,zh_CN.po: Added arabic, basque, hebrew, slovak and simplified chinese translations. (thanks Nizar, amenudo, rainofchaos, Pavol, Moshe) 2007-09-11 Gautier Portet * po/sr.po: Added Serbian translation. (thanks Miloš) 2007-08-31 Gautier Portet * src/soundconverter.py: Added a file extension filter in AddFolder. 2007-08-30 Gautier Portet * data/soundconverter.glade: Added Date, Genre and Year in the custom format hint. 2007-08-02 Gautier Portet * po/nl.po: Added Dutch translation. 2007-08-01 Gautier Portet * release 0.9.7 2007-07-31 Gautier Portet * po/soundconverter.pot: Updated pot file, since it was somewhat outdated. * po/de.po: Added German translation. (thanks Martin) * po/cs.po: Added Czech translation. (thanks Kamil) * src/soundconverter.py, data/soundconverter.glade: Add Folder(s) now work on non-local files aswell. * src/soundconverter.py: Added "artist - album" in folder patterns. (thanks Claudio) Fixed char escaping problem in same-folder-as-input mode. Fixed crashing when tags contained a list (ie. multiples authors). (thanks Ken) Better replace-messy-chars, with unicode->ascii to remove diacritics. * src/soundconverter.py: Added {Genre}, {Date} and {Year} in custom filename patterns. (thanks Jon) 2007-07-19 Gautier Portet * po/it.po: Added Italian translation. (thanks Stefano) 2007-07-09 Gautier Portet * po/es.po: Added spanish translation. (thanks Gary) 2007-07-04 Gautier Portet * data/soundconverter.desktop, src/soundconverter.py: Changed the desktop file so we accept list of URIs instead of just one local file, so opening multiples files from nautilus will work. 2007-06-25 Gautier Portet * po/ru.po: added russian translation. (thanks Alexandre) 2007-06-23 Gautier Portet * src/soundconverter.py: fixed track-count in custom filenames patterns. (thanks Jonas) 2007-06-20 Gautier Portet * data/soundconverter.desktop: Added common audio mimetypes. 2007-04-27 Gautier Portet * data/Makefile.am: Removed evil DESTDIR, thanks William! * Release 0.9.6 2007-04-25 Gautier Portet * soundconverter.py: Fixed error message when python-gstreamer is absent. * Release 0.9.5 2007-04-24 Gautier Portet * soundconverter.py: Better checking of gstreamer elements. Now we stop when required elements are missing, and we disable encoders not present. 2007-04-23 Gautier Portet * data/: GNOME/FreeDesktop compliant icon handling. Refresh icon cache at (un)install. 2007-04-16 Gautier Portet * po/ data/soundconverter.desktop: Desktop file translation enabled. 2007-04-15 Gautier Portet * soundconverter.py: Fixed quoting problem with destination folder (#10884). * soundconverter.glade: Removed underline handling for destination folder. (#10807) * data/: Minor fixes in icons/desktop handling. (#10808) - Changed name to "Sound Converter" - Removed Application from categories. 2007-04-08 Gautier Portet * soundconverter.glade: Set into_selected_folder use_underline to false so underscores in folder will not be interpreted by GTK. 2007-04-03 Gautier Portet * po/hu.po: Added hungarian translation. 2007-03-16 Gautier Portet * po/fr.po: Updated french translation. Changed email address of french translator. 2007-03-05 Gautier Portet * soundconverter: Use the new window icon. 2007-03-03 Gautier Portet * soundconverter.Desktop: Applied HIG Complience patch from Ubuntu maintainer (Thanks William) 2007-02-27 Gautier Portet * soundconverter: Added a link to the website when mp3 encoding is : unavailable, so hopefully it will dramatically reduce the number of emails I receive. Logo/Icon updated. * release 0.9.4 2007-02-26 Gautier Portet * soundconverter.py: Replaced xingheader by xingmux, fixing corruption of VBR MP3 (Thanks to James Lee and Pedro Alejandro López-Valencia). 2007-02-22 Gautier Portet * soundconverter.py: Correct escaping of destination. We will not crash anymore when destination folder contains spaces or weirds chars. Fixed a problem with lame parameters when using VBR and lowest quality. 2006-12-15 Gautier Portet * soundconverter.py: If id3v2mux is not present, we dump it instead of crashing encoder. 2006-12-05 Gautier Portet * po/pt_BR.po: Updated Brazilian translation. 2006-10-18 Gautier Portet * soundconverter.py: Fixed Tag writing when converting to mp3. Fixed progress. 2006-10-15 Gautier Portet * soundconverter.py: Only remove files when conversion was sucessfull. * release 0.9.2 2006-10-12 Gautier Portet * soundconverter.py: Fixed (?) loading of badly encoded filenames. now files encoded in latin-1 should be loadable instead of triggering an UnicodeDecodeError. (thanks Christopher) 2006-09-26 Gautier Portet * soundconverter.py: Added an option to delete original files. (thanks James) 2006-09-19 Gautier Portet * po/fr.po: french translation updated, Thanks Guillaume. 2006-09-12 Gautier Portet * po/sv_SE.po: new swedish translation, Thanks Daniel. 2006-09-07 Gautier Portet * release 0.9.1 2006-09-06 Gautier Portet * soundconverter.py: Fix vorbis encoder. 2006-09-05 Gautier Portet * soundconverter.py: Add a blacklist of mime type known not to have tags, to pass them faster. 2006-09-03 Gautier Portet * soundconverter.py: Fix quoting of tags when generating filenames. 2006-08-15 Gautier Portet * po/pl.po: Updated polish translation. 2006-08-21 Gautier Portet * soundconverter.py: batch mode will now overwrite files. 2006-08-02 Gautier Portet * soundconverter.py: progressbar work. some code cleanup. 2006-08-01 Gautier Portet * soundconverter.py: finally got gstreamer0.10 to work ? 2006-06-21 Gautier Portet *soundconverter.py: Added and option to select the threading model of BackgroundTask. 2006-06-13 Gautier Portet * soundconverter.py: Batch mode fixes merged from 0.8. 2006-06-12 Gautier Portet * soundconverter.py: The TagReader timeout starts now when the task really starts. 2006-06-06 Gautier Portet * soundconverter.py: Finally progress is working with GStreamer 0.10! 2006-06-05 Gautier Portet * soundconverter.py: YEEPEE!!! The bug plagging the gst0.10 port is GONE !! Merge & cleanup from 0.8 branch: * soundconverter.py: Use filesrc instead of gnomevfssrc if it's absent. (#7652) (debian #367253) * soundconverter: Added Spanish translation. * soundconverter: Added a custom file pattern choice. (thanks Adolfo) * soundconverter.py: Fix doubled folder (#7403). * soundconverter.py: Fix an uncatched InvalidURIError when adding files. * soundconverter.glade: Removed preferences and exit toolbar buttons as requested (#6777). 2006-03-29 Gautier Portet * soundconverter.py: More gstreamer0.10 love. The new api is nice, but porting to it sucks big time. 2006-03-19 Gautier Portet * soundconverter.py: Files permissions are copied from source file. Some more code for gstreamer0.10. 2006-02-06 Gautier Portet * soundconverter.py: Progress dialog is working now. 2006-02-03 Gautier Portet * soundconverter.glade: Corrected wrong signal called by the addfolder menuitem. 2006-02-02 Gautier Portet * soundconverter.py: Ouch, fixed broken converter pipeline. * soundconverter.glade: Fixed broken progressbar. 2006-02-01 Gautier Portet * soundconverter.py: We will now use gst_parse_launch() to create a pipeline, since it allows us to be much more flexible. Some issues with progressbar where fixed also. 2006-01-27 Gautier Portet * soundconverter.py: Applied patch to remove stupid pygtk warning at exit. thanks Hanno! 2006-01-24 Gautier Portet * Makefile: Fixed build on Gentoo. And corrected a typo causing pl and pt to be not installed * soundconverter.py|glade: Applied patch with new FileChooser. thanks Regis! 2006-01-21 Gautier Portet Release 0.8.3 Added Error handling when trying to load files with invalid characters... Release 0.8.2 make install-local #1154 Pause button #1455 Unique file #5334 Folder dropping #5561 Filtering by mime #5789 Fixed problem with vbr #5872 French Translation New list display UI Changes More precise progress bar Async tag reading Fixed gnomevfs problems with folders 2006-01-21 Gautier Portet * Makefile: Added translations to build system. * fr.po: Updated french translation. * soundconverter.glade: Some minors changes. * soundconverter.py: Some minors fixes. The UI is now unsensitive when we are converting. Fixed the convert button beiing called when we were unpausing. And that's all! 2006-01-20 Gautier Portet * soundconverter.py: Fixed the convert/stop buttons, and some more minor UI fixes. 2006-01-19 Gautier Portet * soundconverter.py: The progressbar should be more precise now. 2006-01-16 Gautier Portet * soundconverter.py: hum?!?!? File dropping was *again* broken, maybe it's my evil twin who edits the code :) * soundconverter.py: added a timeout when reading tags. 2006-01-15 Gautier Portet * soundconverter.glade: Reverted to old UI to make a release soon. * soundconverter.py: Changed the gst-lame problem at vbr-quality=9 handling for a cleaner one. 2006-01-11 Gautier Portet * Makefile: Added install-local. #1154 (Thanks Régis & Janis) * Added a makedirs() that use gnomevfs, so folders will really be created now, even on remote filesystems. 2006-01-10 Gautier Portet * Wow, fixed the problem when we generate filenames from tags but tags are not read when preparing filenames. This was a big mess, and I tried numerous solutions, but I will keep the only one that is working for now: just wait tags to be read before starting conversion. Sorry, this sucks... Hopefully I read that GStreamer 0.10 is better with threads :) 2006-01-07 Gautier Portet * Added the possibility to pause the conversion. 2005-12-25 Gautier Portet * Files can only be added once in the list. 2005-12-22 Gautier Portet * Finally got walking on gnomevfs to work. Now folder importing is really usable... * Added a default to tags, so tag-filled destination paths will be valid. 2005-12-20 Gautier Portet * Better type detection. * Temporary solved the (non?) problem when trying to convert files which don't have tags filled yet. 2005-12-05 Gautier Portet * Files types are now detected at loading, expect filtering on types soon. 2005-11-29 Gautier Portet * file list is now filled asynchronously with tags if they are present. * list display is handled completely differently, hope its better like this 2005-11-08 Gautier Portet * better folder dropping: now we generate a good base/filename for SoundFile. But it works not so well when we want to create folders based on tags, so it will need some more work. 2005-11-07 Gautier Portet * fixed broken folder dropping. (#5561) 2005-11-06 Gautier Portet * drag and drop is now able to import a folder. * better display of example filename in preferences. * gnomevfs support. #1365 * add a temporary hack for abr/vbr mp3 with quality==9 #5445 * release 0.8.1 2005-11-02 Gautier Portet * fixed tree structure being lost when importing folders. #5336 2005-10-25 Gautier Portet * added brazilian translation. (thanks jonh) * woops, really added polish translation this time. 2005-10-18 Gautier Portet * applied patch for polish tranlation (thanks Dominik) 2005-10-09 Gautier Portet * added an option to apply to all queue the option choose when overwriting. #1341 2005-09-28 Gautier Portet * applied patch from Elias for Gentoo 2005-09-20 ??? Gautier Portet * added a display of the approximate bitrate of the output * fixed output format not always displayed updated #4736 (thanks Janis) * at least a correct handling of the absence of gstreamer-lame * fixed a crash whith some output folders folders #3840 (thanks Jason) * added a button to add a folder recursively * fixed a crash when loading preferences #5128 (thanks Joe) 2005-06-13 Gautier Portet * added french tranlation. (thanks Guillaume Bedot ) * fixed a bug causing ogg tags to be ignored. (thanks Noa Resare ) 2005-04-15 Gautier Portet * reverted quality setting to 'real-world' quantities -> values stored in gconf are now the values passed to gstreamer and not meaningless enums. * added a label showing an approximate bitrate in the preference window 2005-03-24 Gautier Portet * Gracefully handled gnome.vfs deprecation (#3649) * Fixed broken "replace messy chars" button * Make use of urllib.unquote where appropriate (#3655) (makedirs, replace messy chars) * Making release version 0.7.1 2005-03-24 Gautier Portet * Making release version 0.7 2005-03-24 Gautier Portet * soundconverter.glade: added a logo on the about box. * soundconverter.py: fixed about dialog showing only once (we need an optimal method for handling dialogs). 2005-03-23 Gautier Portet * soundconverter.py: added a dialog asking what to do when a file exists. 2005-03-22 Gautier Portet * soundconverter.glade: added an Add button on toolbar, added separators. 2005-03-17 Gautier Portet * soundconverter.py: removed xing header generation when outputing mp3, since it seems to break xmms mad decoder. * soundconverter.glade: changed the preference dialog, for a cleaner one. 2005-03-15 Gautier Portet * added the quality settings for vorbis and mp3 * soundconverter.py: some code cleanup. 2005-03-14 Gautier Portet * soundconverter.py: changed deprecated import gnome.vfs to gnomevfs 2005-02-27 Gautier Portet * Added basic mp3 support 2004-12-31 Lars Wirzenius * Making release version 0.5. 2004-12-31 Lars Wirzenius * COPYING: Added. * README: Added copyright and license information. 2004-12-31 Lars Wirzenius * soundconverter.py: Make sure all the keys used for formatting target names exist in the dict used for input to the patterns. 2004-12-31 Lars Wirzenius * soundconverter.1: Wrote. 2004-12-31 Lars Wirzenius * soundconverter.py: Better way to stop a TagReader pipeline that doesn't cause Gstreamer runtime warnings. Also, allow selecting multiple files in the new filechooser for adding files. 2004-12-31 Lars Wirzenius * soundconverter.glade, soundconverter.py: Removed the addchoser dialog from the Glade file. Added code to create it in the Python file instead. The reason: mysteriously the "Cancel" and "Open" buttons disappeared from the dialog and this was the way to get them back, since it seems they need to be added explicitly when the dialog is created. Weird. 2004-12-31 Lars Wirzenius * soundconverter.glade: Added a shortcut ctrl-O for adding new files. 2004-12-31 Lars Wirzenius * soundconverter.py: Since we can deal with lots of kinds of input files, let's not have a filter in the file chooser. 2004-12-28 Lars Wirzenius * soundconverter.py: Now using the "decodebin" GstElement for finding tags and decoding. Now we should be able to handle anything GStreamer can handle for input. 2004-12-27 Lars Wirzenius * Making release version 0.4. 2004-12-24 Lars Wirzenius * soundconverter.py: Handle error printing in cli mode as well. 2004-12-24 Lars Wirzenius * soundconverter.py, soundconverter.glade: Refactoring to make error dialogs and their use better. 2004-12-24 Lars Wirzenius * soundconverter.py, soundconverter.glade: Added example filename shown in the preferences dialog that is updated after each change. 2004-12-24 Lars Wirzenius * soundconverter.py: Don't encode the name of the selected folder, just subfolders that are created and the basename. 2004-12-24 Lars Wirzenius * soundconverter.py: I am no longer a klutz. Implemented the creation of subfolders according to patterns. 2004-12-24 Lars Wirzenius * soundconverter.py, soundconverter.glade: User may choose whether to create subfolders below the selected folder. Not that they are yet created, but I happened to commit the change already by mistake so now I need to write a ChangeLog entry as well. I am such a klutz. 2004-12-24 Lars Wirzenius * soundconverter.py, soundconverter.glade: User may now choose whether output files are put into the same directory as the corresponding input files, or into a folder the user has specifically chosen. 2004-12-24 Lars Wirzenius * soundconverter.py, soundconverter.glade: Made it possible again to choose whether "messy" characters in the target filenames are replaced with other characters. 2004-12-24 Lars Wirzenius * soundconverter.py, soundconverter.glade: Simplified selection of basename generation: now there is only a single ComboBox selection instead of that plus two radio buttons. This should be clearer. 2004-12-23 Lars Wirzenius * soundconverter.py, soundconverter.glade: The user may now choose how the output file is named: basename is the same as input file (but with suffix changed) or output name is constructed from meta data tags. 2004-12-23 Lars Wirzenius * soundconverter.py: Changed the TargetNameGenerator to support keyword based patterns for location and basename. * soundconverterTests.py: Related changes. 2004-12-23 Lars Wirzenius * soundconverter.py: Refactoring. Information about the input file (location, tags) is now kept in a separate class. 2004-12-23 Lars Wirzenius * soundconverter.py: Added support for audio/x-wav for file chooser filter. * soundconverter.py, soundconverter.glade: Reworked the Preferences dialog. Only selection of output format and Ogg Vorbis quality levels work for now. The rest will follow. 2004-12-18 Lars Wirzenius * soundconverter.py: Set name on the filter for the file chooser. 2004-12-15 Lars Wirzenius * soundconverter.py: Make the GUI report how much time was spent for the conversions. * README: Add note about performance. 2004-12-15 Lars Wirzenius * soundconverter.py: Reset the internal counters for dealing with progress when the job is finished, so that if we start a new job, the counters start from zero, not at the end of the previous job. 2004-12-15 Lars Wirzenius * soundconverter.py: Added support for drag-and-dropping files from Nautilus to the file list in Sound Converter. This was based on a patch from Chris Jones, but I re-did to fit the style of my code. 2004-12-12 Lars Wirzenius * soundconverter.py: In Pipeline.work, don't do anything if the pipeline is stopped. * soundconverter.py: In TagReader.finish, call found_tag_hook unless it has been called already. * soundconverter.py: Add -q/--quiet option. 2004-12-05 Lars Wirzenius * Making release version 0.3. 2004-12-05 Lars Wirzenius * soundconverter.py: Added support for Wave files as output. * README: Updated. 2004-12-05 Lars Wirzenius * soundconverter.py: Added support for Wave files (.wav, audio/x-wav) as input. 2004-12-05 Lars Wirzenius * Makefile: Use snd/* for simple tag finding in "make check". * soundconverter.py: Minor refactoring. 2004-12-05 Lars Wirzenius * soundconverter.py: Changed the output pipeline to use gnomevfssink for output, rather than filesink. We now do all I/O to the sound files via GNOME vfs. 2004-12-05 Lars Wirzenius * soundconverter.py: Changed TargetNameGenerator to generate uris instead of filenames. * soundconverterTests.py: Related changes. 2004-12-05 Lars Wirzenius * soundconverter.py: Input is now via gnomevfssrc, instead of filesrc, and all filenames that refer to the input have been converted to use file: urls. 2004-12-05 Lars Wirzenius * soundconverter.py: Made usable from command line as well. 2004-11-28 Lars Wirzenius * Making release version 0.2. 2004-11-28 Lars Wirzenius * soundconverter.py: Fixed stopping. 2004-11-28 Lars Wirzenius * soundconverter.py: the about dialog now shows name and version number. * soundconverter.glade: Added a bit of space around the label in the prefs dialog. This didn't make it less ugly, however. 2004-11-28 Lars Wirzenius * soundconverter.py: Re-added support for vorbis-quality. * Makefile: Added "clean" target. * README: Cleanups and updates. 2004-11-28 Lars Wirzenius * soundconverter.py: Rewrote task handling and tag reading and conversion stuff. * README: Added. * .cvsignore: Added. 2004-11-08 Lars Wirzenius * soundconverter.py: Ported to work with current version (0.7.93-1) of python-gst. The change: can't create a gst.Element("foo"), need to call gst.element_factory_find("foo") instead. * soundconverter.py: Wrote a class TargetNameGenerator to generate the names of output files, and modified the rest of the program to use it. This should eventually implement a language for describing the output name (user can set patterns like "%(artist)s-%(album)s-%(title)s.%(suffix)s"). * soundconverterTests.py: Wrote tests for TargetNameGenerator. * Makefile: Added a "check" target. 2004-10-29 Lars Wirzenius * Making release version 0.1. 2004-10-29 Lars Wirzenius * soundconverter.glade, soundconverter.py: If an output file exists, ask the user what to do. 2004-10-29 Lars Wirzenius * Makefile: Wrote. 2004-10-29 Lars Wirzenius * soundconverter.glade, soundconverter.py: Added a preferences dialog to allow setting of the quality level of the Ogg Vorbis files we create. The value is stored in GConf. 2004-10-29 Lars Wirzenius * soundconverter.py: Got rid of the useless File class, since the same data is stored in the GtkListStore as well. 2004-10-25 Lars Wirzenius * soundconverter.py: More refactoring. Got rid of the useless (since we only have one window) SoundConverterApp class. 2004-10-25 Lars Wirzenius * soundconverter.py: Refactored so that the two background tasks are based on a common base class that contains the common functionality. soundconverter-4.0.5/COPYING000066400000000000000000001045131460501237000156350ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . soundconverter-4.0.5/NEWS000066400000000000000000000055431460501237000153040ustar00rootroot00000000000000 Version 2.0.4 ============= Add support for Opus codec (http://www.opus-codec.org/) Fix command line arguments parsing. (Closes lp:995862, thanks Michael) Fix problem with AAC settings. (closes lp:954555, thanks Patrick and zebul666) Fix crash in FolderChooser. (Closes fedora:836338, thanks Michael) Fix yet another problem with URIs handling. (Closes lp:998371, thanks Bastian) Version 2.0.3 ============= Fix stability and progress related problems. Disable common path when creating folders using tags. (Closes lp:972158, thanks Eric) Increase Low pass filter frequency when converting to MP3. (Closes lp:881413, thanks Michael) Use original filename as title when tags are not present. (Closes lp:984790) Update Translations. Version 2.0.2 ============= Fix progress-related blocking by speeding up the progress update. (Closes lp:940648, thanks Ben) Add canadian french. (Thanks Alain-Olivier) Fix many English spelling errors. (Thanks Alain-Olivier) Version 2.0.1 ============= Fix size of icons in menu bar. thanks Johan. Fix syntax error when converting to mp3. thanks Jakob. Fix broken GNOME Audio Profiles. Add audio/flac in supported mimetypes, fixing "open with" in recent ditribs. Version 2.0 =========== Exclude .iso files from conversion since we cannot read them. Update translations. Fix crash when last-used-folders and recent.xbel are empty. closes #921515, thanks Danilo & Michael. Fix unresponsible UI when reading a lot of tags. closes #917439, thanks Ben. Version 2.0-rc5 =============== Fix problem with Mime type combobox when any encoder is disabled. Closes #911759 Check validity of Gstreamer Audio Profiles. (for real this time) Fix commit d5b5046, closes fedora #744596. Remove horizontal scroller on filelist since it should never be shown. Translate default album/artist/title names. Closes #910522. Don't try to display images in log :) Update-po Update frecnh translation. Version 2.0-rc4 =============== Reset selected audio profile if not a valid one. #814015 Adding is 4x faster. We first scan the files, then add to the filelist. Clearing the filelist is now instant. Version 2.0-rc3 =============== Fix resample combobox. Was not working anymore. Version 2.0-rc2 =============== Automatic codec install is repaired. Gnome Audio profiles are working. Fix 8 bits wav encoding. Version 2.0-rc1 =============== Great code reorganization and cleaning. Display individual files progression. Fix broken Vorbis output. #508767 Much faster adding of files, since we only read the tags when we have to. Smoother operation, lesser unresponsive moments. #784926 Add {Ext} {DiscNumber} and {DiscTotal} filename patterns. You can now limit the number of parallel conversions. The partial files are removed when canceling a conversion. What is know to be broken : Automatic codec install, work in progress. soundconverter-4.0.5/README.md000066400000000000000000000052061460501237000160600ustar00rootroot00000000000000# SoundConverter A simple sound converter application for the GNOME environment. It reads anything the GStreamer library can read, and writes **Ogg Vorbis**, **FLAC**, **Wave**, **MP3** and **M4A** files. This application is somewhat less fast than various command line tools. Not a whole lot, however, and not enough to make me worry about performance for the foreseeable future. If you want ultimate performance, the command line tools are always going to be preferable.

SoundConverter Screenshot

SoundConverter Screenshot

## Building and Installation Ubuntu and Arch packages exist in the official repositories. Installing from source requires distutils-extra ```bash git clone https://github.com/kassoulet/soundconverter.git cd soundconverter git checkout py3k sudo python3 setup.py install soundconverter ``` ## Help For command line args, see ```bash soundconverter --help gst-launch-1.0 --help-gst ``` and https://gstreamer.freedesktop.org/documentation/application-development/appendix/checklist-element.html ## Testing To start unittests, use ```bash sudo python3 setup.py install python3 tests/test.py python3 tests/test.py discoverer.DiscovererTest.test_read_tags ``` ## Copyright and Acknowledgements Copyright 2004 Lars Wirzenius Copyright 2005-2020 Gautier Portet Co-author Sezanzeb Thanks to: Guillaume Bedot, Dominik Zabłotny, Noa Resare, Nil Gradisnik, Elias Autio, Thom Pischke, Qball Cow, Janis Blechert, Brendan Martens, Jason Martens, Wouter Stomp, Joe Wrigley, Jonh Wendell, Regis Floret, Toni Fiz, Seketeli Apelete, Cristiano Canguçu, Adolfo González Blázquez, Marc E., Tobias Kral, Hanno Böck, Pedro Alejandro López-Valencia, James Lee, Christopher Barrington-Leigh, Thomas Schwing, Remi Grolleau, Julien Gascard, Kamil Páral, Stefano Luciani, Martin Seifert, Claudio Saavedra, Ken Harris, Jon Arnold, Major Kong, Uwe Bugla This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA soundconverter-4.0.5/bin/000077500000000000000000000000001460501237000153465ustar00rootroot00000000000000soundconverter-4.0.5/bin/soundconverter000066400000000000000000000226271460501237000203620ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA """SoundConverter Launcher.""" # imports and package setup import os import site import sys from optparse import OptionParser, OptionGroup import locale import gettext _ = gettext.gettext import pkg_resources # read values from setup.py VERSION = pkg_resources.require('soundconverter')[0].version NAME = pkg_resources.require('soundconverter')[0].project_name SOURCE_PATH = pkg_resources.require('soundconverter')[0].location # depending on where this file is installed to, make sure to use the proper # prefix path for data # https://docs.python.org/3/distutils/setupscript.html?highlight=package_data#installing-additional-files # noqa if SOURCE_PATH.startswith(site.USER_BASE): DATA_PATH = os.path.join(site.USER_BASE, 'share/soundconverter') elif SOURCE_PATH.startswith('/usr/local/'): DATA_PATH = '/usr/local/share/soundconverter' elif SOURCE_PATH.startswith('/usr/'): DATA_PATH = '/usr/share/soundconverter' elif SOURCE_PATH.startswith('/app/'): # flatpak support DATA_PATH = '/app/share/soundconverter' # For flatpak, we need to explicitly (re-)bind the locale and the gettext # textdomain, because Python's default localedir is pointing to # /usr/share/locale, whereas flatpaks install their locales to # /app/share/locale. # For reference, see https://docs.python.org/3/library/gettext.html#id3 locale.setlocale(locale.LC_ALL, '') locale.bindtextdomain(NAME, '/app/share/locale') gettext.bindtextdomain(NAME, '/app/share/locale') gettext.textdomain(NAME) else: # installed with -e, running from the cloned git source DATA_PATH = os.path.join(SOURCE_PATH, 'data') try: import gi gi.require_version('GstPbutils', '1.0') gi.require_version('Gst', '1.0') gi.require_version('Gtk', '3.0') from gi.repository import Gst, Gtk, GLib, Gdk except (ImportError, ValueError) as error: print(('{} needs GTK >= 3.0 (Error: "{}")'.format(NAME, error))) sys.exit(1) # Gst.init takes those args it knows from sys.argv and returns the remaining. # For args compatible to gstreamer, see `gst-launch-1.0 --help-gst` args = Gst.init(sys.argv) if type(args) != list: # in tests it just suddenly returns a boolean instead. when writing tests, # beware that `--gst-...` arguments are not filtered here args = sys.argv from soundconverter.util.settings import settings from soundconverter.interface.batch import batch_main, \ CLICheck, use_memory_gsettings, validate_args from soundconverter.interface.ui import gui_main from soundconverter.util.logger import logger, update_verbosity from soundconverter.gstreamer.converter import Converter from soundconverter.interface.preferences import rates def mode_callback(option, opt, value, parser, **kwargs): """Write the main mode (batch, gui, tags) into the options.""" setattr(parser.values, option.dest, kwargs[option.dest]) class ModifiedOptionParser(OptionParser): """An OptionParser class that doesn't remove newlines on the epilog in order to show usage examples. https://stackoverflow.com/questions/1857346/ See optparse.OptionParser for the original docstring """ def format_epilog(self, formatter): if self.epilog is None: return "" return self.epilog def parse_command_line(): """Create and return the OptionParser. Parses the command line arguments and displays help with --help. """ parser = ModifiedOptionParser( epilog='\nExamples:\n' ' soundconverter -b [input paths] -f flac -o [output path]\n' ' soundconverter -b ./file_1.flac ./file_2.flac -f mp3 -q 0 -m ' + 'vbr -o ~/compressed -e skip\n' ' soundconverter -b ~/music -r -f m4a -q 320 -o ' + '/mnt/sd/compressed -p {artist}/{title}\n' ) parser.add_option( '-b', '--batch', dest='main', action='callback', callback=mode_callback, callback_kwargs={'main': 'batch'}, help=_( 'Convert in batch mode, from the command line, without ' 'a graphical user interface. You can use this from, ' 'say, shell scripts.' ) ) parser.add_option( '-t', '--tags', dest='main', action='callback', callback=mode_callback, callback_kwargs={'main': 'tags'}, help=_( 'Show tags for input files instead of converting ' 'them. This disables the graphical user interface.' ) ) parser.add_option( '-d', '--debug', action='store_true', dest='debug', help=_('Displays additional debug information'), default=False ) parser.add_option( '-j', '--jobs', action='store', type='int', dest='forced-jobs', metavar='NUM', help=_('Force number of concurrent conversions.') ) parser.add_option( '-D', '--delete-original', action='store_true', dest='delete-original', help=_('Deletes the original file when conversion is done.') ) parser.add_option( '-R', '--output-resample', dest='output-resample', help=_('Resamples audio during conversion. Possible values: %(rates)s') % {'rates': ", ".join([str(item) for item in rates])}, type=int ) # batch mode settings batch_option_group = OptionGroup( parser, 'Batch Mode Options', 'Those options will only have effect when the -b, -c or -t ' 'option is provided' ) batch_option_group.add_option( '-f', '--format', dest='format', metavar='NAME', help=_( 'Set the output format. ' 'aac/m4a, flac, mp3, ogg, opus and wav are supported.' ) ) # mode might also be used for format options of other formats at some # point if applicable batch_option_group.add_option( '-m', '--mode', dest='mode', metavar='MODE', help=_( 'One of cbr, abr or vbr (default) for mp3' ) ) batch_option_group.add_option( '-e', '--existing', dest='existing', metavar='MODE', help=_( 'One of {}, {} or {}'.format( Converter.SKIP, Converter.OVERWRITE, Converter.INCREMENT ) ), default=Converter.INCREMENT ) batch_option_group.add_option( '-r', '--recursive', action='store_true', dest='recursive', help=_('Go recursively into subdirectories'), default=False ) batch_option_group.add_option( '-o', '--output', action='store', dest='output-path', metavar='PATH', help=_( 'Put converted files into a different directory while rebuilding ' 'the original directory structure. This includes the name of the ' 'original directory if a directory was selected.' ), default=None ) batch_option_group.add_option( '-p', '--pattern', action='store', dest='custom-filename-pattern', metavar='PATH', help=_( 'For example {artist}/{album}/{title}. title defaults to the ' 'filename if unset. Unknown tags default to "Unknown ..." ' 'otherwise.' ), default=None ) batch_option_group.add_option( '-q', '--quality', action='store', type='float', dest='quality', metavar='NUM', help=_( 'Quality of the converted output file. Possible values: ' 'vorbis: 0.0 - 1.0; ' 'aac/m4a: 0 - 400; ' 'opus: 6 - 510; ' 'mp3 vbr: 9 (low) - 0 (high); ' 'mp3 abr: 64 - 320; ' 'mp3 cbr: 64 - 320; ' 'wav: 8, 16, 32 (bitdepth); ' 'flac: 0 - 8 (compression strength)' ) ) parser.add_option_group(batch_option_group) return parser parser = parse_command_line() options, files = parser.parse_args(args[1:]) options = vars(options) # the only cli args that are not available over gio settings. settings['main'] = options['main'] or 'gui' settings['debug'] = options['debug'] settings['recursive'] = options['recursive'] settings['existing'] = options['existing'] # now that the settings are populated, the verbosity can be determined: update_verbosity() logger.info(('{} {}'.format(NAME, VERSION))) if settings['main'] == 'gui': GLADEFILE = os.path.join(DATA_PATH, 'soundconverter.glade') gui_main(NAME, VERSION, GLADEFILE, files) else: if not files: logger.info('nothing to do…') # first check if the cli is used correctly if not validate_args(options): raise SystemExit # then store them in the gio settings use_memory_gsettings(options) if settings['main'] == 'tags': CLICheck(files, verbose=True) elif settings['main'] == 'batch': batch_main(files) soundconverter-4.0.5/data/000077500000000000000000000000001460501237000155075ustar00rootroot00000000000000soundconverter-4.0.5/data/org.soundconverter.gschema.xml000066400000000000000000000103341460501237000235060ustar00rootroot00000000000000 true Same folder as input '' Selected folder os.path.expanduser('~') false Create subfolders 0 Subfolder pattern 0 Name pattern '{Track} - {Title}' Custom filename pattern false Replace messy chars 'audio/x-vorbis' Output MIME type '.ogg' Ouput suffix 0.6 Vorbis quality false Vorbis uses .oga extension 'vbr' MP3 mode 192 MP3 CBR quality 192 MP3 ABR quality 3 MP3 VBR quality 192 AAC quality 96 Opus bitrate 8 Flac compression level 16 Wav sample width false Delete original false Resample output 48000 Resample rate false Force mono output '' Last used folder false Limit jobs 1 Number of jobs soundconverter-4.0.5/data/screenshot.png000066400000000000000000001247111460501237000204000ustar00rootroot00000000000000PNG  IHDRzN AoiCCPicc(u;KA$E#ZH"E 4AB`fwCHe7A`c!X6 (W#ac,̜'KfmA٪8D\iOatT*ɿC9_i;qJV!cE}#PGŅ*v2IZ?,:eAHT5ϣnY3R2pI A%JTjIfb_)cߦ#EFEJלԼ9JTt#Í8<ZyW?=YM4&fSA75cNסK | Y辂FVBfUvva@w-|hvI pHYs  ~ IDATx^ pg ^}S)"uDI%-v3ljI%ST*MURT9NNOwOwV[:%IݧyIo&`>p| ? P{^P9/g   RtRV (h&(P}fA Ri{Tip5zĜ6K$,T`EZ(@@@&B :]bODjg =@@@@M{" 'ͣ#P:T?A؋wyb-vwMr= _'X:J^=%kA!n;׮=hzm}vz`YW5}fxcJt_'Lsr1i#@E|Ċ%lnè΀k_K'gY0Mu9i#X6ѓw~pe[mU*:B]{>'GyOv..fL?סD @@@@[z5`g,IG/PGJn۔ő3cuC)@ 9zޞ+%v[\Dɿvw>k/=,+]GгB/=9'.{Eop@^k,XEFF*x,3&!G"~#F=m0Ge3O[/,$ǣ>ߊ0bx]+Y5E=1SŸ@:됐,DGѹKS |$10E8d{hGSx9.:}B9t,= 6~Ue Г';2?7:X~gU!_@6[2nKfV6%c+ͥTܓ!+l'oB>;\jTѨztmL+s5N 6z?^Q8=LIɑw+} py"-CyN9't>d2'&I.D<;vp7eqX0?/f_'s^׳>b:3IΝy["V]Bf"/?Dоlޖh2_>M<6\{q e)L/*6Ax]w[m1%B^W&I;vEK?M7:ťܫi{O# w (†ʫw5ߥY,h0{ȫDʹs[&5[yϦ~VEV(ag= 6/ygT'][8 9f YnD_)b2ڣra3 yeNJ }uF]e7xcՖp_5{Wn;ﭝnsWV%'O%K?|H7ak99Oĝ8Fg(#йy{F馅x$t{|ص;*_oL 6 ~|ofI*\<ġcﰤ1= u|Gob&;qџ}A{~^0ޫ2/ WoPZfh)ɉ4={֖x풂m?55CwgmtEw/daVt'c,J%ddȘ*Đ M=>B"yrJ>;5Y [ I@W).<*;eeؔc*X;Qy$O*u5xuviRl=5|@DmXO7Uzn[X^i¶kUdŦX@-ƒ(4[L_Z ռkevSUj~޳^?j쪊9zlg&XE4=c7xs'^aZ/KXyǒUVZ|ؼ|#ꕇԹF>ǭsU 7pa$sxʍ|6ݷy,H=& ei3b 7\Ia\,mwsEauxQS9gT27g<}b &63/=6x2Fꘗ5 ^BrZo?#_i)-dx]w4[m-G/9crؓ'"o@[Խ+iI.K2.?kI>kskk@AOB9VHŗ?Zh/эXE >7da+nb qjDH`5iD$5^\q J {-5'^,Kz-Ie%="$rد'ۋX~08ĪYr⼜%"Nz#1b-bO'|Vx% Z3K%icNx9A<X{d=0YEhIry O*$G<Bc1y{:RE(~%QY'YSr({/YJkAҫPϠT.JxcX>!@X3@XQ^8,ZY'3j&r|UyWi!])a('3u&N;Z@rR']䬯_$)+S% >pVTcLq&Aoju8iU2 =i ج,><ϭ3O-l;6N6|?hp_!|  c芆n0#'%MDʩΉ+OɖĤӄsCN姄ÙY XQ'+3$N #X)a'O]Vfuq|&V&!\=&NTf}I]6}'Q?)ꐃc%D h$BONݗ3hzSi7MLL+^% )h}y{R~/ Y9zEDnGWwIWߺ#xT$sF[X,?0y Xy`jey'`ā+, ^A@@@` @`    4 +z'[ [@@@V mA~~ aA@@b^4    s bn˱`X!+;ur,@@@ V@Nc   1GbĊG}HW])+EC0Dipq\٬D5&:Tj"-&JOT[4 t   B t=$qr[9ZfsκohB_g[y 'tw^- N-U@@@VC^pm [J @@@bB/Ab    m mG00 ݼ"viq}`   a ĴЛ;wЋ~;hRqq!ﬥ J`w f~w23G<w0ͺfɖJ|SKzGb6SZvm76  ӉGiE$ L~@@@C fg.P~~.:Oѱ1IIN7^GG$'|^3oRQHq&'f ?]t_)طYPcqf>_.@$bV走W--FYpin]qz;kdz[WHC-mw0_<ֱwPBJBnwPuUz?)ٍ[I;ؓ'㉗Q|ZAj}FFƔwPD涭Uc,ܦg=sSQaZ#-$BOWϋ^ kig}$MLĕEUfFGκ:oC)aMvR]r[hnn, 딐bPUe NLL*oaqQerH&MMб#NMTί*f    )ǵiEhl\OլJ=LiQn o/aWLoEw?Sӷ]|_, ?"ά< ,=ZYY~]%s9//2X|rW]ɫU޳R)?/7ڃr1cMϳpE蝼Jl 0zuo&Tݺs?xDG0oXOwEj*OHO ڀQ1K8)z6IUk{TnsS=oi H~n?=Vqi\Ԩ¶yQNVq@@@`I'!Լ\z[];·]!ҍ޸Gi{r%jy,r8?#Xd+zZsD?WN !ZM1)d+jA$"I|]Im m&v.N'UϟF>xKUb#ܿTʱ)33vU!gqIc19e> B$Ot%,hUU|27@l=c Ǿˇ!g76kBUm.\>|Tl Jwrq%Alݲh1>|TCKX = V?x++qef裙;}""U qTyi]{/^?]~jWցZu>뎈O.ά?   @[[ɱ.~1SFr-/Z&Z'[?fCm1_^@@@V CMa4慎@@@@`&wmC1nVYw'    FZ$'. IDAT 2Dv>Wss}J̍Դg׷TWҖJ#U3}Bcc㔓M6 A@@`% ĬkiMii6ڿoRR^M&b]uh{"-ɓvr'[y 5?0HmYf(/m[YjiMz=禢G:XbR\.yKѽS6tݰv{v)!7ӗlrʤIp p8n ;r|k&@@@<z"\61I?") 8ԻX,63^]HDNdbOމlԅLzZS[Y<ivv&9⃈4#3}JPMNr:gYh|bniF >@@@b@L $W+j65J٧RMx"5)pymp|7 G:Xc"W$k\zېaS'7˗>KR- :ǮHo erxVh?Mck>   \bR ܺڭ?0@M-$JDˑQUU*+˸ rLrF+Gݪ*WDiOt(hUU|:G#$[,d}A}>=ߠ *Tg݅3nݾD|l}=%fg]ûɢʊ2uPs7󵄎5۷w 6:}+1Y*ra    @ /ʹk'OZ:P[[g+J'G}uk]uݭ08"Fuuur܇_R ?%s_]re{c6touzk}>%`гYf/bҖw1 @@@ `W`EmR25BЪO0!jlӸ}yNO^M =e'SAFX *&X.}65nZ @@@@` 9]nAjpnRoIMU@@@@ V *>0H?˝rѲUzY7 M lX7[f펐}{aãS1 %` Wi+2@@@@ *b$   FB/v@2X7SSN#}sޯ+~)~CC%`hN/64RVfmVk7(>!v1vOf3$ŴRВ!4Ǣor-@4Y-!N^_ЭEo?{2B;\q&[j-@@"#W ݾG##cda/[Ey)mZi:/!iw;LWn|Bu[C`f1^, 䩳I;m, :NNvGvju*mEYg, gr:uэm!X3X-=ڍ7ZnŞnY|ZPLr[{sn**,vGDkC@h1[2ibb.\BEa_ƫT]UIS X$HDO󍶈6*>B%P҄^q;ݰauwx=G55؛?Bv6\F,H6m|cn۷ܜ0)qIܩTyjz:1qbZ{>zCsR^;Ͳ2H^bINԄ^A~ sN=,NwlT-Ir"4qTbl}㔔(, ?άe dx IL@@@1-DZZo.U? 9%Arr<4#E6߼LHٸş+ɯyn~,Ԃ1\FzB}   i'+#-D]H՛9npIhLLqoClgoٛVq==9w9R8{LuK ɄǂDzaIZ4l0(޳ JHlsھa8<;rضL\pUb`Hm(&n= :X0Tgh``H1"(*ӛN(ݹ0Hu,NEUQ$MPD\,sߥ CƛB .b"LO>O/7߼vN@@@P)yqe"CZB[{wR:u<%&&;"K'pA*m.T?t|Ԋm{;t3?E_==ɾXYDi]qR,?INҮ.?kyl\[[[jkŏ> ]>mYW]D1"@r+xv-ɵ-ɚGր@     qW0'0Bf }djuvo1ti:GE3} !WV[hp!Xѳ= , QcOO^M,O^Vz2?    JP~z,>UX7DwEb1%z.7 5u8|B T B$WPa@0T }~a=[nxd.0e vG԰D L@@@ *+mWb4eY`|$`ЋMX5D' @@@MBoсSSNgn4^_K헧YSzF  =^ePn7ZivEicS3TWh94Ǣorrj:@@@`ĤGdݽl)EPomJl'ii\.5C &=zv˓iZw Ԕd{A~.]mIϞPͭTWTW*mšF3,޾۪=CHֶ;?0HǎCEli“97}YjyuŅTUpsu2 Zb?0@))TW5͍[I;ؓkUۄ]{422FSEy)mZ@\on=;(##66B.Ky@7 6N/qۚf&kyOCCT 5o]a1);YDr~$}uoU8!wN.5\/N~G,玅}{wg/SgUAu73X%y;t/\ps 6;UE3qEQ/ʊ2Ш2)z,ؼ   H2wBvA]~jג&ցZGV4_+=    "Fuuu|x$_~J\KZ/ŤGoAq2zl0]KPg+wK.C    Bo_iB7Ym,    Hs>9kv;W$[+?:1'X6 x>=K.1@0n@@@@ zs(tkt*5;ee'SAnz- @@@bB t3H#qrGtlqJ9릾"ڂ"8U凢ݱ(8zŞ6<:eD7@@@V-Cb+mųgg   LP v6zѶ#DBO'o\]#iCb̩iMS |,|dW+~)~CT     ņFzK=HO~w23GT{Hq-z>zL&(+;聼:;wЋ~;hRqq!﬍W$s^9tv=a:q(ͱ蛜DQO$  E flCJrwv!::dL>m{0ߐo1 ;`tt>%FHbK5~ql Ơ Bo]qz;kĞ5:u i``ޗ'Oӎ=VrV?ᗔ~/`#ݶ`nߣ1TQ^J۶Vզ Ju5[iKu%- zrYlI}T>/!ؑw(';3fB|<=]ڸa߷fg]tfuq8'S'qjO5)TW5w6T%%%?4jiB97_ۇ@eJbg~W y󾽻w\JacL1-3(J=/Xef=S2Rf?x[e1[2ibb.\BEJ\M6*dJ)sÏ{.&5g8m;5,6z>w]cJ4h 8%z=zxY~bayfFb4?M777|>nBש=cL7H^"Y?ڂ@81]!Q/ٸ$TYGG7{Y(+-ݨ®IIImfb%++֯+R޸'ޛf Q iyTZo'}J FI{W-rX2;;٣խJb͖?N&`/Sb,''+#'>W*LS8,&9wb"4 *^H<>1 .a+µ•œϥ^SD{1/$ND@Ww[T(V?"zD zs9mS^"8yD]~j8)*a,bMS3LrT'c>s,.Í Гjpi֤w<y'UKSK7nX,SC"jT\ͼ YGyL"~hf 2?xӼ|,w^n.=z-{"ġۃ(cE*1XWy h   F= *o6/2xf3C鐪N k&wI]%K,33>zڿ|9Bޏh>RqY]THծ`XYpؑ Y)a^>OL3oEҝ-R+`|]f-oRVE@)9⹽sB NOu1֤s4% P |4J*`-be$3:s^#I;WP;j1('>KrrumߧפB<]TDz/wNul˥oX6|kN&smĞja d"æE0q. మʱ&"NH'OU"b?PodA/ǹLXK ֤o IXމXڵ"w]K\[[[jkk~|b'G&U!03,w Xh!Fuuur,$WB~JV\K)˵1G/ZvXr&m0/O2[fn R~[o,[ `DX!Iy6k~΄jx 4q4WwO~ߠXbA3c  LP4N?B8q10 >9gO0HFV1/w?h╞sM}Ch-̳b    na5?u!vWc=<:)ځ$`[z3ijX&`ЋeX;Dh@@@ "ghfjj~_錖)隇+~)~C┮{@@@ 0CnW#t}Y,RSbo*YmK ;߮+Mo3'?^Ag3ǏI,5s  Ĭ{r+KiG6WB6ښ-kjҏϚ_LQαqfۂIr1+ZRqayJHs@ee%L_x>zJ3v;$'+~]צ`nߣ1M維UMgjMSvkd~im{'MMNӑC=[vcGޡ4jy'aXF g1=rkfYh|p%+۴$4|CSoSrR" P2o*);+&&&¥+T\T@޶p.1|-BbMU+An-ZJڷ^VTO"rc3>Oko9rYG(FM,tX;rŶ2@1Y1B힣WaBCIIImf!pUΤruvu.EV]o|2/99rXP(25 6=/hWvR)V_8z[ݸaih d=%&Z9E]J0g/-F{vz`ջ~3:V7ᐟ7m@I^Mg璏L I:4:9R=k9ge\sq: rмPᱱ 9Iv,P?!mc!ע&bN"O3 O[ JWR|x砧?X BOk&S:MLNҺup`@cA(5Oͤo$P=xLc{f\]zR#Uo.mʣppA0)?*m[\H6/Pڅ[?D@@b@L =Ly  |Z<^SSS\Z2l[&a`&brIhv7ĕڭ<5ͤpCP/CZub 1Ϧ~@@:ѓMթϹ].&TUϟk7h Xk/mX_ 2hcooMGJE& 6R*BI@ ӛ|)0򹄇j:9PY{ S)(ٸAВ#RT `qzy%zX(F+( WP   @=xhJQ90 J\Ibr>ZEݳZ[Х* 琭I(jYhyUVņFcofޝtN9wȡ``)yx'1ZG QZxgLB9XXKsЯXۻ^EpYh@:o넲O~ڵ$ɵuv??ltκyv  FuuurThJbtv-ӓk-sݓە0    IBo9ic,XF =; *lڇko1ti    u UCJBCBYo>jlÍ    ZF0Dv;Vm    &`Ћ7c颧@@@@K7bgA@@@ '`GrORSCwֈiC&JLxMUϡ@0T}~a=V#;@eD}C{-̳9 UEmccEw^ N\084CJۥZx4sξ}K5h&`Ћbn    k bmDZ^!`h1FP3pn^A{z)!!{d !_5t-{'{1-^;ippf]dKMMTD=zL&(+}wήg484L'9}"bC=H>cOW;CYt# o_$hVzO0>!B:(/(>>^ 7hrbjk޾*,6Pqf$j~CuttQJ~!U   z-mw<JMI՗t۔bLt/+'{=^כ[f+m<;;K|2F%,oܢ'OŞr;k=H =Cu i``K.̏Om՞Ͽ1A;qf:|pnBsss;._zF%YEb"L<^fFkjnQڹ߆+(~egx4<c >,fcE$Ǹh&!aIx4RS..ݸm]/a[÷*,<8.RoJ5(W`M   ĤГQUyn09ա[@ wffGOTΞ*ܺ{ X)ܘ6)L(aA|M 9JD%?;&&bt7n(%cH;>{{_wY%N‚|Uh"ii*6RD""YL%,"e?a    dV/UR +&>{$$+krH9Er;O~}sْhg6j5W_}gm*3zFޡ|f,-yo!fMH|ul{vR+wiKINօ Y70*c9E3 UQ/rhtܫc_D399>^E\<INҮ.?kܗkskk@mpg՝+'G_k׺yv+1XsX>w~wT   @[[ɑR SZ^ڵt*Z'=fC1B HH[¶y %@@@`q w `w8>zJ+@@@`OYhܾr^ج)[aW;E8QX&`\` } tVj _ CWb>:'ұn* O↨ݾ=` W'/+= r"?.vE0T˥O9)    xHd[    `C1 STtӴn;+.4d>n^A{z)!!v7o;aH@@@ ĬлШDXJT}+eee,ɷ  ӉGiE$E4:J>wC))teCW/366N99dKM4P@@@@? "ɤ¨ڽ:Aj}FFb6SEy)mZE_{*TB<%<;ǿۻލ[I;ؓM;k`cH,ܦg=sSQa߷[.%@LiS4DlrʤIp  X|==Eݽç[H>sNž6̠45=Cǎ 3;5=_V,@@@ 2ztҽd7JޞD4ʡ 닕n$vQAAX{hكpL];5͖.5@Liw#z fggґ)>PBpll:%E~b[T!gSªuԂ1>18HD{'B65JK`q6ձ.5R5ݦCC;urNf';wPaA*‹SzPb3VnÕ%/P栝s4Y1ӳ99Y\U[Frrklk z ,oo{ޞu< CCjiF^d_T/ @@@B奙vxw]KB\[[[jkk?;,]>mYWm-j9w~w(+la    XmmmTWW'ǁ%#)r-/Zk-ߓbw" B]FBo( GOise"z­    `<C6kۃb`=[^Þ}zbŖ {[-F7 *&pŗ6fVFcS2|xݠX O$O^M,O^Vz21aKA   B/lOҧf(]Kb[2jz.7 5u8BehDR3nsS).@CG'    j*>0H/2M/w?=h1J9릾 gaml&    F0F]UccAիQat><:Is5GP Pijgg   LP v6zѶ#Db nn^JH|Y,%q/Oui]qᒏƝ;j[N,@@@ J%ZN۷RVVƊݹ^aW*faTdY}[^5!22Zrrh4ǢHj (YN @@ zĬГ-R]I[*iff|քeߡ #\\:tpycc455k.j-rɷtZmcc,ɖ_;iF==@@`-ig6TR^wQgsRE 5ؿZP ;esOx(+=x>zJ3v;$'SmZjiMii6ڿoD9x^ vro;ipp'Tz=yN.utv+Oae&fm>u5}b-dw{422F*Ki*]s FQ'hiM=禢=ѽ!h  Q@ 7)ss"uj3Uoz%6T=g WQ2 M(ݹzY PrJrv\cW "jV} W__D zA4,t.76a,c75(Z,L PqQn}}>B{<5=y3_q @@#[fp:]2⨀CQizJL0q{j)ÞٙTήn\ ?ʡҤ$[}-aljGo&GH9ZX}3s'?e]ʻgw":+y MNN9L0Z?`xom=ﱌiR~bri޽TXUu"܎ WFx3+oɯyHDU {r9lS }}mܸNy%d}~E\̳ye-6X;zx?{!jb.EfvyA=߽ IDATc -Kx~7 xTlCa)&-oP(KYދ_/GɿdlPJX:IL}ۻ踮b!}$;](Q$m$K'td;ӝvwLdf2i;ǝ;cǖeK)RiQ$N; Uy%͛֙W!~hd;  04<do絮ˡckKJBk:Ϝq[cVA@FR]Ag$i[Gkq^3|p9]#)9  0EzSQm@@`$^Nԡc |G?[DžBR' L@Hvq%!=EVB@@ ZB:+:9V%-]#>-ycy zڒ$97F@iЋw" a/T* D@H[\}<vrLjiSMϦ  *ҠÏЕ?m]Od%=WOT׵cF}@@tc!9ֹLojfwE@@H^ 3mӖ`Q@@hiЋfH@7^ H"@gwaKuMc__=vJxsgܽ@zg" tW7tg10atHU+$''+t' HWݐi11hAv~j-s=yTW/wm~ژ-dw@&U [/[,_KKff>rT:B0$Dzxx bn$KZKӄ6r@&M j[T<ִM?kKW͛ѣz]X ==rL1ݗffmU[rwP/^0M;ˆuf);sNizkWK9g"ݶi5JK%?՗w˹ l*++Dv1us֖KWAR3ssrz[:^jjI,qha\n2u9{Y   Ao9zڄmMaSS͟_dg \ul\vM_zC/Ͻ°cZ.muR{jŸ8YxdgeJkkʷ'ONٱm ƱuǨ@@ QupjXV/m֮nx J$ŴjeggBӢw])S(5v-ڽ(77۶U޺c[l a F)qqq6(S7蹊`$&&KS:0=_lL=鹳2dY&&J^^ d{5kz復̼ᭆ~E@ErŴric e۟F:!A[;4(a0t}jxKKM59J񼹶r ʜ0aBSM+`Bt44z..8.W ~@j\-Zܯ{Gg@@T=mӮ{&]|A tƘNxݩ͑f ݳ[6n_ϛd29o7׌ z.F Ei53ptL-Y(%+mߑO Z#R@@ VÊ-Y@fH\7(5u x5O-:NaU鶭3QÙL-} o.Q2]i;ӳěRmsṞe[ՙV ڌ4ݳjPvZ*?ؓ? %A]NǗ]5ݸ&%@ݱ:!Cq;$2A]_9ey;hFt=ΐ`Y23Mu^]CC{4YOϯhyn | nTҺtvuJmmECβ!E;ktp6B@q =fՙ̘;6-u9.},qR!=f  @z^ {TO= ?ƽCq¾>9z씼y{~{Pc  @B:6C7șR_(q*kKWIvVVKz<*Cha?Wސ7ogvtwɣzٽkė@ ʠ+?:* ˖-x33LD7wNܾ{Xлcޛ;wMErr%5%~@Л@)AOIWW,[HOD'kiWӺ7`9{Y =3y_Xvc1֭-*$'ٿg9W s?,2c Y{{mI{jZwM#8Qm\׽WN;~fE ee⦅˂d'-OװyӺc>{N_^Ӓw]sm%_|( ^ *^rR ^oTeǤzi۶k^whkimOxζ 6acessl\F22=vL> Cꑚ"iry颟i6JY8+_233|^Isn /f'$xh{jٴa͐cZ.YwR03:_|& qqiĴ?ܬ#: ТI[֯+1am x˕nK*oݱ\&i+ &0U ")(iZe%aZ:E:hp;&iS2dY&%J^^KVU]6znLYhZn߹k[S[g"r+yCC\\y\tgU/_n N *[t.۪wEtl~ _ݤi790!a `u;]:NP݋Ӯrhuu S7q*kk*--8{Dn>ֺefBӅ3;Z[+G[|˗h  @=yux9x#5FӁk^VA|t8@ hELKgxclB)-Yi[׎||M=;y鶍13vߚb zTj3voo|l  DustYNNtw^ev:%-5)&:E'~Lnquݖ'[͙mCWm[gVuj3f)]}#5uEQige7^F{G@r^ b:cT 첓tZfƌۭ/KVÜ1m!W4WNWذ:i rF-]6t1*voh}(E73l)  09RZZ LK]Dk{VP_;GGeܮq Zm yS~QK@ ~X.3ѣzۥB  i\j4i54RIǑaG2rSOXn ?S@@` 4m...)ussdKjJ'M#D@T= ]]ݲl">=^EҞgٸa [Q232dRI7-lZjjI bͶ5pbYb#gϞ]}}2 _1aR[N;XŲj岀LZukK⥫)IwAYx=S;4\ۆu~)O1JrRR&)`ϳc۳%\+WoHgW9n^.sfrgkZnݾ+8p,! .AOG||\Q)˗-zOUȆ%&P%',/8Yxmmm%33CNnӎm[L5;O5aG^ع͆#GOHǂENcl\F22 Qǎ^yAΝ-w> z:jٺ){l5aCj! ZeKMmpnhl l֧%)qO2ԳZ.m<֛ յC6ul @ DdXyz:Ĵ?ܬ#˼ysdf^$vj5ݻU5v :(yy9&xK-vוRSS1]c6SLevv,4o׫H fDY|ttvJ Es mGK KrsGo<0pu2Au9Sw<)6^3f$ng "`µU4}صř}୿=hG D@T=Kl޹ 嫲-&̰<hhJMIzEijssis1~f_Kt{ini-W{|[єtemԢnT \sm\goJޅhsr\Fs`<ٷͶ}]^h=.!  Qj7v>2a]w>;ִj8:1Yd϶ҶDwWƼk鶍1u _6 UyEsMvSr!u Z3xјk߳OoY{{4eL֣9" Q{-v*Y:)Zfՙ@tvj3):@vjijj]NIMx_Ǣix⪪k$LV5--*NkayzNb.ktAo,a1@Q9FLY:;Ʃ: rT1y3VÝpՉ]R[[gљNj 5e[vPeǪiWNl5tvICUkTÚs9o}Mg5hS \w-rjh5TH }Xr\A@ ZEO{Xum.Y IW H:)'uNU%DU[/Z 9&LZ'V8eQfQ9pCldv,;#wƵR^~A>:r܎󶔉]}\^0 Z4iuTߧ6?0)f&̇k)۽!:OǘEku}#ݗu^l @ 's^~v^`1}[^^^[R2,^f ۽ec: Dm&lP@@\s^˃omkgଁ캝9@@ M8C@&H A/5at˅S}<6>.r @@`BB6OJ _BV#v/d|ބIN ۯwururtvuIrR^n[ִ TNK63rtQƚikߪ]k׬ /KccdfdO7n$&f,Y@V,_.k?쳚GRq9fm\XVXjs1- #ӝmӒknK~ɫ/Dߖg6Iyd>>{N_^Ӓw]Yd09GΞ=o{dVA f2g ȗ9.6N.^h[[le|dwh-]lz<39+Y\Բ8__jM+{W\&`n19ּZ@hʠ+O֎+G IDAT] u d^lӂ#sְ.b`ruLYo_I ^bD XXh5uZغ]c^}y6tW.4-zϛ+hO5%+mI6!2-5EMtZݿ/_Nh¨?++hָti2ݦyR:;d Oi \+t2nO:sW'KhWu :BQ50 kdUU͸k=::Q'{ ڑJffw}}r.#]>A83f$3XC.59  mQ٢n:Utܜ%Q49|=mNڽӴ3?/,~KS{tƵR^~A>:r܎KN2)~L]PyYt,HEy9afwNY[ROo ez6efoW]8$  o.Ɯk:[@_ǖז3_irSK ]+.}mt>Ͽh&@H )--5rJ_Z1dcɢ6ݰmK Dm@@ zwLxv.1q)  Tid|\ؘӺh3<   0UBғn`q.YC&>ٽ#M@k܁R7OZ˞iYaͣr  0! z$TCA@\ d:sv@@BڢOCxX" Muk D@H^UmԵMu&Ѕ<# $ V'aK @@i 5S]+" @4EQ@@@@ Bztc{T}={ȽO;%oG޳_{ o?sr@!u;5.YDQK۟Fgq_{^v.&dq  Ql1kiٻ)Y)fۿ&d"knnlIMIFx@K`bRMi2MLok+T#˪@[{N_^Ӓw]Yo>gGuٳmwo_*ȗg6o;Iu@@@T= 'Κ#/&]]r IJJw;vL-],7 W7ĤDmP-jhh4:)sfϒ>eλqHWo? qqtBʔV|RhZ 333|^Jɪղ\6 VW'ONdk^wO L1&cݰn踶 J$twfggBӢw!Uϛ#3f$'͕l"P[Ŵ[8=[^j465{IALILLկS: L1a0]LoZ)ccbmҽ~W[4=W̼E  LZUsKmۻ:sU{z59Eg0ě]J[+n1;;Wu[Mxt{{g4_=_mimHO@L~C $tƘNu[~i7z뜯̔=1YdAm;񉠿F~;0O S\vSSf6 RgG ͘;tvu]5nk-MYn)  05or7Z'@5wN ]LFͪQ'' ]R[[gG .k)yڍʀN:Pgٖ9gy? l #@ǽشq_ᒓMIc:pY#d%ZttLa en޴ ;s,2pKA@#9V?[;u-//-))W\~&tYd" A TTTHii.{30%GHz}?k=vF6[  @ P3@@ (. u! Q ,+}cSHv8  0Jκx2D}SQw͵%Og~ΓT  (ҠO(K?@@i^ gG@p }@@"T7B@z|@@ E@@@@ Bzzc,@@w@P^X. @ @@"T7B@z|@@ E@@@@ Bzzc,@@w@P^X. @ @@"T7B@z|@@ E@@@@ Bzzc,@@w@P^X. @ @@"T7B@z|@@ E@@@@ Bzzc,@@w@P^X. @ @@"T7B@z|@@ E@@@@ Bzzc,@@w@P^X. @ @@"T7B@z|@@ E@@@@ Bzzc,@@w@P^X. @ @@"T7B@z|@@ E@@` 8p\A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X7! c_@@ za|s  A/=E@X .uk a8  @h !&B@INw  ! C! $@ A]@@ Bɡ@@pɬp ";[zzbc$-edg$ʴiI:{O5ɭG.3Zbxt+Zqn){머@ y.W̟)c2~uMNfWgܬuE5.QRF{!@mdG4Yyi]^ص]jɂxE͍y|vpZp;;;W?[~W mmmr!GMi.ȟk/* RYyg 8l}n/")rx٘N )@U%n$'%ٽ.Y$oTȯ6 ̓%PZ ܝ:].}0+#C>9);]!5ur'iY엦oK~~l}v,zvqݼ)-?}S:Oޚ푸2cFI}_(z0R@ ֶKrr)ukk$%&ʯ~0ݴytƧ6Y9yꬼ%>>^<-M{}ɲmݣ7] sLr џPR^}M4-BGW3SG<~@`2zcЏ㭭mZ4i~+lXƄƁAo*i5]?y]qO~)АW{J:N _$- ׍Ҷ z?yCznWJ_|Kk'6-]U~ (@vJJhs1ϰo^ @5ݾݸ.?3O^̧PSvqnC^\~}[_\<h%'G!ʛyL_%_YW o/L+jKk.5&dڗ^݇x1G>[In^L@1مVW\6wQqTS9.oH3ݵ3[!OK\@z8xٍ M#ڥ+#ז c0.Mj2H7-};Ͳ8lfnIٙ "%dN-cڹE̸^9eZus->4]=r( @oh:#\`٨ϬY;c@siw>.]&;dV2)!11q.vYJG6CKUU]Cݺ9L򹵩TaZ4x{`ܺ4/ӧ~if]ӝ{д}Wȵ6yLT50g[ Ww3o3B'ZĮY;4=9SYi_|2%,Ţ+/wx(ԉo%wn_zeIJJonVod y?'V\hwLlKgt<#/t՚omm~}^^BܓG;ֽ&U|}uvvGCLaSkC}@ ^x:ufl|ʆ=o;;isu"VKSO%;_xkO1ѥV>g% >UEn]Ztq7iGfgY >9Yò}LЮ]+[?YzHAQ1zxףS_}.ܶ]yڒ]uBoI׭$fI?wݗkoJvV vWݔ;;#JخӨ1yz7oIcch't)y :cvy'%C;T1w/Yy?:N[{Z}_o-K4Hf%9@ hы5%UtiHzܒ*ݵJ!k_}F4lΞ];Y_.X |/ɟ~LT賳KV_o]+Q{Ͽ1wJU{UtQetj7S{A,;N'\_=e;+3<9_ΛpleVx:CEP^Ѯa  ->ygڧck' Pld<հ@,rҶ%Iy@dS{ohTY}m|%WomtZo{_`mN L1u͞5U6L[ߐiRGj阓@@#*荦E.P @qEo׭k8  @x %ȍhY>m›! #0bx3 d[3'" /ph{\Qml v  Usjq̩u;-  061:oP6%{! +`y)C_2BIENDB`soundconverter-4.0.5/data/screenshot_batch.png000066400000000000000000001315561460501237000215460ustar00rootroot00000000000000PNG  IHDR"3BpiCCPicc(uKPO[E+tqPš Z.EJ`%yMZ!IKWš 5**"8H5i_?{r:3`Ϧj~M # df[ L]#|?Ŭ:j3"ew[%xx qox&`.~1S*Ƭ )⨡WX>KªL}j6H! *؄q&eٗhP&*89(7Fj5UztTE󴵙ioz8 5=ux͖L9}^kic \޴4F- )@4@UsO@n~pxLjHgBq pHYs  ~ IDATx^\T=F{oػFFcLTc5k45^@`/%ƮX@;wܾY?2}v:@&m[cL 0&`L@7&(kB&u 3&`L 0&`s)(- k椸B&`L 0&4Th\J1QDLl>`L 0&` H)X:ik7JּJ򡧌fb\ 0&`L 0Т`(ɖ1ȘP(ﭙig51%I `L 0&UKJy|J5h-_6e Z0U@d8`L 0&`v%2N5Ft">EDRVR).d+a 0&`L 0 Sg Rs -) JXR>}nɼMj`L 0&`'`ɩܮisJZ鰤@Z3aaNQv:Nɣk`L 0&`v-Ch(vSE?3[NS@L}<Ԋk+#|0&`L 0% TVB ETQQ7ԊAA1#UB|XКۜg%D֘`L 0&/J2e}'j"bN\}P'q&`L 0&R0kxq 3]τˢ9gus A%$,OEgL 0&`L@TF2UF,펐쮘QvD32|($)rs6&`L 0&R8H QVBuS((2wB6~)|L 0&`L@#,)#YguJa3ShGD 0&`L 0K@ Ja=T1EaWrL 0&`L h%X,k-|)"VE n=+8;GE`L 0&`B@mnPq^WDt9TMM{[z8yggϣEz93`L 0&`dLg%\'m/_g/`WxыK LML#f1h1ͲHnP(6H o޼1rMy^0\ 0&j ?_`7oHQדXت߉%/Hj31yCSO .yfQIG$ޠVꌲNvDHț+ 88XHryåW:p1&m =sf+]`>\rٶ m̡N ֬\aFLjNNrCL 0 oV\wSO:Gg&<ϴHzr醅.8'1UHBJ 3K;!+x[C#*,9z՛L 0{5wÔm1'Mj%Zd)f{Swrwvc wwwӈ&clPBƵ7>W@+;3\@׈fZDxB޶~/>qVW3ϲf%"tNB ԦMH.,[ >}jqD2=[:+b9-0& A **ʐng|x`7mŋブp!pߣݔ op74s\׬]fw; +T+G 8A{E;ֿ͛z͚3Wnxlݲ wf燺`%zpL I9st,s!ܼq]߂~'Pj5/  ,, vgcohԸ -V  ` eL 8;@v:v-1O@7I}]͓[7mv'v;4P==t׃ǰ7))+ )$Oȣ4`PY"KC̙pER7BNgϞBGTb|RBhW7pOA`k(f4SF؈JF x߇J~NFEHs Iݑ0 _ӁNiӟ; SLPV-18Ӧu0& s%J–ĮĿ?z0G&uNHc8 )4;m;լp'˗.nB8 h栘:wM{kW.xgדǴXpI _]*3)\8NSzTh'd˦؟;Cvp& f޼ ]&͚Jk'z䧾֫S Hn@^zx;122RB^8OsV/͝+bVvK>")CZ<7tRypqݑ14xH ^Yӂ dh~tzӬx>0|N_grb.wI fbP_mՂ,Y% @ڴlhGvz(+PE">2)Sȯ'M8~(b >#T4)=wbM&l@6|SSEyz ZI>Uʕ֮ Q AU8ZI?yW@3zԯ}T_0#d ŜaddrYJ*!v AAA[iQQu1&0Ӎ"Z6q(SX~xzz)Vw8/vod_=d*}V"`zNNN,w;E_j5jP!!$5OF&R.ݻ^$)#jVY3d)WI""P {$ڕtwȚp38ʇ3`)(4ϢMw!S~PFeߡC )zsbL $gSYVrH9s熧h{!o3eW4RV]ӌR`Ν5#A#2=SSGh޶izaRVbe#ELߨ/@L81&| =RKG1pT'uEWO=}azڠ)gQJНO<i^"bɦjBi$F+gϣAJRc-_H8ڱEUX81&+G[:t~Yc͵R-;9yS䩼 ժyq-2.RTܿwOK8y|U1H=芦` yYW,~ɲȁ!=Í !iҬl޸^DɚF9Aqa&lشZNL]Iyse&DQJ D1&[]nεðW}oؙbKiLךp^%~Mә3g>"Ń}JU 0@`ú5Я1txO;$*[:x@C:MfYNzڶe3h? c(Vmۉa5OK FΡ0ĻifUBbrYVD aID 5x$x G3hze@Cqׂ{!RC"'S)K&ZOLnҕvO/'uΞtF,R2S(ޜ=+/D;o?I{zT8`L 0&Hftu: 1h'cOܿ}$Wr&GG: Qy^H1odvDr1rss{g+?M> g?]zj=8r&`L 0&8LNsB:zTE݁FKNutmԚ{ѱ(̆1m9*g'GpC'6 0&`L $6SD`NL 0&`L ^\LIgL 0&`L ؚ+"&1&`L 0&`+"Vq&`L 0&lM[`L 0&J8`L 0&`&r}L 0&`L X%UD 0&`L 0[HVH~ >(k&/ҥueNp:*Hul"/O t.`L X'zpaJ= ׭yfׯm۠DmdZJU@Lk8zbRo 8r(XԩrjP|yc$cf̜9پ-?^,dJ9dID O/eTUv ضe8/`L 0&,HtE$ٷw/h*&&FO %D’LZ?/Z+"PD8}~L;2k >?Kرm+\p^?::Z ɘsȜ b&!$,`L 0&7$QD^z)&zz}pYq[8z =wÛ7[Y=cFh٦-_?۷ɦ\/)ZTl ;Qړ'evz!;DFF4,W<~*53K W._2STV~yPҤI? g§te(@h8[CʥA-/^8w6*e ԬSfwnkV*B 5@AqxP٭7A g\#W燺 B֬˗B[w2Aٰ߷aӺup] Qa{v8{_eS]axli hBsCL 0&@"$VZ9wpss@'@&]NͱiŒߧ-hiɿ7mY!)8qP>xwpAQ]%BÇq'o^C }OFB#g.y#W6;~T֡s(~M5ŘnA,τ6dϑ:t Μe"w;11B%%,x~o(xf.t;8^~")PUkԀΟ|O>>B1[pDC9 *#dS-O`@O{” ȉ 0&x? $"Rfm(TҦ\ruu%KB8.hQv!-SlW/_B?){]JJ2 ӱY"BJ l8ŧTfSnnpѝ<?($RRnܸn7816NӷǏÍ'Pl;NdE„BJ9E^k.70@,\e *9wRD v}֭PT!:: ߳OE?edz-PNNATtԻЮT%sl):`L I3wLdGGA,iҤfRLdE)J({lj]tkD\s $'2qrݜ,YD)7q,2!'_>qUYfЛfx0V pP?I''gge{7^茻k:d;nyڴNz*G~}1BNA{ᑙ2-`z- 71T';}{>6+"cL 0&R$QD^x.H888 3L7zbL䆢EQmծzȔ- #k]|h{ y'/]Л7$xIn9]{%1̍"ɦd.yzz SAAЩl '~߿!ю2) P߀_ ™U?㩖:#e%t<`L 0M I-}>}zἜi7&7d+EHaNda"Bdf g>p. 3N0 pHB{#Yּd꣝Oa";-)(@b%iKIpN#4S$'O |J6SD13޸ %'&`L%447 Ol[fIdD&-ѾܖLrB$/]~M^TN]> {"|J!}z7wȝ'/BEtUćbbMHrCC-i2dh)S&hcJ-+~r@49$^zED*>R _ٳj'Y״*/`L 0@ٰvXu mņEs[5k@MC!׬[C_@dDb}3M0`p`_MDhQHM[Jq ygcG3>E:l|`M6$1PdviNQC1D)#qwme"l5P)vhjy*.wmifygОTݻC5'3_l+bL 0&zOӼ}O;p}{]\d[%òْ4 0TG@u7t|TQ`L 0@X˚Ȱ{g4( >j:ҋїދ4=O"Hl:q`L r1&`L 0H8*,`L 0&HRz*HN-U;`L #;"q)&`L 0&@L 0&`L #>n\ 0&`L 0Hԋ 2&`L 0&|ԜrB2-(rL 0&`L h"&\ 0&`L 0[`E5 %BW5L 0&`L Hkb)ޣԮUɓ=ujz{SgWIF##|ֻlX  @~!]tF2ȑm^#mZv8+?̟3]}3ԂVBȉWnDkRC\P +j$:K|z/^ÿ'jqcGCy]na)ǝ;«WonC0i(Z0|>CF2g gϝJ 懟F1ː ϝOB9`)Bv&M7v\ZO/_{2 r$_w&#K|n-xl%zf{z:k| !%*,Ř`L`9F=WdGV(=`՚ q0yD|޶uKF8;o|̹CBϖҧOK6JuX]pL ZbV6+pϿ MgjXje{!w^lEv-+ϡ IDATY"ovܞWᎦCթ=Z J!fE#"d,u=?>zui&PL)X9|0G@V8CRe\t!<'tDuݳ;Bԩ\”T|dfETUA۶u ؎}=}\'-Rtؾ [TԷc9ߍ:iG|YIt%<$S}NOYOG YLܹ+AAjPaB/25Q1<͛A1ߢrww[N[4oxmP9ޔd7O2Tvd~زk #ɤ'9]B94͛8_Ġ(_޽{4=zpRbhJ%=8$1Q ׹V,2ehЁݰthRg.}@ XdԪL<,S!~Xɓp 7o$N^T2.onn˖̇мuGhظDF>c.S|ܮcW"CI/UŝM[{av2dҽkg/`άr>+o(<3_q~h/6u8j1N4R=Zrt6X| u poX땟wt]7jFT/ ݁={d-Ypv7/l}QV)B2r%l?dۑ..ļp!eܷhq(T.189Z򣊏Kre`/?Uk~fY}ݗOC I\VVdtΙ8^<^A>xwfz"҆ pQDpv#xq R}p/s5/׌ڎħkdOjX}BxM֨/^wn̺ 4-d[ݺvh6v$+o:1 nR=ȆʚzU?gae@ ;`V8$:aM/Qɤ:1%Kj_IM * 0@Tb={w%tzJR8w"띻뷉SIKJv&L7n{a/pG5i7)"l|&;OfXV bDjv]|lqh'C?hA ReNj4ϢUI3S .!=r?=RR >tB%N S3zdA%o 7^6lP7Nwr/~ȴ%{]R]ZWyi}"g0rX. 7}܅@&6u}q8w5O-U?SIIYFO+"~nPx[n(%UhUN\;}3}JJ bІ^)3ZȐS'= YPJ̥ŋ!⩘GR)\I4嫆Y{!#%]Sخ:8y:NsP9#a>Q/i里|‹Qװ~ .}=DňH-bV] jWF6uލqhB٥ךr>+7nTϸiee--柵6 9t)d[W"P>7*W,b1'63R,'N7*Q+!-Jm`&<{\|BKev!4@Gs K-m-֦uԣ~ב7kL|OdƷ~R8vh0$?Jnf.ǥ?qʨErOjyzĞgpc]q37$|sOp &&v-‹MAbIҏVܮ5q%=;Msxx2Q7B55W1[m&=tl$F9[Jrw TCITVĎ#uL;S#LCTKZaM>j~_@l`'MnBfD6it==X]E "^%~6j:N ZiSHFRgEMf/ȎL?^]/4=wQs-*yin۱' EB@D6i-;}Pa,%7؅{DDϜrBj ,~Lsѽu)YB,\CMRG*q-S-o2\d"L6 sv7pݧG'&O%+"|AJ %JAs}t%z8Oca' ܝ6S^O{*>r3\G[XZ-I,#Sgw]}y["w|)saFF%{uߠ!~Pf4vtLLM2f4 |%!ҍvd!+#-crˉYBO f~X&L]jR]Ef"vk4G+Jzz>7n2TY,;J= Zun}e5*"V]JDWr 4qӓ6RI6݋>8f)YF"s]*k_%ud71k7nvYV|wt!R2CT~e >}#ΤLJtUV~30Ȍ:RV}Z?l1\m $"xC$] GO,)Qhl_~&aje8֩]F ^8SizZج]#z$DۥX$`!`oc'ď3mՒL(D4bҗOA:b`}#P_zBOdm3l?K~VNsNuS@`!v萵@F hi^@_!CQF̝mvi-wD|P7¡hM}>Ӕ2nZR.,Y`}C R;^wgLEs@V51:N׋zuf@eg ]w0HIv?CD7$'S #^.CͲ(݋^ _ٺc}!MYݱ3ZP8niނŢ$hOZ+/fOT5{NZ|uF>ް\_}A߉~au^P1hqCu ۼf"Z\;Px4Dߺ a-Z(S#~EyE .A-">PTBXFt~EdUXC5 Grt /gT/>E .v׬(H2ˌHR)!|ծV9OOVΟ)|hwnK8Ӕ0nt- j87SjHPqIN|hxy vTm N5C'{TAɴ^a(*"{ϳDISzdMe">~11)-Nj~kr\ߖ+[sߙ ʹ):Fc;!E=v ) ;gΞYx?:jSAIk#+/2W^;B/y{k9.IXWxjHWn^o)"L0'I& 7` 9i_q8#@v+V5$w`v5b~V.)lq`;oV/ضO76ҏ#{.q!~2s=}aZD@ s=!/jAIIĘ4o|n&zLzp]IC4iJ CH 0&`Ʉ]ZL _Kh٦8xڵmemZΙ9Nu4oa֌OiB;A_ a<*7Hiy0XtT[}z[0Ax2U1tfbCi׆`L 0&`gEPxnBՄRb.,^ NGKB\Oz5*4W E({e~CPw]Nat8UPN (Z!#߮~ mv_>AT;E|߸ Eʼkw}aT*UT3xa¸_dN|(ZaM>jv9_0|<&MnѬMeBC5+{`MvM&l0v$T(_V8'e9冑hԨ#^H3|RfL 0& E!!/WWW '!B& }'BQ'gGЎdh,&GaR퇖#_Ɖs-h7L6Tݏ+„IKWMPBRRkI拗. ȟȵ7 WF8:~lj 0&`L`,Yrdf0WvO0Xe)L6惑ÇT/4hv)D)nךgLEsb ҧO5W'"%dgVu0lwBi.Z0 V^+ pbL 0&xG.Y(#GP !?={U}[ETNER+,B1Kp)1s.2zW?b~}{C 3| f]rSE k⌈-:$R$- Ç)~5q ߀}aE!m/>E .v׬(H2ˌNRj]aڵ&礩*_%"m/9krFѭh*i.s F_bM$T^a(*"{v Ϟ?&M1*L 0&HByd+EJ9`'Ӯnއk*bL 0&`OָaЛa* Ƴ(L>@!\) E4ދv1J}C=bL 0&`LX%M 0&`L 0)HaLL 0&`L ؒ+"u1&`L 0& E)L 0&`L 0[`EĖ4.&`L 0&$"һgw8ulT >8rDӡ̂iS6^ZyJ9qP^f돯U^60TVVuenj(;@}7v4^=ivVݤ[g{\#HrzjF䚲ePY@Jٝ>`Vej%-x_1 IDAT-S  c~Y}4e۵s x.:i˛Ǩ>-Ѷu 1-RXl;m).AJD\胂⚠kAa_x}ֻ^[SXF>-Tf.=m5]e8_t"~ΛQ>[we鱗ׇXr_cr&/)"~=;/Y5zC(SiB;A_ a<8:˖̇h<=yаq+| sgO*Nt - 26njT*L?ʗ+c VZ 54Ys@> "-SeμBFMۈb>Rߜil?dڗ0.BвM'8pkJ8yTEFAuM)-,E+3U*WG %KW@Zxo=v-̕9cyJ'3Oe@rDl3gd"""zߕQ nnвE 5c 9dC_wAfl}ߕ퇖Cf<( g矖"_@#`E$Gн[g9{>] < ۷⿖C#FHdmPrΖ-!ٳg=* w~5|?%iiW)ӥS2k满o#$ӏ=?s/ <<uTeǣ=Cظo1=~,Ig%^9z,\|Esf܅b[x'Cf",g{\2qZ-Ɓ`L iETj^~ ˫|?2{>Z?pb""#[vPN\(eU2O>W8MP\Xvټ2^mj|?!eRAV> U>~+uj<&]L2^<|johJқ-xZMF6ϴ-Rji +[F<oբY«2X3{zNIIIxГ/} \\`ƴpnSdBdՠυI[̈́ gQrt4މOA;UzsPX1(Y8<}jը**P-"KJt}rKk?"cJ϶-c<Ӯ-ː?B&4e۔\ wDݴ3N/$+>*l?u}X~eg[m h_ JO狗,޽p @O?*c#iʴP2>D8,uzNG0?EȪv*,Qz4ElϚ<'3"RhQjQv 1{J4>,X ?4k'Z9M6oX0$~;kjƐ$NA:дq#QTbD*thF8_vP~XSS|xlw%ȇn)J_u.-߼y\B!ѭ[w;! Jh>~~e'3_Zl&Li-VT 't|<`%`,Wu#4uÇYX. -ʕkбKп/Z,ZQD=AFUmw5B15G8э(RC]FM4-:} ClYYD!ZAN? |>Yj@O)ɎǾ‡g\)Xٻ&OCWwONymvvvNa#)zEpP1O[/a0z𼧅9 EҢ!W~Xs¦,;Z糵<|7~ڍB'ߊ4zesk(k>VJ}1A)PP>J"M>~^Ad8k_ji/ZyH^Wy)N.]0ޮnއ[..ɫw)@2PB ]),{D{4v*ץsX6v3W˜Srd5@Bo^_EݫϢ0u mKѧ,,}G&1^iȤgoc9*'x 1UJex;)6`,.`L 0dFnYɬB8 /@ÙbR)iXV&`ɏf%1a`L 0&@`ӬD̍0&`L 0&\Hr 0&`L GXy`L 0& VD$GbƳ67ܜ-H-VN-ؼa%8(Wftg{ غi8ӆ"%4xw7P<`L 0& $YƎBVRR<:~Qr:h=y/?Q7CN.Q&ME|3!w_閇 2&`)@PDR*edeH -p1J>c8r8,_+=~kh/5.H\ 0&CnYe˔28|0G@Vo#N/07bE2 ywh߮\0) ޷ NӡBԮU(I]ʯ6dջgw:MVɣaE&}z_Ry==;oV/ضOw6J劰bBnWFydA=dԽ[8 Oo92}8r0Pݬ?&C\qO7Xf^Ɏ'.͍E>0f:T_R殌|2ב)d|6eL 0&lC.-Vg%l <ڶ2TjPDشe9{NW^U*UߢEaRպЦ̛ nP>=v)6J^v"==/M} Zyqqre`/?UkF0k睂gHz v,^ jk Pt)Cu͙9Nu4oa֌FQkx$ƍ7on(R8QI(.[2_FCaVΞ&17y%;ned۝3oK|ܵ;PKqZJ% sֵE>HSJ|i0&`%`E=C+|aj"ەc+4?o=w!I/ڷKLD{;woBttl1-ٲe5ջ'p7C@`]k9rdǝ0s|X~`}v#0;nKEYiA\a?p)pM-yl=lEv +[|k72jgBa¸_O%;0&He좈t..0cD8t`5'ۇ>߹{WFDɣ7۞ye(F`L G좈ԩ]F ^8CөY?8|艦ip˗(9ELH7m,"gQΝC5(r')`fLcF"B. Qw%kWkmISќ#t.IUo],>3Q#c);dK̈́ I%DSJo{fL 0&>i-j`*!䟰g><׬(2ʌ"UB0Ќ8;;c'0HqBBvG ڴ4j-Mijv0 )3 Y|fa+rh`zE*N>t0ܿضugOP ,>;( eN1|BZh*|T>ؕ+נc׾j"pƐѡ"|y]K=y%;nb?I/_d6oWL)eC>>_}~Pf켒/ eL 0& E# f_xȠ &|}Dpqq/{ZKtYb=fL 0&HqЛa*(L@BRxVK/Dߑib(1q:p9 CJHz`L 0& f1e(N`/̨(YgpbL 0&` VDywzqbL 0&`36zG`L 0&+"IeL 0&`3VD3&`L 0$"$E fINlԂVBȉ‶zukkHe pF*'On-ŒM]g=tMrJɵI^|I*9]&`ə{;S YN7v e+ք%*Sϵn=>enjKAZMC)ϥD5_SuZyp`L 0$"Q$"=lY}:] ɵoQeJAe{~N<{d7,`L 0& M;"۷uɣaǶ xp>((L\ȴAa_x}ֻQ>:wc p` ? sCv`?E}`q/oN/lO֨͑ݍ򪿳dջgw:֭]/qpijѼ lߺ^_|zM;ѬO44J劰bB!q^3KOӌm[8}]HauɌa>G I솥G[/ZeE*W(_d #II s (`ydy. /}/{^Zu$3da)U1&`Hnȷ_KAz>xʔ.e|>:v/RcR$-xz|aVΞiӾԩR-?օ6>'` C]T_rՄ Ҧ-ۄi W^F)9z< Crt?<b_~B:a֜з¥eVΙPݨiQ_6"ek̩p:Ӡ)t||fL6OmRj~5 ,]j5O7u%Ҭ^0C`Z5 :{+ ۶f:¥KWOwY|a&*/\~-eN]Vq꒝Z+{^@:P';_4:`L 0&"#Gvޭ3̜=֮Ow`_!xQ8y:ܹ{O~8Eށg!#ΝBiJڋ>#GK-dz"m%coIQ_)ylY ;_$NVwֵ<~cMϯ(+)(QyӚz} B9 /Rv -[T#;nr#?)W\݁{V|0{ =vR3),)2MkBy>c溨Zes]7d#=O? 0& ("*Ow쑖rnyVXńRDd$\q|}>6v֯Y .d"CMZ=_~ ?2{>+Oɏ8eTS!zTdbpt"R5En)ON<qSo(Hvi=!rև7oޘٳs#9 ã5ݼ ^ŨYPJ^2GuD쥧%OF zLN͛6(VNn\x 1Ec: 5l=ćp Z¾KI a|8N}BOiʋq"41BuiFq7GԬd Bޒs( Z&e8bmԮ#}/ ЎIY?8cFO&Rk]GZKk?k&`L h#`ED El9xe-#+נc)Z~aM/A C.> E,5t{-%dpnW#2zPùʗzujˈnH::uhgl,0%{DH(Ψܹ,0$l~.hI#3AgR`D(D2-1{8O6RT#޿<^QzuyRNBJq9npu+ὰyw/<^R\U"".쏠 caͪ.,1ݫ;?pΜ=IxTF\FVzz#? ֔.]:0FZZ=)ΰp#?4%U q_GzR9Q:8N%Eݎ2CA02 N{4^^įTr V[ɝ+ܽwUUrܺ"ұC;~r8q$oYgYF5X|ox8mW螴U2o@e,pyн[mjDp6iP'Kxt?o/\ j/]nٲes޷l 6SKTד\ {Nԍa(ߔ_aUէC.oAĿ5 Ѣ{ "GB3?S .%_/!ЯXѕi'̟;;n_E] ㌪kKW H&ÇqcF嫠v}?`1oP;(_c0p믕 ;{<+Qtx l.qSMhDO/hӮtkVEil񩃣D?䥶OEU9?,"3zoٳgm7oނi_[Lr/>DkN^^׻fQ˫Y*.Uk5vowIzX$~촱E+ҿzR5jP8#zxE7}!&|1V} u69A U/f7(+u<Ț% i\__S1?kA{ݵoj+ggӔz[ _+ !t@#?n@7+!a n];{aBTϗUGZ]i`Yh(ߒm[\7Rsh#t(q#J7zxɗOjhaPL6nDݔISɓ'JJҐ`Ju%63.a{ O\vǂƖϚB3X#xCaL v .]Ұ;BMX:)(U$OB/_&0w_.4Ш{XΫ&q3>W4Ja&/}**#K?*-HvW8@6֋;ʙo}8Fу:b"iڿjj9P-rirꟾ8ߓT~舖Ge<8)ӵoq": bպ'` ԨV&}$9sPܹnlYp}‰-NJ;} @^ڴKd8!߳|aePh@֩gZJ'~ vm[ɗmzanLP\_ttKVO*LTT Y*E W>1SBJ9k&/}**#K?}̸`^,wԈO?ˠb9S/H^*gj>3t6"EDOczXL9pl5= PO_pEwE&3=g{ʙoc6%~lcA\i0q4DVfnδ;]CS޼yv=|ǭO3g4;g.,\ ATǪա0yW*JL֋+?蚔=&wO/_^hۺt6k4*^l_uj׀aC?i'7+L>>pфwyGr._mR"/3E7es-a-6QEMrpQR}JR_WK?=;{e{#G+ΎfGB7> e\*?*Ǎ5,8 :ݹ8օ?+ʆ+W|M(Z۸ܧϜ "z~O5Qw,{FHuamXX:$S밗Wd^Ȕn1zϞ=/"YUP.#]{(1XÛXoDaG WнgيPNPۡ*Q.Q >hA_'X&lK*RY_+6}p,/ ۥOM Ljl\s?uS} R_yf}}9wBy舘Wu<0:^Q>;/<rUOU `:k%^_%  !VB/S|҇a^1V.'ߜҍjA'2y r`󞈰Ux1rgj9Ln<§e( G~~KTpE("Ba#%j ?%|4T  *_o{Ū31BM ԕ=WL)B_>RMTKmU\rSˇ"_tOzR9SMW QCI_WQ獢~F{ShԠ^ Sg6QC^T=5+Gz_YU׬ߨg~B.hSx`& ߨL*?PQ8nu  .lݶrYb;@9=xz'Cޘ-Y]{._ QeC֭ a~#C7W4Ù ցap/=*tg`h;oW."b#B|'Vp2.E&z\q&rj!|bd1 з ""jwymV\tU+pxsFYcGZ]7k~Fڽg_0c?X]|1_DͰ|G?QE(R t҂;ōzR9SZj>}ȱzGV=_!!pC(+3f"x>mj5jP)<}Iի4yME( qeg P?9][T39z@7>SNCϩ\xC1 7nqYΜ9/.Sg>͓GFbݸi _X~pu_Kd$3gɑ BȔ)'Pض &tՄ>B6y\8_r6=Ty>$ %=]T.wK うj5o1H|M) vԲWܿYC>IRM-3 a^ހ|_8tʙ ($[gW19kUQVErwsUU\[WD:vh߯Y'D-`~VMYZXܷS< yrӫGw8y4=ido-rSt#ۄmjD1p@\4(r“%KZ\b`·.i ۆyZ.Lzlٲ9U[om©ca%P.u]=éS?CG,kʇ̓`yxc{YqRMߢʕ*ѥGp0E7Cv][`Q'_al\(H^{jT…Z9yzORf58YihmZ5,Q_-3} >ԫm_Mz,JY'C С}[y؂Z (R"(FOe3q(T:n\aV~{UrR"{\R2qе;s'.^0 )l:<|sJ.n3D>h x,[7|rtXEVϛ, }[H׎%_9AڴMa[Nз hZ:Q-Z!b$4>pBP`%-`ŲDF͎дY[4O?w`=F)wܾ3U+ז.6m.L^{=|P^7f,[ jy COb_kE8`J@zu`ņ՝=wڿ(S :Zi8(&4"g C׿ iIm4QzGRۧϪE%?_~e +QL_,>jPzע$`w͢WzU(]$ 1j"H(jcVR_GmWg<$TO+RrEhXmpls-Q_<>Ka|F=7fmZ7;׼-<}T'%|0^fu@w~BϚ[ _+ !t@#?n@7+!aK u݇ AS_5ߤirU1'48wC4XZ dV(W ܿ4Zv|6p@6 n܈3|哫F)ZS̈́Q7kҔ`x$I0Eo7yi @Cf]iVJ.˃ťK@X2#׮õÑ' ::Z`q @]Q4lPQO_#ySg,Z>GG.”.]Zyo>Yci޿QC{LNx.,4nŐojj9gj[xG?}ɎƗ^=ރs? qKrD p=gMP|#M4r>yUy }9Qz4m:lUވ0L<8<bTZYTܵۡT('NVpR0(ٳgGnݑel=q,7ml/[>C 8bA+11+PtI6 s, B'}:~ M~MKޒGqPQWM8hSt|:\nDG]N3ySgUF*/U\0=rRGUƮʏcn9=[y #,≝vN}2i0?)ɵoD : bպ'` ԨV&}$Bn٬3gN;w:ljlYp}‰-NJ;}ɯӦ_r q /bEN>RdOk۵m%_kmy3QةH./::ޥ +'QIpE&** p,'E W>1{SjJ9kԼ/u IDAT&/}**#K?}q{ggf1F*JUqR""& ]LW)69S;R_7Cf/{xmܿT9x|'e4/>x@#5W'L* U*۷r~sn1D߿/kΛ7ܿn+>֧̙3}3 qc{5-=++ju(L 4ctMʞڵ%{vkNik m[.rֆzϞ?F>ً{ N0lG0mrTÂRGg."/U̸`y׮] E>Jʼ-{ab-6Q͕R-ϪR -JR_WK?=C{{d;#G.PGB7> =IÇ`Ao\]Ǒ.\YVSXQ6DT(kB0 >},TѓT q6瞽r㹿0Bpa ,P],N 9̂O_ȔnjgϞ]*V(摮P tWᠠ70p+b'fيPNPۡ*Q.QCPVpϘ0pjRiV+E,Y_ƴޙ&c!TGo6^QZJ>Qo+U׬ߨG3gΉ 3ֿ?[G=IJT_39^ixw pJ*!c|@ar#> 葟o_ED82bDwqoТjsDqXm/P较8i3԰A]5SWLD)>iSMTKmU\rS˒rgb*k,2PP'69 >jhkV-"uqu( .jLFMvKP&\hB+>}TKTʬ~jkoT3kE!R{]g eozjAB7>SʏT~T.8>'1.lݶ]sg &rN{ZTO G 9_ 5 =^T1pm᮰ BҎ@Mr+ #LEG K~߇·+BFg#|]Kwb'R[lj"|—Z/FП}{ 5QDY$8UmR.-[ru2cTqޏΝޖg͞_iu }| pgPL!oh}0-k|c?X}1_DͰ|G?QE(RУwd`_6b0nJ-yS \1 7|4k0M<24ƒ1cU/&JTNU"QoTJqH׬TWv}(|ЯQ1׻P_T=UBaT~T.8>'߸Będ9s [lF׻N )ϛh7O9u㦭2,ub]Ut@~텫#p| _b!x:Bܹ>M̔)3P*m ]k5PqLm7s| m%|\IDJCC{:\qOd. j|g0ZM[GZOz;ꕸ}5S޽{y5]i0 F˿n[vomͺևAf&// so?O݃GKqhŋ{0 pz \ܡfe23B'`C{`L `[wCžˢSΞw6'&@bkVbL 0&`L $k[fyp_pә`L 0&Hl$d 0&`L 0kNaΞpYrcL 0&`L x w-(=Ea?X/R'|F$7)rA tĥ~8݌س Ҧu*oܰ>l\N? ڸQ %L{)qIv%U9RA)UB<}u?<E^ 7|'ϴÏ%q2'YHWM :9ݫ;?pPbu.4ɭ6y0qAc#Ε ʕ-C-2A^qyjT٪3,R% ٚfQO#ySg iP=KKK/>MWƕzjԻfQo 2@mcWSHW nJ>q:Ǘ8z~S?ѺUs;mXB[`ʸAVgx5qIOB߁nYPHaas# ?C?!V@0ݾ}*V(o'fé?BCе{o(]53kZ_C.oAĿpB7-%8XZ6k 1131JUUȘ1Ψ*_tذitaK{\/Nƍ˖`ނлg5ifzs/6FR6вmG(NS59[?mMN[mqŧ"E;>}VeH,轙 ӧȑy`' \xߠh'ԻfQfPTI>b Tڽ2dHď6heQC_/tV8N=aW4PME4=q4nT\&|1V} u69A gUwfGJwo,YMb~%Oo:;QٵjVtZ!q:s>p!RKbe]=w!h$ fHԭk'w>L*^o4PCA! , og[\7Rsh "~FQcƃO|rU(E bʴp#|M O}ʢsTyGf="mM7%轣~# )t]EhWiJ ?TuUݩ6B%z' #r7k<0?RKIF\ Q7o/'Jϔzxo&qJbTZYTܵ!roNK+XK8T^31ѭ[w۹k<~ M[>k aǖТbc Hv .]Ұ;BQj%ŪIE8E%y z6 %GuF]_5 $Bɧ~4Ja&/}**#K?*\rBYqk.]U ܳ(orYnk[Gn^蚈)x%jݩ6oX7/fej'7ߥ:nP1w=aUO o-e@Y`GN?X. 5UA_PUpn1Dr)žsCe*NlqR~7X|Ӧ_ q++V~5!LdnUڶˁ tc樛7Օz&҅Jd:** p, OPNՄ+L ^Ȕ f͘"~JT4>}V:?Tӷˌ :WEW ެOp_؇KMZJ7/tϊX.Y]ޝzJi^ PO_q7k;wƙq*kIx@l@uvS@W'L*6U*QՍ`nu})r޼yv0^2g,iw$\Z YHKQO ~Z ~E'RIz1&en={vkNik m[.rֆzϞ?\z'{w|aש] M FTX0U^JEޑQVKa`;+8AլQҬ[ڇ߷nko[[[m>w;^rRU_WK? ~͑#qʐʅoT}VwfYA}u şe/VTIq_/?&d@۸ܧϜ "z~cR5N!Ԕ0˞r㹿0Bpa ,H|j[%$٩ u >շ={^DvMX\bG:KC-44.Pb]"ވU'G WpO̲ U:jUU^QÂڵjb>8C*u{>3]JNǶiOd1v/|Q`g7zlS}~Μ9'XT(oR70Vw㈤qWc8JxU~}Cxnp|n1DpCyȲKlxpbW&tK,`7t:d"E8Pg8[ŋ3|7},aI(| _0zgD.BzM.\"C?:mZ4Smr~40(n|GХ'w:`6 F|* >h 'rTy3 UnTpAϚ54O7DjSoɧZRW" :j]Zh&#gaԼw;uF %ʀCT=%VGF+ra"#>޿Ժ*YQ*ǂE!R{W\gmI:nhAB7>SʏT~.mE-a! ?!p]ٺmp_TXaZXEX~t):}"RAџ#B7bPdms/Rmr.-VÊk5j/W"voY'Ȋy>pgvF7lUޱ[oh-4U^Q奶T.*@.薅f6ݻ_R\z79y-y&޿DK8%|Fņ4&JJ^q*uRRRzQ_4yME(qnI-2DU:nPߨL ;->pImn̟!D!`b3ޥpjLh(9dmp޸i8U>~):k/4J=ML"(I'g#2eNYqkpU(lXV읙AS3z~b.TRO镧۹is%șh3T.fr%{ov?tŸX|=OqooB>۷oիW^O'uQH0^e CW|/e:MlΕnͺևA-&/s|*MAl+`L $[nŅrmrq81& WGekwK`L 0&@UF C"Ga5mչ_`L 0&`!º`L 0&@`C$ɑsL 0&`L !!:Mxj%Pu+ὰyw/<<0 ظn܅ƍT `L 0O&Q\{AB}n.,5EuypBP&-) X[6k 1131J{ȏw*_h`dgT\J 6m3gÇq6nX|Ԯ,= h-jVtZVC=(_v)[n<$6Q °omuB:fztąmZ5'YBLrg0&`L ݻ .е?!߬ȃ-qO{aBTϗUիZA;  oɷ釭P򩱖7FˮGFQcƃO|rU(E bq#|M O={L*X>u|'w.g;wǏc_Lش-@鲖o@% ۼ3̱,5[R \S*օ>F*09DP]rUnUzukK$EOiK& ~ĸe%'gdk`L 0M-HΜ9%;w:-[VZp'>gz nCڴ,p#|^+Zp~5!0 vm[%.\}| uf4Z/ph֜m :,hIDATd{ 'UTr$+V ^Ȕ f͘o(aN=u m۴>lJN.ζcL 0&R/Dͺ$7o]zS̙> Ι{A{KվHKQO ~Z ~E'Iz:en={vkNi ^{ϲŊ+o$=fSiB}S L<iVU7W+X!VMMM\ԥ+`L 0D-+"'Ծ:P\Y(Tr3Nqڳ7Bn<Fn\߶=,AhrbP]pEKzϞ=/"YUPΕMJ*˻rS %ˋP/6clj(ROK[kotYS`L 0d!Yn(ǧzv Cx;[mBLjZ9~2X)ݨΝCN}=axbVѲϘ%V@a2d/>5CF |6PHaRᄗZ!24q b@f o`D3W|2d `{Eܕ@;qo ԅQ#>Ap7lNʊ6ɾD5=qI 0&HvnqB0Wi#? nOt7AqgO`P}  |&x Q3a=!mZ>Iҥ_ca@ʥQYl_vGRB/qťZF(Gz1p*oOzΝHp$jLyG?yHa7m98Jc?Xq`ppan>r,Ѡ_z2&*?4pOϠ0Bp=`ZN*Sع d4&MOtqL 0&W@$텫#ǿ 2d$xž9K|bL& `L 0&}ysxJ n`L 0&@2PYSOӤIcYQTz)g֒o,UlLjJo+ [ZPr(^K͑y_2򙶷#[:VJ|%oB_B…~z="i3em|}Zxhn543&5F 0&`L XH` v[B{\4,S*.l. >JnP ?qf ~7H.-ϓ Ϙ*c? ۯ\[@aXI93l2T~yRY9MڴPdtRLŊB =wS./`L 0&`"-FM` jVؿ e@i>a9wE:paaks6k|Vn_5샳zpy'˯VeD.Y?VZٺMƴn]`L 0&@rȋʰf{D-X>?c_̞Rx,D\^gk\OM=f>WNV[fXN앫#J#w۷;+rE]!B!g ?9|Tc|Ykƅ}|"D͜cւN1&`L 0W6c]yad;ح.45Hw?.XQb2yvosA[lG@^&ϟ!>)pwH;n&>TwM1+>O#&Uk&`L 0&D2@".Y.ZzA\X)0(c]["qtdzեP(i0)]֬=f̖_^Slp/ NO^Sjql7+™`L 0&svUce)'9׿zm!Xg߂tٳíd/Veo3,3{] >Bb͛?&C^+!#eˑ2'L 0&`&6\#ÃMhEDe]on.ղmv}WBq$,#/d.UJ{IoOpc,ܺ2|*Oy3-Ԥt;.BWNH|-`L 0&p#{`X.3ڳp,$\mZB|y]n#]õa# x{Qp;.C>{FGKC>jDX ]jA8?`L 0&0%{7 kQeоvCAIWDKXzLMtWtBێ¼2]qWSRTāTOz`oڶ a3R(_*62F3%Z-3]aW)ˌ~߇UѢYft{&`L 0&xU 4[hepd#+3с$^&`L 0&@%`kojeefXGDo }\]gB*zPlPՆ1&`L 0 ngh}ƈ> {MVqGe8dL 0&`L@fP {{Oƌ1l wW>TU3&`L 0pd؋ebd )=hBjk`L 0&` ܤ3MkV=#ր3kX-`L 0&Hz #[Hz*#w,g JIkdL 0&`IaKj|* fX©$,5`L 0&H(yٕR-ѵ)7ev 0&`L x/G+&+zIm0$u}ޫ*,9`L 0&P'Q^ ;+IENDB`soundconverter-4.0.5/data/soundconverter-logo.svg000066400000000000000000000602031460501237000222470ustar00rootroot00000000000000 image/svg+xml Jakub Steiner soundconverter-4.0.5/data/soundconverter.appdata.xml000066400000000000000000000032151460501237000227230ustar00rootroot00000000000000 soundconverter.desktop CC0-1.0 GPL-3.0 SoundConverter Convert audio files

SoundConverter is the leading audio file converter for the GNOME Desktop.

SoundConverter is a simple to use, and very fast audio converter. It can convert multiples files at same the time to speed up the conversion. It can also extract the audio from videos.

https://soundconverter.org/screenshot-soundconverter.png SoundConverter Screenshot gautier@soundconverter.org Gautier Portet https://soundconverter.org/ https://github.com/kassoulet/soundconverter https://translations.launchpad.net/soundconverter soundconverter.desktop
soundconverter-4.0.5/data/soundconverter.desktop.in000066400000000000000000000007021460501237000225660ustar00rootroot00000000000000[Desktop Entry] Version=1.0 _Name=Sound Converter _GenericName=Audio Format Converter _Comment=Converts audio files into other formats Icon=soundconverter MimeType=application/x-ogg;application/ogg;audio/x-mp3;audio/x-scpls;audio/x-mpeg;audio/mpeg;audio/x-mpegurl;application/x-flac;audio/x-wav;audio/flac;audio/x-opus+ogg; Exec=soundconverter %U Terminal=false Type=Application StartupNotify=true Categories=GNOME;GTK;AudioVideo;AudioVideoEditing; soundconverter-4.0.5/data/soundconverter.glade000066400000000000000000003705071460501237000216010ustar00rootroot00000000000000 False 5 True soundconverter normal SoundConverter © 2004 Lars Wirzenius <liw@iki.fi> © 2005-2019 Gautier Portet <gautier@soundconverter.org> GNOME-powered Sound Conversion http://soundconverter.org Website Lars Wirzenius Gautier Portet soundconverter-logo.svg gpl-3-0 True False vertical 2 True False end False True end 0 True False gtk-add 32 320 192 32 64 64 100 1 10 10 4 1 10 6 1 False Error True center soundconverter dialog True True False vertical True False center end gtk-close False True True True False True False False 0 False True end 0 True False True False 0 12 12 gtk-dialog-error 6 False False 0 True False vertical True False 6 asdf True 0 False False 0 True False 6 zxcv True 0 0 True True 1 True True 1 True True 2 closebutton1 False File exists already soundconverter dialog True False vertical True False end gtk-cancel False True True True False True False False 0 _Overwrite False True True True False True False False 1 _Skip False True True True True True False True False False 2 False True end 0 True False True False 6 gtk-dialog-warning 6 False False 0 True False vertical True False 6 6 <big><b>File exists already</b></big> True 0 True False 0 True False 6 The output file XXX for ARTIST, ALBUM, TITLE exists already. Do you want to skip or overwrite? True True 0 True False 1 _Apply to entire queue False True True False True 0.5 True False False 4 2 True True 1 True True 2 button3 overwritebutton skipbutton True False gtk-directory True False document-new-symbolic True False 6 gtk-dialog-warning 1 True False folder-symbolic True False gtk-clear True False 0 12 12 gtk-dialog-error 1 True False preferences-system-symbolic 1 100 1 1 artist/album artist - album Very Low Low Normal High Very High Insanely High 8 bits (very low quality) 16 bits (default) 32 bits Less (Faster) Default Better (Slower) Very Low Low Normal High Very High Insanely High Constant (CBR) Average (ABR) Variable (VBR) - Best quality Very Low Low Normal High Very High Insanely High 8 kHz 11 kHz 16 kHz 22 kHz 32 kHz 44 kHz 48 kHz 96 kHz 128 kHz False Preferences True soundconverter dialog True False vertical True False end gtk-close False True True True False True False False 0 False True end 0 True False 12 vertical 12 True False 0 none True False 4 12 True False 4 2 4 4 True False liststore10 0 1 2 2 3 Same folder as the input file False True True False True 0.5 True False True True False True False 0 0 True False 2 True False gtk-open False False 0 True False 5 Choose… True False False 1 1 2 1 2 Into a specified folder False 320 True True False True 0.5 True same_folder_as_input 1 2 Create subfolders: False True True False True 0.5 True 2 3 Delete original file False True True False True 0.5 True 3 4 GTK_FILL True False 6 <b>Where to place results?</b> True False False 0 True False 0 none True False 4 12 True False vertical 4 True False liststore9 0 False True 0 True False 4 True False Filename pattern: 0 False False 0 True True False False True True 1 False True 1 Replace all messy characters False True True False Remove all characters except letters, digits and ./_- True 0.5 True False False 2 True False 4 True False <i>Example filename:</i> True False False 0 True False label27 True True start True 0 True True 1 True True 3 True False 24 6 <b>How to name files?</b> True False False 1 True False 0 none True False 4 12 True False vertical 6 True False 6 100 True False Format: 0 False False 0 True False liststore8 0 True True 1 False True 0 True True bottom False True False 3 2 6 6 True False liststore7 0 1 2 100 True False Quality: 0 GTK_FILL Use .oga extension False True True False True 0 True 1 2 2 3 GTK_FILL True False Ogg False True False 4 2 6 4 True False liststore6 0 1 2 True False liststore5 0 1 2 1 2 100 True False Bitrate mode: 0 GTK_FILL True False Quality: 0 1 2 GTK_FILL True False True False False True True 2 1 2 3 4 1 True False MP3 1 False True False 2 2 6 4 100 True False Compression: 0 GTK_FILL True False liststore4 0 1 2 GTK_FILL 2 True False FLAC 2 False True False 2 2 6 4 100 True False Sample width: 0 GTK_FILL True False liststore3 0 1 2 GTK_FILL 3 True False WAV 3 False True False 2 2 6 6 100 True False Quality: 0 GTK_FILL True False liststore2 0 1 2 GTK_FILL 4 True False AAC 4 False True False 2 2 6 6 100 True False Quality: 0 GTK_FILL True False liststore2 0 1 2 GTK_FILL 5 True False Opus 5 False True True 2 True False ~xxx kbps 0 False False 3 True False 24 6 <b>Type of result?</b> True False False 2 True False 4 Resample False True False False True 0.5 True False True 12 0 True False liststore_resample 0 False False 1 True False Hz False True 2 False False 3 True False 4 Force mono output False True False False True 0.5 True False True 12 0 False False 4 True False 4 Limit number of parallel jobs False True True False True 0.5 True False True 12 0 True True False False jobs_adjustment 1 False False 1 False False 5 False 4 False False True 0 True False True False 12 True False gtk-dialog-info False False 0 True False MP3 Encoder is not present. False False 1 Read how to install False True True True True none http://soundconverter.org/gstreamer-mp3-encoding-howto/ True True 3 True False 0 True True 1 True True 7 True True 2 closebutton2 False True False 8 8 8 8 vertical True True True Preferences False True 0 True False False True 1 True True True _Clear List False True 2 True True Invalid Files False True 3 True False False True 4 True True True About False True 5 True True True Quit False True 6 main 1 True False center 600 500 soundconverter True False SoundConverter False True gtk-convert True True True True top True False 1 True True True Add File image1a True True 2 True True True Add Folder image2a True True 3 False 4 True True True popover1 True False open-menu-symbolic end 1 True True True Preferences image7 end 2 True False vertical False False True False _File True False _Add File False True False True image2 False Add _Folder False True False True False gtk-remove False True False True True True False gtk-quit False True False True True False True False _Edit True False gtk-select-all False True False True True _Clear List False True False True False True False gtk-preferences False True False True True False True False _Help True False False False 0 True True never True True 1000 False False True True True 4 True False vertical False 6 6 True False 6 True False True False 0.20000000298000001 0.10000000149 False False 0 True True 0 gtk-cancel False True True False True False False 2 gtk-media-pause False True True False True False False 3 False True 0 False current file middle True 0 False False 1 False False 0 True False 6 6 22 True False status text here True False False 0 True False 0.19 False False end 2 False False end 1 False True False gtk-dialog-error 6 True True 0 True False True True 1 True True 2 False False 5 False Invalid Files True center soundconverter dialog True True False vertical True False end gtk-close False True True True False True False False 0 False True end 0 True False 12 vertical True False 6 True 0 False False 0 True False 6 6 True 200 True True 12 False False True 1 True True 1 showinvalid_dialog_closebutton soundconverter-4.0.5/data/soundconverter.png000066400000000000000000000050041460501237000212740ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtAuthorJakub Steiner/ItEXtCopyrightPublic Domain http://creativecommons.org/licenses/publicdomain/Y IDAThkp9e/n$`(P;(Z퀕⨥iUUB:3/|st_:L/ZHP2ZE"! g,s~x !D0[lg<3Ϝwg7sYbf?7E l w7U8F>jwTI3U E3fI9 \*-1Y7K"iBϖV;ꉎQ §-֓)'5oL  Pp=GUGdgg8u*n ApQ!6*Ahkoîow #<~:s =$qCkZNbf&"5D-IOg,~ySw^y 7x%,ś_ ̮&L֔GW7w.ٴcgDv);nlzrEQuW`äW/srZdS B:bQ> p{GNa}%ŶOTsnG;&A[EuOϲ  fm(Ҍ0gFzQR yyek`Qݓ7ܶCn[xg‰歔L43SKf/z(T|AE´ٲКyEN4>)x;w\wU2F@շ~O "r Gi6va(h-o>3Rzqk ?{ fPx$ @.iyD cƉ=毟]*B(ЬA<֒%eě8@aPp#hŒusYwڅg.1=P1e" )-,"t:X;"hVp A+kf0q810yZVq/06bh1S> &:pćZ6ˁx BHl>3 d,HaŌ@Bk}K:mz}W,F_(ػ04 ۊ@%`VHe/b͘;k#+xf3s#G]v5rVu`Kј}ןQhA_L#f̧"kLdtMѮ}m204Lto=&"kzX|2F[ʡt mP*Tft T4jPXo??g&VC4ABf,5coxK9[XfzCYA)mD" ;>˯ч4_6Z 2oI_9=3IcM/waB.1}}asְm !A&@:`~nl<<OrGm{Ě+9N W^f>Ihi@ M+9p͞ƿ40;B(&<ӣ[̴B| Hpp(JI;6TRἺwz3]تU˧-]X^]GUÎg[z?qlOdjx1g΄ 0348O:]dӊ#sVו,[@lxOӋw8Rx#ŏ F ,G=[dNehO[w]/[oyC]ZV1`H U-0PqtcM^?O3 OhË_~QIP.P=ƃqyN#@bGϸ5DV image/svg+xml Jakub Steiner soundconverter-4.0.5/po/000077500000000000000000000000001460501237000152145ustar00rootroot00000000000000soundconverter-4.0.5/po/POTFILES.in000066400000000000000000000013071460501237000167720ustar00rootroot00000000000000bin/soundconverter data/soundconverter.desktop.in data/soundconverter.glade soundconverter/util/soundfile.py soundconverter/util/settings.py soundconverter/util/formats.py soundconverter/util/namegenerator.py soundconverter/util/logger.py soundconverter/util/fileoperations.py soundconverter/util/task.py soundconverter/util/taskqueue.py soundconverter/util/formatting.py soundconverter/util/error.py soundconverter/util/__init__.py soundconverter/gstreamer/__init__.py soundconverter/gstreamer/converter.py soundconverter/gstreamer/discoverer.py soundconverter/interface/batch.py soundconverter/interface/notify.py soundconverter/interface/__init__.py soundconverter/interface/ui.py soundconverter/__init__.py soundconverter-4.0.5/po/ar.po000066400000000000000000000323501460501237000161610ustar00rootroot00000000000000# Arabic translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: ar\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "محول صيغ صوتية" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "محول صيغ الملفات الصوتية" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "تحويل الملفات الصوتية إلى صيغ أخرة" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "تحويل صوتي مدعوم بجنوم" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "موقع الويب" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "حوار1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "المرشّح " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "خطأ" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "الملف موجود بالفعل" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "ا_كتب فوقه" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_تخطّي" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "الملف موجود مسبقا\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_طبق على كل القائمة" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "فنان/ألبوم" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "الفنان - الألبوم" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "منخفض جداً" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "منخفض" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "عادي" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "عالية" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "عالي جدا" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "عالية جدا" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 بت (جودة منخفصة جدا )" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 بت(الافتراضي)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 بت" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "أقل (أسرع)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "إفتراضي" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "أفضل (أبطأ)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "تابث (cbr)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "معدل (َABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "متغير (VBR) - جودة أفضل" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC بدون تفريط (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "التشكيل الصوتي لجنوم" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "رقم_المسار-عنوان_المسار" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "عنوان_المسار" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "خصائص" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "مشاركة المجلد" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "إختر..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "داخل المجلد المحدد" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "إنشاء مجلدات فرعية: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "حذف الملف الأصلي" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "اين تحفظ النتائج ؟ " #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "نمط إسم الملف: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "استبدال كل المحارف الغريبة" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "حذف جميع المحارف ماعدا الحروف، الأرقام و ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "مثال لإسم الملف:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "كيفية تسمية الملفات ؟ " #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "الصيغة: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "الجودة:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "استعمل صيغة .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "نمط معدل البت" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "الظغط" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "عرض العينة" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "أي أي سي (AAC)" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "التشكيل" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "تشكيل gst" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "نوع النتائج ؟" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "إعاده التشكيل" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "إجبار مردود أحادي" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "العدد الأقصى للمهام المتزامنة" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "مشفر MP3 غير موجود" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "إقرأ كيفية التثبيت" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "أين توضع النتائج؟" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "محول الصوتيات" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_ملف" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_تحرير" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_مساعدة" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_إضافة ملف" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "إضافة _مجلد" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "تحويل في طور الصدفة, من سطر الأوامر, بدون واجهة رسومية للمستخدم\n" " واجهة. يمكن إستخدام هذا, قول, البرامج النصية للصدفة." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "إضهار أوسمة الملف المنتج عِوض تحويلها. هذا يعين \n" "إستخدام سطر الأوامر مع تعطيل الواجه الرسومية." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "كون هادئ. لا تكتب المخرج العادي, فقط الأخطاء." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "إضهار معلومات تصحيحية إضافية" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "إجبار عدد التحويلات المتزامنة." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "إضهار إعدادات جستريمر" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "خطأ : %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "أجهض تثبيت المكون الإضافي." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "لا يمكن إنشاء مجلد '%s'" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "خطء في جيستريمر" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "تم التحويل في %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "ألبوم مجهول" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "فنّان مجهول" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "جميع الملفات" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "خطأ : %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "مثل الملف الأصلي مع تغير الحق فقط" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "مثل الملف الأصلي مع إضافة لحق" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "رقم الأغنية - العنوان" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "عنوان الأغنية" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "الفنان - العنوان" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "صيغة اسم ملف مخصصة" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "فنان-ألبوم" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "الأنماط المتوفرة :" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "في المجلد %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "معدال البت المطلوب: '%s'" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "افتح ملفا" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "إضافة مجلد..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "إعداد التحويل" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "تحويل" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "تم إلغاء الأمر" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "متوقّف مؤقتا" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d متبقية" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "جاهز" soundconverter-4.0.5/po/ast.po000066400000000000000000000247631460501237000163570ustar00rootroot00000000000000# Asturian translation for soundconverter # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Asturian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: ast\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Camudador de soniu" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Camudador d'archivos de soniu" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtru " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Erru" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "L'archivo xá esisti" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "L'archivu xá esisti\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferencies" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Esbilli..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Dientro d'un direutoriu especificu" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Criar sodireutorios: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Esborrar l'archivu orixinal" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "¿Ú atroxar los resultaos" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "" #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Exemplu:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formatu: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Calidá:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compresión" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forciar cola mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Comudador MP3 nun ta allugáu." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Llei cómo allugar" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Añader_Direutoriu" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "" soundconverter-4.0.5/po/bg.po000066400000000000000000000350551460501237000161540ustar00rootroot00000000000000# Bulgarian translation of soundconverter. # Copyright (C) 2007 THE soundconverter'S COPYRIGHT HOLDER # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # # Nikola Yanev , 2009. msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Nikola Yanev \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Sound Converter" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Конвертор на аудио формати" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Конвертирне на аудио файлове в различни формати" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Звуково превръщане с помощта на GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Уеб сайт" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Филтър " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Грешка" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Файла вече съществува" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Презапиши" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Прескочи" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Файла вече съществува\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Приложи към цялата опашка" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "изпълнител/албум" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "изпълнител - албум" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Много ниско" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Нискo" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Нормално" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Високo" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Много високо" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Безумно високо" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 бита (много ниско качество)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 бита (стандартно)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 бита" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "По-малко (По-бързо)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Стандартно" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "По-добро (По-бавно)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Константно (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Осреднено (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Променливо (VBR) - Най-добро качество" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Звуков профил на GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "номер_на_песен - име_на_песен" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "име_на_песен" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Настройки" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "В същата папка, като входящия файл" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Изберете..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "В изрично упомената папка" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Създаване на подпапки " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Изтриване на оригиналният файл" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Къде да поставим резултата?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Шаблон за наименоване " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Заместване на всички неправилни символи" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Примерно наименование:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Как ще се казва файла?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Формат: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Качество:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Използвай .oga разширение" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Тип на плътността kb/s" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Компресия:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Размер на семпъла:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Профил:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-профил" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Формат на изходният файл?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Ресемпъл" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Принудително моно" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Ограничени на броя на паралелните задачи" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Не е намерен кодек за MP3" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Прочетете как се инсталира" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Къде да поставим резултата?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Файл" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Редактиране" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Помощ" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Добави файл" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "_Добави папка" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Конвертирай в пакетен режим, от командния ред, без графичен\n" " интерфейс. Това е използваемо, да кажем, чрез скриптове" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Показване на таговете на входящите файлове, вместо конвертирането им. Това " "означава \n" " влизане в команден ред и изключване на графичния интерфейс." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Настройка на изходящия MIME тип на командния ред. Стандартния е %s. Вероятно " "ще искате да настроите суфикс..." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Съобщавай само грешките." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Показване на допълнителна информация" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Задаване на суфикс. Стандартния е %s. Този суфикс няма да се отрази\n" " изходящия MIME тип." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Ограничаване на броя на едновременни преобразувания" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Показване на настройките на GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Грешка: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Инсталацията на плъгина е прекратена." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Невъзможно създаването на папка '%s'" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer грешка:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Преобразуването е завършено за %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Неизвестен албум" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Неизвестен изпълнител" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Всички файлове" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Грешка: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Като оригиналния файл, но замествайки разширението" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Като оригиналния файл, но добавяйки разширение" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Номер на песен - Заглавие" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Номер на заглавие" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Изпълнител - Заглавие" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Собствен шаблон за наименование на файла" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "изпълнител-албум" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Налични шаблони" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "В папка %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Изходна плътност kb/s: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Отваряне на файл" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Добави папка..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Подготовка за преобразуване ..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Конвертиране" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Отменено" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Прекъснато" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "Остават %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Готово" soundconverter-4.0.5/po/br.po000066400000000000000000000314321460501237000161620ustar00rootroot00000000000000# Breton translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # # Denis , 2008. # Jamy , 2009 # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Breton \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: br\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Amdroer Sound Converter" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Amdroer mentrezhoù aodio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Amdreiñ ar restroù aodio da mentrezhoù all" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Amdroer sonioù poulzet gant GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Lec'hienn web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Sil " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Fazi" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Bez eus c'hoazh ar restr" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Flastrañ" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Mont e biou" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Bez eus c'hoazh ar restr\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Arloañ evit tout ar steudad c'hortoz" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "arzour/albom" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "arzour - albom" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Izel-tre" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Izel" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Reizh" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Uhel" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Uhel tre" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Uhel gant diboell" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 eizhbit (perzhded izel tre)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 eizhbit (diouer)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 eizhbit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "bihanoc'h (Buaner)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Dre ziouer" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Muioc'h (gorrekoc'h)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Arstalek (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Keitad (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Argemmus (VBR) - Muiañ perzhded" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC hep koll (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Aelad aodio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "Niverenn_loabr - titl_loabr" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "titl_loabr" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Gwellvezioù" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Er memes teuliad ar restr enank" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Furchal..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Er renkell arbennik" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Krouiñ is-teuliadoù : " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Skarzhañ ar restr orin" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Pelec'h lechiañ ar restroù amdreet?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Goustur an anv restr : " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Erlec'hiañ an holl arouezennoù iskis" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Dilemel an holl arouezennoù nemet lizherennoù, sifroù ha ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Skouer anv restr:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Penaos adanviñ ar restroù?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Mentrezh : " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Perzhded :" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Arverañ an askouezhadenn .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Kas binarel:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "koazhaenn" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Led ar standilhon :" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Aelad :" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "aelad-gst" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Mentrezh ar restroù disoc'h ?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Adstandilhonañ" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Bountañ ec'hankad mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Bevenniñ niverenn al labourioù a-stur" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "N'eus ket enkoder MP3." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Lenn penaos staliañ" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "E pelec'h lechiañ ar restroù amdreet?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Restr" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "K_emmañ" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Skoazell" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "Ouzhpenn_añ ur restr" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Ouzhpennañ un _teuliad" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Amdreiñ er mod batch, diouzh al linenn urzhiañ, hep etrefas\n" " grafek. Da implij er skriptoù shell." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Diskouez klavioù evit ar restroù enank e-lec'h amdreiñ anezho. Menegiñ a ra " "\n" " mod dre lodoù al linenn arc'had ha diweredekaat ketal grafek an arveriad." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Arventenniñ rizh MIME an ec'hankad evit ar mod dre lodoù. %s eo dre ziouer. " "Ha marteze e vo arventennet askouezhadenn an ec'hankad ivez." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Didrouzer. Diskouez fazioù nemetken." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Diskouez titouroù diveugañ ouzhpenn" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Arventenniñ anv restr an ec'hankad evit ar mod dre lodoù. %s eo dre ziouer. " "Ne vo ket kemmet\n" " rizh MIME an ec'hankad." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Bountañ war niverenn an amdroadurioù kevezel" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Diskouez an dibarzhioù GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Fazi : %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Staliadur an enlugellad troc'het." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "N'eus ket tu da grouiñ an teuliad :·'%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Fazi GStreamer" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Amdroadur graet e %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Albom dianav" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Arzour dianav" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "An holl restroù" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Fazi : %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Heñvel eget an enankad, oc'h erlec'hiañ an askouezhadenn" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Heñvel eget an enankad, gant un askouezhadenn ouzhpenn" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Niverenn - titl" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Titl al loabr" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Arzour - titl" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Patrom personelaet evit an anvioù restroù" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "arzour-albom" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Gousturioù hegerz" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "En teuliad %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Kas binarel al lec'h kas : %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Digeriñ ur restr" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Ouzhpennañ un teuliad..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "O prientiñ an amdroadur..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Oc'h amdreiñ" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Nullet" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Ehanet" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "O chom %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Prest" soundconverter-4.0.5/po/ca.po000066400000000000000000000320051460501237000161370ustar00rootroot00000000000000# Spanish translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Toni Estevez \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: ca\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Convertidor de so" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Convertidor de formats d'àudio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Converteix fitxers d'àudio a altres formats" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversió de so amb tecnologia GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Lloc web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "diàleg1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtre " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Error" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Ja existeix el fitxer" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Sobreescriu" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Omet" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Ja existeix el fitxer\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Aplicar a tota la cua" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "Artista/Àlbum" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "Artista - Àlbum" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Molt baixa" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Baixa" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Alta" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Molt alta" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Increïblement alta" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (qualitat molt baixa)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (per defecte)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Baixa (més ràpida)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Per defecte" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Alta (més lenta)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Mitjana (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variable (VBR) (millor qualitat)" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC sense pèrdues (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Perfil d'àudio del GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "Número - Títol" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "Títol" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferències" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "A la mateixa carpeta del fitxer d'entrada" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Selecciona..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "A una carpeta especificada" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Crea subcarpetes: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Suprimeix el fitxer original" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Ubicació dels fitxers de sortida" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Patró per als noms de fitxer: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Substitueix tots els caràcters problemàtics" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Suprimeix tots els caràcters excepte lletres, dígits i ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Exemple de nom de fitxer:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Nom dels fitxers de sortida" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualitat:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Utilitza l’extensió .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Taxa de bits:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compressió:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Amplada de la mostra:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Perfil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "Perfil GST" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Tipus dels fitxers de sortida" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Torna a mostrejar" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Força la sortida a mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limita el nombre de tasques paral·leles" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "El codificador MP3 no és present." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Llegiu com instal·lar-lo" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Ubicació dels fitxers de sortida" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Convertidor de so" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fitxer" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Edita" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Ajuda" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Afegeix fitxers" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Afegeix _carpetes" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Fa la conversió en el mode de processament per lots, des de la línia " "d'ordres, sense interfície\n" " gràfica. Aquesta opció es pot utilitzar, per exemple, en scripts de " "l'intèrpret d'ordres." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Mostra les etiquetes dels fitxers d'entrada en lloc de fer la conversió. " "Activa el mode\n" " de processament per lots des de la línia d'ordres i desactiva la interfície " "gràfica." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Estableix el tipus MIME de sortida per al mode de processament per lots. El " "tipus\n" " per defecte és %s. Probablement també voldreu establir el sufix de sortida." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Mode silenciós. Només mostra els errors." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Mostra informació de depuració addicional" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Estableix el sufix del nom de fitxer per al mode de processament per lots. " "El sufix per defecte és %s.\n" " El sufix no afecta el tipus MIME de sortida." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Força el nombre de conversions simultànies." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Mostra les opcions del GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Error: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "S'ha interromput la instal·lació del connector." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "No es pot crear la carpeta «%s»." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Error del GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversió feta en %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Àlbum desconegut" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artista desconegut" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Tots els fitxers" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Error: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Igual que el d'entrada, però substituint l'extensió" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Igual que el d'entrada, però amb una extensió addicional" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Número de pista - Títol" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Títol de la pista" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artista - Títol" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Patró personalitzat per als noms de fitxer" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "Artista-Àlbum" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Variables disponibles:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "A la carpeta %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Taxa de bits objectiu: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Obre fitxers" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Afegeix carpetes" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "S'està preparant la conversió..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Conversió" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Conversió cancel·lada" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "En pausa" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "Falten %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Preparat" soundconverter-4.0.5/po/cs.po000066400000000000000000000314671460501237000161740ustar00rootroot00000000000000# Czech translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Petr Šimáček \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: cs\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Převaděč zvuků" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Převaděč zvukových formátů" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Převádí audio soubory do různých formátů" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME převod zvuku" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Webová stránka" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtr " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Chyba" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Soubor již existuje" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Přepsat" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Pře_skočit" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Soubor již existuje\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "Použít n_a celou frontu" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "umělec/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "umělec - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Velmi nízká" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Nízká" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normální" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Vysoká" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Velmi vysoká" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Nejvyšší" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bitů (velmi nízká kvalita)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bitů (výchozí)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bitů" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Nižší (rychlejší)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Výchozí" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Vyšší (pomalejší)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstatní (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Průměrný (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Proměný (VBR) - Nejlepší kvalita" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME zvukový profil" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "stopa_číslo - stopa_titul" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "stopa_titul" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Nastavení" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Stejná složka jako původní soubor" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Vybrat.." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Do určené složky" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Vytvořit podsložky: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Smazat původní soubor" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Kam umístit výsledek?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Vzorek jména souboru: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Odstranit všechny nepořádné znaky" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Odstranit všechny znaky kromě písmen, číslic a ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Ukázkové jméno souboru:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Jak pojmenovat soubory?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formát: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalita:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Použít příponu .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Typ bitového toku:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Komprese:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Šířka vzorku:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profil" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Typ výsledku?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Převzorkovat" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Vynutit mono výstup" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Omezit počet paralelních činností" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 enkodér není dostupný." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Čtěte jak nainstalovat" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Kam umístit výsledky?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Převaděč zvuků" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Soubor" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Upravit" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Nápověda" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "Přid_at soubor" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Přidat _složku" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Převádí v dávkovém režimu, z příkazové řádky, bez grafického uživatelského\n" " rozhraní. Můžete to použít z, řekněme, shellových skriptů." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Zobrazit značky (tagy) vstupních souborů namísto jejich převodu. To znamená " "\n" " dávkový režim v příkazovém řádku a vypnutí grafického uživatelského " "rozhraní." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Nastavit výstupní MIME typ dávkovém režimu. Výchozí hodnota je %s. " "Pravděpodobně budete chtít nastavit výstupní příponu stejně." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Buď potichu. Nevypisuj normální výstup, jen chyby." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Zobrazí dodatečné ladicí informace" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Nastavte výstupní příponu názvu souboru pro dávkové zpracování. Výchozí je " "%s. Všimněte si, že přípona nemá vliv\n" " na výstup MIME typu." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Vynutit počet souběžných konverzí." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Zobrazit možnosti GStreameru" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Chyba: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Instalace zásuvného modulu byla zastavena." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Nelze vytvořit složku '%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Chyba GStreameru:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Konverze dokončena za %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Neznámé album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Neznámý interpret" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Všechny soubory" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Chyba: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Stejně jako vstup, ale s náhradou přípony" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Stejně jako vstup, ale s dodatečnou příponou" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Číslo stopy - název" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Název stopy" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Umělec - název" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Vlastní vzorek jména souboru" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "umělec-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Dostupné vzory:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Do složky %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Cílový bitový tok: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Otevřít soubor" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Přidat složku..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Připravuji konverzi..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Převádění" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Zrušeno" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pozastaveno" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d zbývá" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Připraven" soundconverter-4.0.5/po/da.po000066400000000000000000000263011460501237000161420ustar00rootroot00000000000000# Danish translation for soundconverter # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: AJenbo \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: da\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Lydkonvertering" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Lydformat-konvertering" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Fejl" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Fil findes allerede" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Overskriv" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Spring over" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Filen eksisterer allerede\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Tilføj til hele køen" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "kunstner/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "kunstner - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Indstillinger" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Vælg..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "I en specificeret mappe" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Opret undermapper: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Slet oprindelig fil" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Hvor skal resultaterne placeres?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Filnavnsmønster: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Udskift alle problematiske tegn" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Filnavn-eksempel:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Hvordan skal filer navngives?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalitet:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitratetilstand:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Resultattype?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3-indkoder er ikke til stede." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Læs hvordan du installerer" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Hvor skal resultaterne placeres?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Tilføj fil" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Tilføj _mappe" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Konverter i batch-tilstand, fra kommandolinje, uden en grafisk bruger-\n" " flade. Du kan bruge dette fra f.eks. skalscripts." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Vær stille. Skriv ikke normal uddata, kun fejl." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Fejl: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Kan ikke oprette mappe \"%s\"." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Samme som inddata, men udskifter filtype-endelse" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Samme som inddata, men med en ekstra filtype-endelse" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Spor nummer - titel" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Kunstner - titel" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Tilpasset filnavn-møsnter" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "kunstner-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "I mappen %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Mål-bitrate: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Tilføj mappe..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Konverterer" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Annulleret" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pause" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d tilbage" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Klar" soundconverter-4.0.5/po/de.po000066400000000000000000000323741460501237000161550ustar00rootroot00000000000000# German translation of soundconverter. # Copyright (C) 2007 THE soundconverter'S COPYRIGHT HOLDER # This file is distributed under the same license as the soundconverter package. # Uwe Bugla , 2009. msgid "" msgstr "" "Project-Id-Version: soundconverter 1.4.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Tobias Bannert \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: de\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Klangumwandler" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Audio-Formatumwandlung" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Konvertiert Klangdateien in andere Formate" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME-gestützte Klangumwandlung" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Internetseite" # # line 2414 #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "Dialog1" # # line 42 #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " # # line 892 #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Fehler" # # line 737 #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Datei ist bereits vorhanden" # # line 674 #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "Über_schreiben" # # line 689 #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Überspringen" # # line 737 #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Datei ist bereits vorhanden\n" # # line 789 #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Auf gesamte Warteschlange anwenden" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "Interpret/Album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "Interpret – Album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Sehr niedrig" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Niedrig" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Hoch" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Sehr hoch" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Extrem hoch" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 Bit (sehr niedrige Qualität)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 Bit (Vorgabe)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 Bit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Geringer (schneller)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Vorgabe" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Besser (langsamer)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstante Bitrate (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Durchschnittliche Bitrate (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variable Bitrate (VBR) – höchste Qualität" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC verlustfrei (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME-Audio-Profil" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "Nummer – Titel" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "Titel" # # line 1037 #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Einstellungen" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Gleicher Ordner wie die Eingabedatei" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Auswählen …" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "In den ausgewählten Ordner" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Unterordner anlegen: " # # line 1296 #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Originaldatei löschen" # # line 1323 #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Speicherort für Zieldateien" # # line 1401 #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Namensschema: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Problematische Zeichen entfernen" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Alle Zeichen außer Buchstaben, Zahlen und ./_- entfernen" # # line 1480 #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Namensvorschau:" # # line 1545 #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Benennung der Zieldateien" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " # # lines 1710 1876 2037 #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualität:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Erweiterung .oga verwenden" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" # # line 1848 #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitratenmodus:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Komprimierung:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Sample-Format:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-Profil" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Gewünschtes Zielformat" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Sample-Auflösung:" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Mono-Ausgabe erzwingen" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Anzahl paralleler Konvertierungen begrenzen" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Kein MP3-Kodierer vorhanden." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Installationshinweise" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Speicherort für Zieldateien" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Klangumwandler" # # line 42 #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Datei" # # line 157 #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Bearbeiten" # # line 201 #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Hilfe" # # lines 51 279 #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Datei hinzufügen" # # lines 73 + 296 #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "_Ordner hinzufügen" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Konvertierung per Stapelverarbeitung von der Befehlszeile ausgehend,\n" " ohne grafische Benutzeroberfläche. Besonders sinnvoll für Shell-Skripte." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Meta-Tags der Eingabedateien anzeigen, anstatt sie umzuwandeln. Dies führt " "zu\n" " einer Stapelverarbeitung auf der Befehlszeile ohne grafische " "Benutzeroberfläche." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Ausgabe-MIME-Typ für die Stapelverarbeitung festlegen. Vorgabe ist %s. " "Beachten Sie,\r\n" " dass Sie wahrscheinlich auch die Endung der Ausgabedateien festlegen " "möchten." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Stilles Verhalten. Keine Standardausgabe, nur Fehler." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Zusätzliche Information zur Fehlerdiagnose anzeigen" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Endung der Ausgabedateien für die Stapelverarbeitung festlegen. Vorgabe ist " "%s . Beachten Sie,\n" " dass sich die Dateiendung nicht auf den Ausgabe-MIME-Typ auswirkt." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Anzahl der gleichzeitigen Konvertierungen erzwingen." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "GStreamer-Optionen anzeigen" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Fehler: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Installation der Erweiterung wurde abgebrochen." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Ordner »%s« kann nicht erstellt werden." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer-Fehler:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Konvertierung nach %s abgeschlossen" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Unbekanntes Album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Unbekannter Interpret" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Alle Dateien" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Fehler: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Wie Quelldatei, Dateiendung aber ändern" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Wie Quelldatei, aber mit zusätzlicher Dateiendung" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Nummer – Titel" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Titel" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Interpret – Titel" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Benutzerdefiniertes Dateinamensschema" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "Interpret-Album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Verfügbare Platzhalter:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "In Ordner %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Bitrate der Zieldatei: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Datei öffnen" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Ordner hinzufügen …" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Konvertierung wird vorbereitet …" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Umwandlung wird durchgeführt" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Abgebrochen" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Angehalten" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d verbleibend" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Bereit" soundconverter-4.0.5/po/el.po000066400000000000000000000321711460501237000161600ustar00rootroot00000000000000# Greek translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: jarlaxl lamat \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: el\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Μετατροπέας Ηχου" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Μετατροπέας Αρχείων Ηχου" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Μετατρέπει αρχεία ήχου σε άλλες μορφές" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Ιστοσελίδα" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "διάλογος1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Φίλτρο " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Σφάλμα" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Αρχείο ήδη υπάρχον" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Αντικατάσταση" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Παράβλεψη" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Αρχείο ήδη υπάρχον\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Εφαρμογή σε ολόκληρη τη σειρά αναμονής" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "καλλιτέχνης/άλμπουμ" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "καλλιτέχνης - άλμπουμ" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Πολύ Χαμηλή" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Χαμηλή" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Κανονική" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Υψηλο" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Πολύ υψηλή" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Απίστευτα Υψηλή" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (πολύ χαμηλή ποιότητα)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (προεπιλογή)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Λιγότερη (Γρηγορότερη)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Προεπιλογή" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Καλύτερη (Πιο Αργή)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Σταθερή (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Μέση (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Μεταβλητή (VBR) - Καλύτερη ποιότητα" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Χωρίς απώλειες(.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Προφίλ Ήχου GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "αριθμός_κομματιού - τίτλος_κομματιού" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "τίτλος_κομματιού" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Προτιμήσεις" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Στον ίδιο φάκελο με το αρχικό αρχείο" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Επιλέξτε..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Σε προκαθορισμένο φάκελο" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Δημιουργία υποφακέλων " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Διαγραφή του πρωτότυπου αρχείου" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Πού να βάλω τα αρχεία; " #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Ονοματοδοσία αρχείου: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Αντικατάσταση όλων των προβληματικών χαρακτήρων" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Παράδειγμα αρχείου:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Πως να ονομάσω τα αρχεία;" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Τύπος αρχείου " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Ποιότητα:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Χρήση επέκτασης .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Είδος συμπίεσης" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Συμπίεση:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Προφίλ:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Είδος αρχείου εξόδου;" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Κωδικοποιητής ΜΡ3 δεν υπάρχει." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Διαβάστε πώς να το εγκαταστήσετε" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Που να τοποθετήσω τα αρχεία εξόδου;" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Βοήθεια" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Προσθήκη Αρχείου" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Προσθήκη_Φακέλου" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Μετατροπή από την γραμμή εντολών (κατάσταση batch), χωρίς γραφικό " "περιβάλλον.\n" " Π.χ. για χρήση μέσω εντολών κελύφους." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Ησυχία. Μη καταγράφεις το κανονικό αποτέλεσμα, μόνο λάθη." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Σφάλμα:%s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Δεν μπορώ να δημιουργήσω τον φάκελο '%s' ." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Το ίδιο όπως το αρχικό, αλλά με αντικατάσταση του επιθήματος" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Το ίδιο όπως το αρχικό, αλλά με πρόσθετο επίθημα." #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Αριθμός κομματιού - τίτλος" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Καλλιτέχνης - τίτλος" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Προσαρμοσμένο όνομα αρχειου" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "καλλιτέχνις-άλμπουμ" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Στον φάκελο %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Επιθυμητή συμπίεση: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Προσθήκη φακέλου..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Μετατρέπω" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Ακυρώθηκε" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Σε παύση" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d απομένουν" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Έτοιμο" soundconverter-4.0.5/po/en_AU.po000066400000000000000000000263541460501237000165550ustar00rootroot00000000000000# English (Australia) translation for soundconverter # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Hew \n" "Language-Team: English (Australia) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Sound Converter" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Audio Format Converter" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Error" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "File exists already" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Overwrite" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Skip" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "File exists already\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Apply to entire queue" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artist/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artist - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferences" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Choose..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Into a specified folder" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Create subfolders: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Delete original file" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Where to place results?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Filename pattern: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Replace all messy characters" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Example filename:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "How to name files?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Quality:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Use .oga extension" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitrate mode:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compression:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Sample width:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Type of result?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Resample" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Force mono output" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 Encoder is not present." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Read how to install" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Where to place results?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_File" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Edit" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Help" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Add File" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Add _Folder" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Be quiet. Don't write normal output, only errors." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Force number of concurrent conversions." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Error: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Cannot create '%s' folder." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Same as input, but replacing the suffix" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Same as input, but with an additional suffix" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Track number - title" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artist - title" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Custom filename pattern" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artist-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Into folder %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Target bitrate: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Add Folder..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Converting" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Cancelled" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Paused" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d left" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Ready" soundconverter-4.0.5/po/en_CA.po000066400000000000000000000241761460501237000165330ustar00rootroot00000000000000# English (Canada) translation for soundconverter # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2014-01-02 19:54+0000\n" "Last-Translator: Anthony Harrington \n" "Language-Team: English (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "" #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "" #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "" #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "" #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "" soundconverter-4.0.5/po/en_GB.po000066400000000000000000000306701460501237000165340ustar00rootroot00000000000000# English (United Kingdom) translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Sound Converter" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Audio Format Converter" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Converts audio files into other formats" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME-powered Sound Conversion" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Website" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Error" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "File already exists" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Overwrite" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Skip" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "File exists already\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Apply to entire queue" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artist/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artist - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Very Low" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Low" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "High" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Very High" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Insanely High" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (very low quality)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (default)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Less (Faster)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Default" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Better (Slower)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Average (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variable (VBR) - Best quality" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME Audio Profile" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "track_number - track_title" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "track_title" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferences" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Same folder as the input file" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Choose..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Into a specified folder" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Create subfolders: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Delete original file" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Where to place results?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Filename pattern: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Replace all messy characters" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Remove all characters except letters, digits and ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Example filename:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "How to name files?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Quality:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Use .oga extension" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitrate mode:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compression:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Sample width:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profile:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Type of result?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Resample" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Force mono output" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limit number of parallel jobs" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 Encoder is not present." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Read how to install" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Where to place results?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_File" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Edit" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Help" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Add File" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Add _Folder" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Be quiet. Don't write normal output, only errors." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Displays additional debug information" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Force number of concurrent conversions." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Shows GStreamer Options" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Error: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Plugin installation aborted." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Cannot create '%s' folder." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer Error:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversion done in %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Unknown Album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Unknown Artist" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "All files" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Error: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Same as input, but replacing the suffix" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Same as input, but with an additional suffix" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Track number - title" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Track title" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artist - title" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Custom filename pattern" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artist-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Available patterns:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Into folder %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Target bitrate: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Open a file" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Add Folder..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Preparing conversion..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Converting" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Cancelled" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Paused" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d left" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Ready" soundconverter-4.0.5/po/eo.po000066400000000000000000000261011460501237000161570ustar00rootroot00000000000000# Esperanto translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Esperanto \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: eo\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Sonkonvertilo" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Konvertilo por sonformoj" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialogo1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtrilo " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Eraro" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Dosiero jam ekzistas" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Anstataŭigi" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Transsalti" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Dosiero jam ekzistas\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Apliki al tuta atendovico" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artisto/albumo" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artisto - albumo" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Agordoj" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Elekti..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "En specifitan dosierujon" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Krei subdosierujojn: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Forigi originalan dosieron" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Kien meti rezultojn?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Modelo de dosiernomo: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Anstataŭigi ĉiujn nekutimajn signojn" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Ekzempla dosiernomo:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Kiel nomi la dosierojn?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formo: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalito:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Uzi sufikson .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Reĝimo por bitrapido:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Densigo:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Specimenlarĝo" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Rezultotipo?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Respecimeni" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Trudi unukanalan eligon" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3-kodilo ne disponeblas" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Legu kiel instali" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Kien meti rezultojn?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Dosiero" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "R_edakti" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Helpo" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Aldoni dosieron" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Aldoni d_osierujon" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Konverti en komandreĝimo, per la komanda linio, sen grafika\n" " interfaco. Vi povas uzi tion ĉi ekde ekzemple ŝelskriptoj." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Silenta reĝimo. Montri ne la norman eligon, nur erarojn." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Trudi nombron da nunaj konvertoj." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Eraro: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artisto - titolo" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artisto-albumo" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "" soundconverter-4.0.5/po/es.po000066400000000000000000000321371460501237000161710ustar00rootroot00000000000000# Spanish translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Toni Estevez \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: es\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Conversor de sonido" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Conversor de formatos de audio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Convierte archivos de audio a otros formatos" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversión de sonido con tecnología GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Sitio web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "diálogo1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtro " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Error" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Ya existe el archivo" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Sobrescribir" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Omitir" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Ya existe el archivo\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Aplicar a toda la cola" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "Artista/Álbum" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "Artista - Álbum" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Muy baja" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Baja" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Alta" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Muy alta" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Increíblemente alta" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (calidad muy baja)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (por defecto)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Menor (más rápida)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Por defecto" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Mayor (más lenta)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constante (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Promedio (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variable (VBR) (mejor calidad)" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC sin pérdidas (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Perfil de audio de GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "Número - Título" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "Título" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferencias" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "En la misma carpeta del archivo de entrada" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Seleccionar..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "En una carpeta especificada" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Crear subcarpetas: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Eliminar el archivo original" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Ubicación de los archivos de salida" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Patrón para los nombres de archivo: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Reemplazar todos los caracteres problemáticos" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Eliminar todos los caracteres excepto letras, dígitos y ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Ejemplo de nombre de archivo:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Nombre de los archivos de salida" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formato: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Calidad:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Usar la extensión .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Tasa de bits:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compresión:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Ancho de la muestra:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Perfil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "Perfil GST" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Tipo de los archivos de salida" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Volver a muestrear" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forzar la salida a mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limitar el número de tareas paralelas" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "El codificador MP3 no está presente." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Lea cómo instalarlo" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Ubicación de los archivos de salida" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Conversor de sonido" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Archivo" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Editar" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "Ay_uda" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Añadir archivos" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Añadir _carpetas" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Realiza la conversión en el modo de procesamiento por lotes, desde la línea " "de órdenes, sin interfaz\n" " gráfica. Esta opción se puede usar, por ejemplo, en guiones del intérprete " "de línea de órdenes." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Muestra las etiquetas de los archivos de entrada en vez de convertirlos. " "Activa el modo\n" " de procesamiento por lotes desde la línea de órdenes y desactiva la " "interfaz gráfica." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Establece el tipo MIME de salida para el modo de procesamiento por lotes. El " "tipo\r\n" " predeterminado es %s. Probablemente también quiera establecer el sufijo de " "salida." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Modo silencioso. Solo muestra los errores." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Muestra información de depuración adicional" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Establece el sufijo del nombre de archivo para el modo de procesamiento por " "lotes.\n" " El sufijo predeterminado es %s. El sufijo no afecta al tipo MIME de salida." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Fuerza el número de conversiones simultáneas." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Muestra las opciones de GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Error: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Se ha interrumpido la instalación del complemento." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "No se puede crear la carpeta «%s»." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Error de GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversión realizada en %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Álbum desconocido" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artista desconocido" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Todos los archivos" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Error: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Igual que el de entrada, pero reemplazando la extensión" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Igual que el de entrada, pero con una extensión adicional" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Número de pista - Título" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Título de la pista" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artista - Título" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Patrón personalizado para los nombres de archivo" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "Artista-Álbum" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Variables disponibles:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "En la carpeta %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Tasa de bits objetivo: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Abrir archivos" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Añadir carpetas" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Preparando la conversión..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Conversión" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Conversión cancelada" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "En pausa" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "Faltan %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Preparado" soundconverter-4.0.5/po/et.po000066400000000000000000000274541460501237000162000ustar00rootroot00000000000000# Estonian translation for soundconverter # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: et\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Heli teisendaja" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Heli vormingu teisendaja" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Veebileht" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialoog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Tõrge" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Fail on juba olemas" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Kirjuta üle" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Jäta vahele" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Fail on juba olemas\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "R_akenda tervele järjekorrale" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "esitaja/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "esitaja - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Väga madal" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Madal" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normaalne" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Kõrge" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Väga kõrge" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Väga kõrge" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8-bitti (väga madal kvaliteet)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16-bitti (vaikimisi)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32-bitti" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Vähem (kiirem)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Vaikimisi" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Kvaliteetsem (Aeglasem)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Muutumatu bittrate (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Keskmine (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME heliprofiil" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "Loo_number - Loo_pealkiri" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "Loo_pealkiri" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Seaded" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Vali..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Määratud kataloogi" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Loo alamkataloogid: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Kustuta originaalfail" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Kuhu asetada tulemused?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Failinime muster: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Asenda kõik koledad märgid" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Näidis failinimi:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Kuidas faile nimetada?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Vorming: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvaliteet:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Kasuta .oga laiendit" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitikiiruse režiim:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Tihendus:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Diskreedi laius:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profile:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Tulemuse tüüp?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Diskreedi ümber" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Sunni mono väljund" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Piira paralleeltöötluste arvu" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Puudub MP3-e enkodeerija." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Loe, kuidas paigaldada" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Kuhu asetada tulemused?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fail" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Redigeeri" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "A_bi" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "Faili _lisamine" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "_Kausta lisamine" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Teisenda hulgirežiimis käsurealt, ilma graafilise liideseta.\n" "Sa võid seda kasutada näiteks skriptides." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Ole vaiksem. Ära kuva tavalist väljundit, ainult tõrked." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Sunntud üheaegsete teisenduste arv." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Tõrge: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Kausta '%s' loomine nurjus." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreameri tõrge:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Kõik failid" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Viga: %s\n" " %s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Sama nagu sisendil, aga asendades järelliite" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Sama nagu sisendil, aga täiendav järelliide" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Raja number - pealkiri" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Raja pealkiri" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Esitaja - pealkiri" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Kohandatud failinime muster" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "esitaja-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Võimalikud mustrid:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Kausta %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Siht bitikiirus: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Faili avamine" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Kataloogi lisamine..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Teisendan" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Katkestatud" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pausitud" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d jäänud" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Valmis" soundconverter-4.0.5/po/eu.po000066400000000000000000000314161460501237000161720ustar00rootroot00000000000000# Basque translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Basque \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: eu\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Soinu-bihurtzailea" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Audio Formatu Bihurtzailea" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Audio fitxategiak beste formatuetara bihurtzen ditu" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME-k indarturiko Soinu Bihurketa" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Webgunea" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "elkarrizketa1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Iragazkia " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Errorea" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Fitxategia dagoeneko existitzen da" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Gainidatzi" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Saltatu" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Fitxategia dagoeneko existitzen da\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Aplikatu ilada osoari" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artista/albuma" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artista - albuma" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Oso baxua" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Baxua" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normala" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Altua" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Oso altua" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Izugarri altua" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bit (oso kalitate baxua)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bit (lehenetsia)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Gutxiago (Azkarragoa)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Lehenetsia" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Hobea (Motelagoa)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstantea (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Batez bestekoa (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Aldakorra (VBR) - Kalitaterik onena" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "Galerarik gabeko FLAC (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME Audio Profila" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "pista_zenbakia - pistaren_izenburua" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "pistaren_izenburua" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Hobespenak" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Sarrerako fitxategia izen bera du" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Aukeratu..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Zehaztutako karpetara" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Sortu azpikarpetak: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Ezabatu jatorrizko fitxategia" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Non kokatu emaitzak?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Fitxategi-izen eredua: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Ordezkatu karaktere narrats guztiak" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Kendu karaktere guztiak letrak, zenbakiak eta ./_- ezik" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Fitxategi-izenaren adibidea:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Nola izendatu fitxategiak?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formatua: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kalitatea:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Erabili .oga luzapena" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bit-emari modua:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Konpresioa:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Lagin-zabalera:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profila:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profila" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Emaitza mota?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Lagindu berriro" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Behartu mono irteera" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Mugatu lan paralelo kopurua" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 Kodetzailerik ez dago" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Irakurri nola instalatu" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Non kokatu emaitzak?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Soinu-bihurtzailea" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fitxategia" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Editatu" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Laguntza" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Gehitu fitxategia" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "_Gehitu karpeta" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Bihurtu batch moduan, komando lerrotik, erabiltzaile-interfaze\n" " grafikorik gabe. Shell scriptetan erabili dezakezu hau, adibidez." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Erakutsi sarrerako fitxategien etiketak bihurtu ordez. Honek komando " "lerroko\n" "batch modua adierazten du eta erabiltzaile interfaze grafikoa desgaitzen du." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Ezarri batch modurako irteerako MIME mota. Lehenetsia %s da. Kontutan izan, " "ziur aski, irteerako atzizkia ere aldatu nahiko duzula." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Isila izan. Irteera arruntean erroreak soilik idatzi." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Arazketako informazio gehigarria erakusten du" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Ezarri irteerako fitxategi-izenaren atzizkia batch modurako. Lehenetsia %s " "da. Kontutan izan atzizkiak\n" " ez duela eraginik irteeraren MIME motan." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Behartu aldibereko bihurketen kopurua." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "GStreamer aukerak erakusten ditu" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Errorea: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Plugin instalazioa gelditu da." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Ezin da '%s' karpeta sortu." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer Errorea:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Bihurketa eginda %s-(e)n" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Album ezezaguna" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artista ezezaguna" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Fitxategi guztiak" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Errorea: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Sarrerakoa bezalakoa, baina atzizkia ordezkatuz" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Sarrerakoa bezalakoa, baina atzizki gehigarri batekin" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Pista zenbakia - izenburua" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Pistaren izenburua" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artista - izenburua" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Fitxategi-izen eredu pertsonalizatua" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artista-albuma" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Eredu erabilgarriak:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "%s karpetara" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Helburuko bit-emaria: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Ireki fitxategi bat" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Gehitu karpeta..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Bihurketa prestatzen..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Bihurtzen" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Utzita" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pausatuta" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d falta dira" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Prest" soundconverter-4.0.5/po/fa.po000066400000000000000000000244651460501237000161550ustar00rootroot00000000000000# Persian translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Persian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: fa\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "صافی " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "خطا" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "هنرمند/آلبوم" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "هنرمند - آلبوم" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "تنظیمات‌" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "انتخاب..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "" #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "" #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "" #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "کیفیت:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "هنرمند/آلبوم" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "افزودن پوشه..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "لغو شده‌" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "مکث شده‌" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "آماده" soundconverter-4.0.5/po/fi.po000066400000000000000000000304661460501237000161630ustar00rootroot00000000000000# Finnish translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Elias Julkunen \n" "Language-Team: Finnish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: fi\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Äänitiedostojen muunnin" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Äänitiedostojen muunnin" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Muunna äänitiedostoja eri tiedostomuotoihin" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Äänitiedostojen muunnin Gnomelle" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Verkkosivusto" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "valintaikkuna1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Suodatin " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Virhe" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Tiedosto on jo olemassa" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Korvaa" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "O_hita" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Tiedosto on jo olemassa\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Toteuta koko jonoon" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "esittäjä/levy" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "esittäjä - levy" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Erittäin matala" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Matala" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normaali" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Korkea" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Erittäin korkea" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Mielettömän korkea" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bittiä (erittäin matala laatu)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bittiä (oletus)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bittiä" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Vähemmän (nopeampi)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Oletus" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Parempi (hitaampi)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Tasainen (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Keskiarvo (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Vaihteleva (VBR) - Paras laatu" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC - häviötön (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME-ääniprofiili" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "kappaleen_numero - kappaleen_nimi" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "kappaleen_nimi" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Asetukset" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Samaan kansioon kuin lähdetiedosto" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Valitse..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Tiettyyn kansioon" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Luo alihakemistot: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Poista alkuperäinen tiedosto" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Kohdekansio" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Tiedostonimen kaava: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Korvaa kaikki sekavat kirjaimet" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" "Poista kaikki merkit lukuun ottamatta kirjaimia, numeroita ja merkkejä ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Esimerkki tiedostonimestä:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Tiedostojen nimeäminen" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Muoto: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Laatu:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Käytä .oga-tiedostopäätettä" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bittinopeuden tila:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Pakkaus:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profiili:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Kohdemuoto" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Tarkkuuden muutos" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Pakota mono -ulostulo" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Rinnakkaisten töiden enimmäismäärä" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3-pakkaajaa ei löydy." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Asennusohje" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Kohdekansio" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Äänenmuunnin" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Tiedosto" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Muokkaa" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Ohje" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Lisää tiedosto" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Lisää _kansio" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Muunna erätilassa, komentoriviltä ilman graafista käyttöliittymää.\n" " Voit käyttää tätä esim. skriptien kanssa." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Hiljainen tila. Ei kirjoita normaalia tulostetta, vain virheet." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Näyttää ylimääräistä vianjäljitystietoa" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Rajoita samanaikaisten muunnosten määrää." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Näyttää GStreamer-valinnat" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Virhe: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Liitännäisen asennus keskeytetty." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Hakemistoa \"%s\" ei voida luoda." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer-virhe:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Muunnos valmistui ajassa %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Tuntematon levy" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Tuntematon esittäjä" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Kaikki tiedostot" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Virhe: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Sama kuin lähdetiedosto, mutta muuta pääte" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Sama kuin lähdetiedosto, mutta lisää pääte" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Kappaleen numero - nimi" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Kappaleen nimi" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Esittäjä - kappale" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Omavalintainen nimeämiskaava" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "esittäjä-levy" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Käytettävissä olevat kaavat:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Kansioon %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Kohteen bittinopeus: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Avaa tiedosto" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Lisää kansio..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Valmistaudutaan muunnokseen..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Muunnetaan" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Peruttu" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Keskeytetty" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d jäljellä" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Valmis" soundconverter-4.0.5/po/fr.po000066400000000000000000000324371460501237000161740ustar00rootroot00000000000000# French translation of soundconverter. # Copyright (C) 2004 Lars Wirzenius, 2005-2007 Gautier Portet # This file is distributed under the same license as the soundconverter package. # Guillaume Bedot , 2007. # Uwe Bugla , 2012. # daufinsyd , 2012. # msgid "" msgstr "" "Project-Id-Version: soundconverter 1.4.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2024-01-21 01:26+0000\n" "Last-Translator: AO \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: fr\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Convertisseur de sons" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Convertisseur de formats de sons" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Convertit des fichiers son en d’autres formats" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversion de sons propulsée par GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Site web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialogue1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtre " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Erreur" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Le fichier existe déjà" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "É_craser" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Ignorer" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Le fichier existe déjà\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Appliquer à toute la file d'attente" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artiste/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artiste - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Très basse" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Basse" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normale" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Élevée" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Très élevée" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Incroyablement élevée" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (qualité très basse)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (par défaut)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Moindre (plus rapide)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Par défaut" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Meilleure (plus lent)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Moyenne (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variable (VBR) - La meilleure qualité" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC sans perte (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Profil audio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "Numéro_de_la_plage - Titre_de_la_plage" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "Titre_de_la_plage" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Préférences" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Dans le même dossier que la source" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Sélectionner…" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Dans le dossier spécifié" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Créer des sous-dossiers : " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Supprimer le fichier d'origine" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Où placer les fichiers convertis ?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Modèle pour les noms de fichiers : " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Remplacer tous les caractères bizarres" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Enlever tous les caractères sauf les lettres, chiffres et ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Exemple de nom de fichier :" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Comment nommer les fichiers ?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format : " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualité :" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Utiliser l’extension .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Débit binaire :" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compression :" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Échantillonnage :" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil :" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "Profil GST" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Type de fichier en sortie ?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Ré-échantillonner" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forcer la sortie en mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limiter le nombre de conversions en parallèle" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "L’encodeur MP3 est absent." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Comment installer" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Où placer les fichiers convertis ?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Convertisseur audio SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fichier" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Éditer" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Aide" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Ajouter un fichier" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Ajouter un _dossier" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Convertir en mode batch, depuis la ligne de commande sans interface\n" " graphique. Vous pouvez utiliser ceci dans des scripts shell." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Afficher les balises des fichiers sources au lieu de les convertir. Ceci " "indique \n" " le mode par lot depuis la ligne de commande et désactive l'interface " "graphique." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Indiquer le type MIME de sortie pour le mode par lot. %s par défaut. Notez " "que vous voudrez probablement aussi configurer le suffixe de sortie." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Silencieux. Ne pas écrire la sortie normale, seulement les erreurs." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Affiche des renseignements complémentaires de débogage." #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Indiquer le suffixe du fichier de sortie pour le mode par lot. %s par défaut " ". Notez que le suffixe\n" " n'affecte pas le type MIME de sortie." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Forcer le nombre de conversions simultanées." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Affiche les options GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Erreur : %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "Impossible de créer le dossier" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "Erreur de renommage du fichier" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "L’installation du greffon a été interrompue." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Impossible de créer le dossier « %s »." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Erreur GStreamer :" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversion terminée dans %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Album inconnu" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artiste inconnu" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" "Artiste Album Titre Plage Total Genre Date Année Estampille NoDisque " "TotalDisque Ext" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Tous les fichiers" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Erreur : %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "Ajout de fichiers…" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Identique à la source en remplaçant le suffixe" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Identique à la source en ajoutant un suffixe" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Numéro de la plage - titre" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Titre de la plage" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artiste - titre" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Modèle personnalisé pour les noms de fichiers" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artiste-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Modèles disponibles :" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Dans le dossier %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Débit binaire cible : %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Ouvrir un fichier" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Ajouter un dossier…" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Préparation de la conversion…" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Conversion" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Annulé" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "En pause" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d restantes" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Prêt" soundconverter-4.0.5/po/fr_CA.po000066400000000000000000000323621460501237000165340ustar00rootroot00000000000000# French (Canada) translation for soundconverter # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2024-01-21 01:28+0000\n" "Last-Translator: AO \n" "Language-Team: French (Canada) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Convertisseur de sons" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Convertisseur de formats de sons" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Convertit des fichiers son en d’autres formats" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversion de sons propulsée par GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Site Web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialogue1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtre " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Erreur" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Le fichier existe déjà" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Écraser" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Ignorer" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Le fichier existe déjà\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Appliquer à toute la file" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artiste/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artiste - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Très basse" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Basse" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normale" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Haute" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Très haute" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Incroyablement haute" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (très basse qualité)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (par défaut)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Moindre (plus rapide)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Par défaut" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Meilleure (plus lent)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Débit Binaire Constant (DBC)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Débit Binaire Moyen (DBM)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Débit Binaire Variable (DBV) - La meilleure qualité" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Sans perte (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Profil audio de GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "Numéro_de_la_plage - Titre_de_la_plage" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "Titre_de_la_plage" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Préférences" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Dans le même dossier que le fichier source" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Séléctionner…" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Dans un dossier spécifié" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Créer des sous-dossiers : " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Supprimer le fichier d’origine" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Où placer les fichiers convertis ?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Modèle de nom de fichier : " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Remplacer tous les caractères bizarres" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Enlever tous les caractères sauf les lettres, chiffres et ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Exemple de nom de fichier :" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Comment nommer les fichiers?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format : " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualité :" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Utiliser l’extension .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Débit binaire :" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compression :" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Largeur de l'échantillon :" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil :" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "profil-gst" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Type de fichier en sortie ?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Rééchantillonage" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forcer la sortie en mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limiter le nombre de conversions en parallèle" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "L’encodeur MP3 est absent." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Comment installer" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Où placer les fichiers convertis?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Convertisseur de sons" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fichier" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Modifier" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Aide" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Ajouter un fichier" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Ajouter un _dossier" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Convertir par lot depuis la ligne de commande sans interface\n" " graphique. Vous pouvez utiliser ceci dans des scripts « shell »." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Montre les balises des fichiers source au lieu de les convertir. Ceci " "indique \n" " le mode par lot depuis la ligne de commande et désactive l'interface " "graphique." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Indiquer le type MIME de sortie pour le mode par lot. %s par défaut. Notez " "que vous voudrez probablement aussi configurer le suffixe de sortie." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Silencieux. Ne pas écrire la sortie normale, seulement les erreurs." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Affiche des renseignements complémentaires de débogage." #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Indiquer le suffixe du fichier de sortie pour le mode par lot. %s par défaut " ". Notez que le suffixe\n" " n'affecte pas le type MIME de sortie." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Forcer le nombre de conversions simultanées." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Montre les options GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Erreur : %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "Impossible de créer le dossier" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "Erreur lors du renommage du fichier" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "L’installation du plugiciel a été interrompue." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Impossible de créer le dossier « %s »." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Erreur GStreamer :" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversion complétée en %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Album inconnu" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artiste inconnu" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" "Artiste Album Titre Plage Total Genre Date Année Estampille NoDisque " "TotalDisque Ext" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Tous les fichiers" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Erreur : %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "Ajout de fichiers…" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Identique à la source en remplaçant le suffixe" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Identique à la source en ajoutant un suffixe" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Numéro de la plage - titre" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Titre de la plage" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artiste - titre" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Modèle personnalisé pour les noms de fichiers" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artiste-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Modèles disponibles :" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Dans le dossier %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Débit binaire cible : %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Ouvrir un fichier" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Ajouter un dossier…" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Préparation de la conversion…" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Conversion" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Annulé" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "En pause" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d restantes" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Prêt" soundconverter-4.0.5/po/fr_FR.po000066400000000000000000000303651460501237000165610ustar00rootroot00000000000000# French translation of soundconverter. # Copyright (C) 2004 Lars Wirzenius, 2005-2007 Gautier Portet # This file is distributed under the same license as the soundconverter package. # msgid "" msgstr "" "Project-Id-Version: soundconverter 1.4.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2019-02-08 15:57+0000\n" "Last-Translator: AO \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Convertisseur audio" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Convertisseur de fichiers audio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Convertit des fichiers audio en d'autres formats" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversion audio propulsée par GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Site web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "" #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Erreur" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Le fichier existe déjà" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "É_craser" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Ignorer" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Le fichier existe déjà\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Appliquer à toute la file d'attente" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artiste/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artiste - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Très basse" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Basse" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normale" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Élevée" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Très élevée" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Incroyablement élevée" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (qualité très basse)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (par défaut)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Moindre (plus rapide)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Par défaut" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Meilleure (plus lent)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Moyenne (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variable (VBR) - La meilleure qualité" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC sans perte (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Profil audio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "Numéro_de_piste - Titre_de_la_piste" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "Titre_de_la_piste" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Préférences" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Dans le même dossier que la source" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Parcourir..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Dans le dossier spécifié" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Créer des sous-dossiers : " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Supprimer le fichier d'origine" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Où placer les fichiers convertis ?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Modèle pour les noms de fichiers : " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Remplacer tous les caractères bizarres" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Enlever tous les caractères sauf les lettres, chiffres et ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Exemple de nom de fichier :" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Comment nommer les fichiers ?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format : " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualité :" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Utiliser l'extension .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Débit binaire :" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compression :" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Échantillonnage :" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil :" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "Profil GST" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Type de fichier en sortie ?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Ré-échantillonner" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forcer la sortie en mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limiter le nombre de conversions en parallèle" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "L'encodeur MP3 n'est pas présent." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Lire comment installer" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Convertisseur audio SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fichier" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Éditer" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Aide" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Ajouter un fichier" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Ajouter un _dossier" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Silencieux. Affiche uniquement les erreurs." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Affiche des informations complémentaires de débogage." #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Forcer le nombre de conversions simultanées." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Erreur : %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "L’installation du greffon a été interrompue." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Impossible de créer le dossier « %s »." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Erreur GStreamer :" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversion terminée dans %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Album inconnu" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artiste inconnu" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Tous les fichiers" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Erreur : %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Comme la source en remplaçant le suffixe" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Comme la source en ajoutant un suffixe" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Numéro de piste - titre" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Titre de la piste" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artiste - titre" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Modèle personnalisé pour les noms de fichiers" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artiste-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Modèles disponibles :" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Dans le dossier %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Débit binaire cible : %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Ajouter un dossier…" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Préparation de la conversion..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Conversion" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Annulé" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "En pause" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d restantes" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Prêt" soundconverter-4.0.5/po/gl.po000066400000000000000000000317321460501237000161640ustar00rootroot00000000000000# Galician translation for soundconverter # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: gl\n" "X-Poedit-Language: Galician\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Sound Converter" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Convertedor de formatos de son" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Converte os ficheiros de son a outros formatos" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversión de son desenvolvida por GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Sitio web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "diálogo1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtro " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Produciuse un erro" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "O ficheiro xa existe" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Sobrescribir" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Omitir" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "O ficheiro xa existe\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Aplicar a toda a cola" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artista/álbum" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artista - álbum" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "&Moi baixa" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Baixa" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Alta" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Moi alta" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Altísima" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (calidade moi baixa)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (predeterminada)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Menor (máis rápida)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Predeterminado" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Mellor (máis lenta)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constante (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Media (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variábel (VBR) - Mellor calidade" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Perfil de son de GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "número_da_pista - título_da_pista" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "título_da_pista" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferencias" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "O mesmo cartafol do ficheiro" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Escoller..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Nun cartafol especificado" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Crear subcartafoles: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Eliminar o ficheiro orixinal" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Onde se deben localizar os resultados?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Modelo para os nomes de ficheiro: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Substituír os caracteres non aceptados" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Eliminar todos os caracteres excepto letras, díxitos e ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Exemplo de nome de ficheiro:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Como nomear os ficheiros?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formato: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Calidade:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Usar a extensión .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Taxa de bits:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compresión:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Largo da mostra:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Perfil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "perfil-gst" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Tipo de resultado?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Volver a mostrar" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forzar a saída «mono»" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Número límite de tarefas paralelas" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "O codificador MP3 non está presente." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Información para a instalación" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Onde se deben localizar os resultados?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Ficheiro" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Editar" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Axuda" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Engadir un ficheiro" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Engadir un _cartafol" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Converter en modo por lotes desde a liña de ordes, sen modo gráfico\n" "de usuario. Pode usar isto, por exemplo, en scripts de consola." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Mostrar as etiquetas dos ficheiros de entrada no canto de convertelos. Isto " "indica\n" "o modo en lote de liña de ordes e desactiva a interface gráfica de usuario." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Estabelecer o tipo MIME de saída para o modo en lote. O predefinido é %s. " "Observe que probabelmente tamén desexe estabelecer o sufixo de saída." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Silencioso. Mostrar unicamente os erros." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Mostra información adicional de depuración" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Estabelece o sufixo do nome do ficheiro de saída para o modo en lote. O " "predefinido é %s. Observe que o sufixo non afecta\n" "o tipo MIME de saída." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Forzar o número de conversións simultáneas" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Mostrar as opcións de GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Erro: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Cancelouse o plugin de instalación." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Non é posíbel crear o cartafol '%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Erro de GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversión rematada en %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Álbum descoñecido" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artista descoñecido" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Todos os ficheiros" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Erro: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "O mesmo nome de entrada pero substituíndo o sufixo" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "O mesmo nome de entrada pero cun sufixo adicional" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Número da pista - título" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Título da pista" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artista - título" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Modelo personalizado para os nomes de ficheiro" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artista-álbum" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Patróns dispoñíbeis:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "No cartafol %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Taxa de bits do resultado: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Abrir un ficheiro" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Engadir un cartafol..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Preparando a conversión..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Conversión en proceso" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Cancelado" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Detido" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d restantes" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Listo" soundconverter-4.0.5/po/he.po000066400000000000000000000267571460501237000161710ustar00rootroot00000000000000# Hebrew translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Yaron \n" "Language-Team: LANG \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "ממיר סאונד" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "ממיר פורמטים של אודיו" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "דיאלוג1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "פילטר " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "שגיאה" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "קובץ כבר קיים" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_דרוס" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_דלג" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "קובץ כבר קיים\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_החל על כל התור" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "אומן/אלבום" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "אמן - אלבום" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "העדפות" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "בחר..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "לתוך תיקייה מסוימת" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "צור תת-תיקיות: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "מחק את הקובץ המקורי" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "היכן לשים את התוצאה?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "תבנית שם קובץ: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "הסר את כל התווים הבעייתיים" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "דוגמא לשם קובץ:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "איך לקרוא לקבצים?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "פורמט: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "איכות:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "מצב דגימה(bitrate):" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "סוג התוצאה?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "מקודד MP3 לא נמצא." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "קרא כיצד להתקין" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "היכן לשים את התוצאה" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "ממיר סאונד" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_הוסף קובץ" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "הוסף _תיקייה" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "המר באצווה, משורת הפקודה, ללא ממשק משתמש\n" "טוב לשימוש, למשל, מסקריפט." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "מצב שקט. אל תכתוב פלט רגיל, רק שגיאות." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "שגיאה: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "לא יכול לייצר את התיקייה '%s'" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "כמו המקור, רק עם שינוי הסיומת" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "כמו המקור, רק עם סיומת נוספת" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "מספר הרצועה - כותרת" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "אומן - כותרת" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "תבנית שם קובץ מותאמת אישית" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "אומן-אלבום" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "לתוך תיקייה %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "קצב סיביות היעד: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "הוסף תיקייה..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "ממיר" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "בוטל" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "מושהה" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d נותרו" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "מוכן" soundconverter-4.0.5/po/hi.po000066400000000000000000000252301460501237000161560ustar00rootroot00000000000000# Hindi translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Hindi \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: hi\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "दवानी बदलनेवला" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "संवाद 1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "" #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "त्रुटि" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_छोड़ें" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "ye file\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "प्राथमिकताएँ" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "चुनें..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "" #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "" #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "एस फाइल को कैसे नाम देना हे" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "" #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "विशेषताः" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "मप३" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "वाव" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "दवानी बदलनेवाला" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "गलती :%s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "'%s' फोल्डर संबव नहीं हे" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "फ़ोल्डर जोड़ें..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "रूपान्तरण" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "रद्द किया" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "ठहरा" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d बाकि हे" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "तैयार" soundconverter-4.0.5/po/hu.po000066400000000000000000000320571460501237000161770ustar00rootroot00000000000000# translation of hu.po to Hungarian # French translation of soundconverter. # Copyright (C) 2005 THE soundconverter'S COPYRIGHT HOLDER # This file is distributed under the same license as the soundconverter package. # # Guillaume Bedot , 2005. # Olivér Herczeg , 2007. # Peter Bojtos , 2013. msgid "" msgstr "" "Project-Id-Version: hu\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: hu\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Hangátalakító" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Hangformátum-átalakító" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Hangfájlokat alakít át más formátumokba" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME alapú hangátalakítás" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Weboldal" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "párbeszédablak1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Szűrő " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Hiba" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "A fájl már létezik" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Felülírás" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Kihagyás" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "A fájl már létezik\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Alkalmazás a teljes listára" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "előadó/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "előadó - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Nagyon alacsony" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Alacsony" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normál" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Magas" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Nagyon magas" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Elképesztően magas" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bit (nagyon alacsony minőség)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bit (alapértelmezett)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Kevesebb (gyorsabb)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Alapértelmezett" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Jobb (lassabb)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Állandó (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Átlagos (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Változó (VBR) - legjobb minőség" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "Veszteségmentes FLAC (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME hangprofil" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "dal_száma - dal_címe" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "dal_címe" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Beállítások" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Ugyanaz a mappa mint a bemeneti fájlé" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Kiválasztás…" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Megadott mappába" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Almappák létrehozása: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Eredeti fájl törlése" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Hová kerüljenek az eredmények?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Fájlnév minta: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Összes speciális karakter cseréje" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Minden karakter eltávolítása, kivéve betűk, számok és ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Példa fájlnév:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Mi legyen a fájlok neve?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formátum: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Minőség:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Az .oga kiterjesztés használata" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitsebesség módja:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Tömörítés:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Minta szélessége:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profil" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "A kimenet típusa?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Újramintavételezés" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Mono kimenet kényszerítése" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Párhuzamos feladatok számának korlátozása" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Nem áll rendelkezésre MP3-kódoló." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Telepítési segédlet elolvasása" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Hová kerüljenek az eredmények?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Hangátalakító" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fájl" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "S_zerkesztés" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Súgó" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "Fájl _hozzáadása" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "_Mappa hozzáadása" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Átalakítás kötegelt módban, parancssorból, grafikus felület nélkül.\n" "Ezt használhatja akár parancsfájlokból is." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Bemeneti fájlok címkéinek megjelenítése azok átalakítása helyett. Ez jelzi \n" "a parancssori kötegelt módot, és letiltja a grafikus felhasználói felületet." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "A kimenet MIME-típusának beállítása kötegelt módnál. Az alapértelmezett: %s. " "Ne feledje, hogy valószínűleg a kimeneti utótagot is be kell állítani." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Csendes üzemmód. Nem ír normál kimenetet, csak hibákat." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "További hibakeresési információkat jelenít meg" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "A kimeneti fájlnév utótag beállítása kötegelt módnál. Az alapértelmezett: " "%s. Ne feledje, hogy az utótag nincs hatással a kimenet MIME-típusára." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Egyidejű átalakítások számának kényszerítése." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Megjeleníti a GStreamer kapcsolókat" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Hiba:·%s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Bővítménytelepítés megszakítva." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Nem lehet létrehozni a(z) „%s” mappát." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer hiba:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Az átalakítás elkészült %s alatt" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Ismeretlen album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Ismeretlen előadó" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Minden fájl" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Hiba: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "A bemenettel azonos, de cserélje le az utótagot" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "A bemenettel azonos, de további utótaggal" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Dal száma - cím" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Szám címe" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Előadó - cím" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Egyéni fájlnév minta" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "előadó-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Elérhető minták:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "A(z) %s mappába" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Cél bitsebesség: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Fájl megnyitása" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Mappa hozzáadása…" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Átalakítás előkészítése…" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Átalakítás" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Megszakítva" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Szüneteltetve" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d van hátra" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Kész" soundconverter-4.0.5/po/it.po000066400000000000000000000317141460501237000161760ustar00rootroot00000000000000# Italian translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # Stefano Luciani , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-07-24 15:21+0000\n" "Last-Translator: connor \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: it\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Sound Converter" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Convertitore Formati Audio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Converti file audio in altri formati" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversione del suono offerta da GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Sito internet" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtro " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Errore" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Il file esiste già" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Sovrascrivi" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Salta" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Il file esiste già\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Applica all'intera coda" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artista/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artista - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Molto basso" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Basso" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normale" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Alto" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Molto alto" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Veramente alto" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (qualità molto bassa)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (default)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Meno (Veloce)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Predefinito" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Migliore (Più lento)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Costante (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Media (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variabile (VBR) - Qualità migliore" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Profilo Audio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "numero_traccia - titolo_traccia" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "Titolo_traccia" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferenze" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Stessa cartella del file di input" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Scegli..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "In una cartella specificata" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Crea sottocartelle: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Elimina il file originale" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Dove posizionare i risultati?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Modello per i nomi dei file: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Sostituire tutti i caratteri non in ordine" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Rimuove tutti i caratteri eccetto lettere, cifre e ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Nome del file di esempio:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Come verranno chiamati i file?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formato: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualità:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Usa estensione .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Modalità bitrate:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compressione:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Ampiezza campione:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profilo:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Tipo di risultato?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Ricampiona" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forza uscita mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limita il numero dei processi paralleli" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Il codificatore MP3 non è presente." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Leggi come installare" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Dove posizionare i risultati?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Sound Converter - Convertitore Audio" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_File" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "Modifica" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "Aiuto (_H)" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Aggiungi file" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Aggiungi _Cartella" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Convertire in modalità batch, da linea di comando, senza interfaccia\n" " grafica. Può essere utilizzato da script della shell." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Mostra i tag dei file di input invece di convertirli. Questo mostra \n" " la modalità batch a linea di comando e disabilita l'interfaccia grafica" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Imposta il tipo di MIME del file in uscita per la modalità batch. Il tipo " "predefinito è %s. È preferibile impostarne anche il suffisso." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Silenzioso. Non riportare l'output normale, ma solo gli errori." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Visualizzare informazioni di debug aggiuntive" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Imposta il suffisso del file in uscita per la modalità batch. Il suffisso " "predefinito è %s. Il suffisso non incide sul tipo di MIME del file in uscita" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Forza il numero di conversioni simultanee" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Mostra le opzioni di GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Errore: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "Impossibile creare la cartella!" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "Errore rinominando il file!" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Installazione plugin interrotta." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Impossibile creare la cartella '%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Errore di GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversione completata in %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Album sconosciuto" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artista sconosciuto" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" "Artista Album Titolo Traccia Totale Genere Data Anno DataeOra NumeroDisco " "TotaleDisco Est" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Tutti i file" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Errore: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "Aggiunta file..." #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Come da input, ma sostituendo l'estensione" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Come da input, ma con una estensione aggiuntiva" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Numero della traccia - titolo" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Titolo traccia" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artista - titolo" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Personalizza il modello del nome del file" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artista-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Modelli disponibili:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Nella cartella %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Bitrate bersaglio: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Apri un file" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Aggiungi Cartella..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Preparazione conversione..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Conversione in corso" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Annullato" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "In Pausa" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d.%02d rimanenti" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Pronto" soundconverter-4.0.5/po/ja.po000066400000000000000000000316011460501237000161470ustar00rootroot00000000000000# Japanese translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: ja\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "サウンド変換" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "オーディオフォーマット変換器" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "オーディオファイルを他のフォーマットに変換します" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME 提供のサウンド変換" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "ウェブサイト" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "ダイアログ1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "フィルター " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "エラー" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "ファイルはすでに存在します" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "上書き(_O)" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "スキップ(_S)" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "ファイルはすでに存在します\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "キュー全体に適用(_A)" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "アーティスト/アルバム" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "アーティスト - アルバム" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "非常に悪い" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "悪い" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "標準" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "良い" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "非常に良い" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "極上" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8bit (低品質)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16bit (デフォルト)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32bit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Less (速い)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "デフォルト" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Better (遅い)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "固定 (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "平均 (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "可変 (VBR) - 最高品質" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME オーディオプロファイル" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "トラック番号 - タイトル" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "タイトル" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "設定" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "入力ファイルと同じフォルダー" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "選択..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "指定したフォルダーに入れる" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "サブフォルダーを作成する: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "変換元のファイルを削除する" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "どこに変換結果を保存しますか?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "ファイル名パターン: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "文字化けを置換する" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "正常な文字列、数字、./_- 以外の文字をすべて削除します" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "ファイル名の例:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "どのようにファイル名を付けますか?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "フォーマット: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "音質:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr ".oga 拡張子を使用する" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "ビットレートモード:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "圧縮:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "サンプリング長:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "プロファイル:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "どの形式に変換しますか?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "リサンプリング" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "モノラル出力を強制する" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "並列ジョブ数を制限する" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 エンコーダーがありません。" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "インストール方法" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "どこへ変換結果を保存しますか?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "ファイル(_F)" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "編集(_E)" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "ヘルプ(_H)" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "ファイルを追加(_A)" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "フォルダーを追加(_F)" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "コマンドラインから、GUI なしのバッチモードで変換する。\n" " シェルスクリプトなどで利用できます。" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "出力を抑える。通常の出力を表示せず、エラーのみ表示します。" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "追加のデバッグ情報を表示する" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "並列変換数を強制する" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "GStreamerのオプションを表示" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "エラー: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "プラグインのインストールが中止されました。" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "フォルダー '%s' を作成できません。" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer エラー:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "%s の変換が終了しました" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "不明なアルバム" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "不明なアーティスト" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "すべてのファイル" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "エラー: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "拡張子のみ変更する" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "拡張子を付け加える" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "トラック番号 - タイトル" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "タイトル" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "アーティスト - タイトル" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "ファイル名パターンを指定する" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "アーティスト-アルバム" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "使用可能なパターン:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "次のフォルダー: %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "対象のビットレート: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "ファイルを開く" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "フォルダーを追加..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "変換準備中..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "変換中" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "キャンセルされました" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "一時停止" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "残り時間 %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "準備完了" soundconverter-4.0.5/po/ka.po000066400000000000000000000310531460501237000161510ustar00rootroot00000000000000# Georgian translation for SoundConverter. # Copyright (C) 2022 SoundConverter authors # This file is distributed under the same license as the SoundConverter package. # Ekaterine Papava , 2022. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-07 11:43+0100\n" "PO-Revision-Date: 2023-01-07 11:52+0100\n" "Last-Translator: Ekaterine Papava \n" "Language-Team: Georgian <(nothing)>\n" "Language: ka\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.2.2\n" #: ../data/soundconverter.desktop.in.h:1 msgid "Sound Converter" msgstr "Sound Converter" #: ../data/soundconverter.desktop.in.h:2 msgid "Audio Format Converter" msgstr "აუდიო ფორმატების გადამყვანი" #: ../data/soundconverter.desktop.in.h:3 msgid "Converts audio files into other formats" msgstr "აუდიო ფაილების სხვა ფორმატებში გადაყვანა" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME-ზე აგებული ხმის გადამყვანი" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "ვებგვერდი" #: ../data/soundconverter.glade.h:3 msgid "Error" msgstr "შეცდომა" #: ../data/soundconverter.glade.h:4 msgid "File exists already" msgstr "ფაილი უკვე არსებობს" #: ../data/soundconverter.glade.h:5 msgid "_Overwrite" msgstr "_ზედგადაწერა" #: ../data/soundconverter.glade.h:6 msgid "_Skip" msgstr "_გამოტოვება" #: ../data/soundconverter.glade.h:7 msgid "File exists already\n" msgstr "ფაილი უკვე არსებობს\n" #: ../data/soundconverter.glade.h:9 msgid "_Apply to entire queue" msgstr "მთელ _რიგზე გადატარება" #: ../data/soundconverter.glade.h:10 ../soundconverter/util/namegenerator.py:49 msgid "artist/album" msgstr "შემსრულებელი / ალბომი" #: ../data/soundconverter.glade.h:11 ../soundconverter/util/namegenerator.py:51 msgid "artist - album" msgstr "შემსრულებელი - ალბომი" #: ../data/soundconverter.glade.h:12 msgid "Very Low" msgstr "ძალიან დაბალი" #: ../data/soundconverter.glade.h:13 msgid "Low" msgstr "დაბალი" #: ../data/soundconverter.glade.h:14 msgid "Normal" msgstr "ნორმალური" #: ../data/soundconverter.glade.h:15 msgid "High" msgstr "მაღალი" #: ../data/soundconverter.glade.h:16 msgid "Very High" msgstr "ძალიან მაღალი" #: ../data/soundconverter.glade.h:17 msgid "Insanely High" msgstr "ძალიან მაღალი" #: ../data/soundconverter.glade.h:18 msgid "8 bits (very low quality)" msgstr "8 ბიტი (ძალიან დაბალი ხარისხი)" #: ../data/soundconverter.glade.h:19 msgid "16 bits (default)" msgstr "16 ბიტი (ნაგულისხმები)" #: ../data/soundconverter.glade.h:20 msgid "32 bits" msgstr "32 ბიტი" #: ../data/soundconverter.glade.h:21 msgid "Less (Faster)" msgstr "ნაკლები (ჩქარი)" #: ../data/soundconverter.glade.h:22 msgid "Default" msgstr "ნაგულისხმები" #: ../data/soundconverter.glade.h:23 msgid "Better (Slower)" msgstr "უკეთესი (უფრო ნელი)" #: ../data/soundconverter.glade.h:24 msgid "Constant (CBR)" msgstr "მუდმივი (CBR)" #: ../data/soundconverter.glade.h:25 msgid "Average (ABR)" msgstr "საშუალო (ABR)" #: ../data/soundconverter.glade.h:26 msgid "Variable (VBR) - Best quality" msgstr "ცვლადი (VBR) - საუკეთსო ხარისხი" #: ../data/soundconverter.glade.h:27 msgid "Preferences" msgstr "მორგება" #: ../data/soundconverter.glade.h:28 msgid "Same folder as the input file" msgstr "იგივე საქაღალდე, საიდანაც შეყვანის ფაილი" #: ../data/soundconverter.glade.h:29 msgid "Choose…" msgstr "არჩევა…" #: ../data/soundconverter.glade.h:30 msgid "Into a specified folder" msgstr "მითითებულ საქაღალდეში" #: ../data/soundconverter.glade.h:31 msgid "Create subfolders: " msgstr "ქვესაქაღალდეების შექმნა: " #: ../data/soundconverter.glade.h:32 msgid "Delete original file" msgstr "საწყისი ფაილის წაშლა" #: ../data/soundconverter.glade.h:33 msgid "Where to place results?" msgstr "სად წავიღო შედეგები?" #: ../data/soundconverter.glade.h:34 msgid "Filename pattern: " msgstr "ფაილის სახელის შაბლონი: " #: ../data/soundconverter.glade.h:35 msgid "Replace all messy characters" msgstr "არეული სიმბოლოების ჩანაცვლება" #: ../data/soundconverter.glade.h:36 msgid "Remove all characters except letters, digits and ./_-" msgstr "ყველა სიმბოლოს წაშლა, გარდა ასოების, ციფრების და /_-" #: ../data/soundconverter.glade.h:37 msgid "Example filename:" msgstr "მაგალითად ფაილის სახელი:" #: ../data/soundconverter.glade.h:38 msgid "How to name files?" msgstr "რა დავარქვათ ფაილებს?" #: ../data/soundconverter.glade.h:39 msgid "Format: " msgstr "ფორმატი: " #: ../data/soundconverter.glade.h:40 msgid "Quality:" msgstr "ხარისხი:" #: ../data/soundconverter.glade.h:41 msgid "Use .oga extension" msgstr ".oga გაფართოების გამოყენება" #: ../data/soundconverter.glade.h:42 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:43 msgid "Bitrate mode:" msgstr "ბიტური სიჩქარის რეჟიმი:" #: ../data/soundconverter.glade.h:44 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:45 msgid "Compression:" msgstr "შეკუმშვა:" #: ../data/soundconverter.glade.h:46 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:47 msgid "Sample width:" msgstr "სემპლის სიგანე:" #: ../data/soundconverter.glade.h:48 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:49 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:50 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:51 msgid "Type of result?" msgstr "შედეგის ტიპი?" #: ../data/soundconverter.glade.h:52 msgid "Resample" msgstr "რესემპლინგი" #: ../data/soundconverter.glade.h:53 msgid "Force mono output" msgstr "მონოში ძალით გატანა" #: ../data/soundconverter.glade.h:54 msgid "Limit number of parallel jobs" msgstr "პარალელური დავალებების რაოდენობის შეზღუდვა" #: ../data/soundconverter.glade.h:55 msgid "MP3 Encoder is not present." msgstr "MP3 ენკოდერი ვერ ვიპოვე." #: ../data/soundconverter.glade.h:56 msgid "Read how to install" msgstr "წაიკითხეთ, როგორ დააყენოთ" #: ../data/soundconverter.glade.h:57 msgid "_Clear List" msgstr "_სიის გასუფთავება" #: ../data/soundconverter.glade.h:58 msgid "Invalid Files" msgstr "არასწორი ფაილები" #: ../data/soundconverter.glade.h:59 msgid "About" msgstr "შესახებ" #: ../data/soundconverter.glade.h:60 msgid "Quit" msgstr "დასრულება" #: ../data/soundconverter.glade.h:61 ../soundconverter/interface/ui.py:306 #: ../soundconverter/interface/ui.py:326 ../soundconverter/interface/ui.py:477 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:62 msgid "Add File" msgstr "ფაილის დამატება" #: ../data/soundconverter.glade.h:63 msgid "Add Folder" msgstr "საქაღალდის დამატება" #: ../data/soundconverter.glade.h:64 msgid "_File" msgstr "_ფაილი" #: ../data/soundconverter.glade.h:65 msgid "_Add File" msgstr "_ფაილის დამატება" #: ../data/soundconverter.glade.h:66 msgid "Add _Folder" msgstr "_საქაღალდის დამატება" #: ../data/soundconverter.glade.h:67 msgid "_Edit" msgstr "_ჩასწორება" #: ../data/soundconverter.glade.h:68 msgid "_Help" msgstr "_დახმარება" #: ../soundconverter/util/namegenerator.py:40 msgid "Same as input, but replacing the suffix" msgstr "იგივე, რაც შეყვანილი. შეიცვლება მხოლოდ სუფიქსი" #: ../soundconverter/util/namegenerator.py:41 msgid "Same as input, but with an additional suffix" msgstr "იგივე, რაც შეყვანილი. სუფიქსი დაემატება" #: ../soundconverter/util/namegenerator.py:42 msgid "Track number - title" msgstr "ტრეკის ნომერი - სათაური" #: ../soundconverter/util/namegenerator.py:43 msgid "Track title" msgstr "ტრეკის სათაური" #: ../soundconverter/util/namegenerator.py:44 msgid "Artist - title" msgstr "შემსრულებელი - სათაური" #: ../soundconverter/util/namegenerator.py:45 msgid "Custom filename pattern" msgstr "ფაილის სახელის ნიმუშის ხელით მითითება" #: ../soundconverter/util/namegenerator.py:50 msgid "artist-album" msgstr "შემსრულებელი-ალბომი" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/util/namegenerator.py:59 msgid "" "Artist Album Album-Artist Title Track Total Genre Date Year Timestamp " "DiscNumber DiscTotal Ext" msgstr "" "შემსრულებელი ალბომი ალბომი-შემსრულებელი სათაური ტრეკი სულ ჟანრი თარიღი წელი " "დროისშტამპი დისკისნომერი სულდისკები გაფ" #: ../soundconverter/util/namegenerator.py:80 msgid "All files" msgstr "ყველა ფაილი" #: ../soundconverter/util/namegenerator.py:334 msgid "Unknown Album" msgstr "უცნობი ალბომი" #: ../soundconverter/util/namegenerator.py:335 #: ../soundconverter/util/namegenerator.py:336 msgid "Unknown Artist" msgstr "უცნობი შემსრულებელი" #: ../soundconverter/util/namegenerator.py:340 msgid "Unknown Genre" msgstr "უცნობი ჟანრი" #: ../soundconverter/util/namegenerator.py:341 msgid "Unknown Year" msgstr "უცნობი წელი" #: ../soundconverter/util/namegenerator.py:342 msgid "Unknown Date" msgstr "უცნობი თარიღი" #: ../soundconverter/gstreamer/converter.py:508 msgid "cannot create '{}' folder." msgstr "'()' საქაღალდის შექმნის შეცდომა." #: ../soundconverter/interface/ui.py:70 msgid "Add Folder…" msgstr "საქაღალდის დამატება…" #: ../soundconverter/interface/ui.py:95 msgid "Add Files…" msgstr "ფაილების დამატება…" #: ../soundconverter/interface/ui.py:305 ../soundconverter/interface/ui.py:306 msgid "Paused" msgstr "დაპაუზებულია" #. wait a bit not to display crap #: ../soundconverter/interface/ui.py:314 msgid "Estimating…" msgstr "დაახლოებით…" #: ../soundconverter/interface/ui.py:323 #, python-format msgid "%d:%02d left" msgstr "დარჩენილია %d:%02d" #: ../soundconverter/interface/ui.py:364 msgid "Converting" msgstr "გადაყვანა" #: ../soundconverter/interface/ui.py:380 msgid "Canceled" msgstr "გაუქმებულია" #: ../soundconverter/interface/ui.py:412 #, python-format msgid "Conversion done in %s" msgstr "გადაყვანის დასრულების დროა %s" #: ../soundconverter/interface/ui.py:475 msgid "Ready" msgstr "მზადაა" soundconverter-4.0.5/po/ko.po000066400000000000000000000273041460501237000161730ustar00rootroot00000000000000# Korean translation for soundconverter # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Kim Boram \n" "Language-Team: Korean \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: ko\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "사운드 컨버터" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "소리 형식 변환기" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "소리 파일들을 다른 형식으로 변환" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "웹 사이트" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "필터 " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "에러" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "파일이 이미 존재합니다." #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "덮어쓰기(_O)" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "넘어가기(_S)" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "파일이 이미 존재합니다\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "대기 중인 모든 목록에 적용(_A)" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "아티스트/앨범" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "아티스트 - 앨범" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "매우 낮음" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "낮음" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "보통" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "높음" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "매우 높음" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8비트(최저 음질)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16비트(기본)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 비트" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "기본값" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC 무손실 (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS 웨이브 (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "그놈 소리 프로필" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "트랙 번호 - 트랙 제목" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "트ᅟ랙 제목" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "기본 설정" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "원본 파일이 위치한 폴더" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "선택..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "지정한 폴더" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "하위 폴더 만들기 " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "원본 파일 삭제" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "어느 곳에 결과물을 내어 놓으시겠습니까?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "파일 이름 양식: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "예제 파일 이름:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "파일 이름을 어떻게 지으시겠습니까?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "형식: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "음질:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr ".oga 확장자를 사용" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "압축:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "프로필:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "리샘플" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "병렬작업의 수 제한" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 인코더가 존재하지 않습니다." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "어디에 결과물을 놓으시겠습니까?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "사운드 컨버터" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "파일(_F)" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "편집(_E)" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "도움말(_H)" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "파일 추가(_A)" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "폴더 추가(_F)" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "자세한 디버그 정보를 표시합니다" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "GStreamer 선택 사항 보이기" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "오류: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "플러그인 설치가 중단되었습니다." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "'%s' 폴더를 만들 수가 없습니다." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer 오류:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "알 수 없는 앨범" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "알 수 없는 아티스트" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "모든 파일들" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "오류: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "트랙 번호 - 제목" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "트랙 제목" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "사용자 파일이름 지정" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "아티스트-앨범" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "사용 가능한 양식:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "파일 열기" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "폴더 추가..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "변환 준비 중..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "변환 중" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "취소됨" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "잠시 멈춤" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d 남음" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "" soundconverter-4.0.5/po/lt.po000066400000000000000000000317141460501237000162010ustar00rootroot00000000000000# Lithuanian translation for soundconverter # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Moo \n" "Language-Team: Lithuanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: lt\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Garso keitiklis" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Garso formatų keitiklis" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Konvertuoja garso failus į kitus formatus" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME įgalintas garso konvertavimas" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Interneto svetainė" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialogas1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtras " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Klaida" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Failas jau yra" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Perrašyti" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "P_raleisti" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Failas jau yra\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "T_aikyti visai eilei" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "atlikėjas/albumas" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "atlikėjas - albumas" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Labai žema" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Žema" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normali" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Aukšta" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Labai aukšta" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Beprotiškai aukšta" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bitai (labai žema kokybė)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bitų (numatytasis)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bitai" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Mažesnis (Greičiau)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Numatytasis" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Geresnis (Lėčiau)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Pastovi (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Vidutinė (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Kintamoji (VBR) - Geriausia kokybė" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC nenuostolingasis (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME garso įrašų profilis" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "takelio_numeris - takelio_pavadinimas" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "takelio_pavadinimas" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Nuostatos" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Į pradinio failo aplanką" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Pasirinkti..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Į nurodytą aplanką" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Sukurti poaplankius: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Ištrinti pradinį failą" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Kur įrašyti galutinius failus?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Failo pavadinimo šablonas: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Pakeisti visus netaisyklingus simbolius" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Šalinti visus simbolius išskyrus raides, skaičius ir ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Failo pavadinimo pavyzdys:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Kaip pavadinti failus?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formatas: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kokybė:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Naudoti .oga plėtinį" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Pralaidumo veiksena:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Glaudinimas:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Ėminių plotis:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profilis:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Galutinių failų tipas?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Keisti skaitmeninimo dažnį" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Priverstinė mono išvestis" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Riboti lygiagrečių užduočių skaičių" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Nėra MP3 koduotuvo" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Perskaitykite kaip įdiegti" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Kur įrašyti galutinius failus?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Failas" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Taisyti" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "Ž_inynas" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Pridėti failą" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "P_ridėti aplanką" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Konvertuoti komandų veiksenoje, iš komandinės eilutės, be grafinės\n" "naudotojo sąsajos. Tai galite naudoti, tarkime, apvalkalo scenarijuose." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Vietoj to, kad konvertuoti įvesties failus, rodyti jų žymes. Tai nurodo \n" "komandų eilutės komandų veikseną ir išjungia grafinę naudotojo sąsają." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Nustatyti komandų veiksenos išvesties MIME tipą. Numatytasis yra %s. " "Turėkite omenyje, kad jūs tikriausiai norėsite taip pat nustatyti ir " "išvesties povardį." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Elgtis tyliai. Rašyti ne normalią išvestį, o tik klaidas." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Rodyti papildomą derinimo informaciją" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Nustatyti komandų veiksenos išvesties failo pavadinimo povardį. Numatytasis " "yra %s. Turėkite omenyje,\n" "kad povardis neįtakoja galutinį MIME tipą." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Priverstinis lygiagrečių konvertavimų skaičius." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Rodo GStreamer parinktis" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Klaida: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Įskiepio diegimas nutrauktas." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Nepavyko sukurti aplanko '%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer klaida:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Konvertavimas atliktas per %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Nežinomas albumas" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Nežinomas atlikėjas" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Visi failai" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Klaida: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Taip pat kaip ir pradinius failus, tik pakeisti povardį" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Taip pat kaip ir pradinius failus, tik be papildomo povardžio" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Takelio numeris - pavadinimas" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Takelio pavadinimas" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Atlikėjas - pavadinimas" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Pasirinktinas failo pavadinimo šablonas" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "atlikėjas - albumas" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Prieinami šablonai:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Į aplanką %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Galutinis pralaidumas: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Atverti failą" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Pridėkite aplanką..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Ruošiamas konvertavimas..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Konvertuojama" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Atšaukta" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pristabdyta" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "Liko %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Pasiruošta" soundconverter-4.0.5/po/lv.po000066400000000000000000000315241460501237000162020ustar00rootroot00000000000000# Latvian translation for soundconverter # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2011. # Rūdolfs Mazurs , 2012. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Latviešu \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Skaņas pārveidotājs" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Audio formātu pārveidotājs" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Pārveido audio datnes citos formātos" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Uz GNOME pamata veidots skaņas pārveidotājs" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Tīmekļa vietne" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialogs1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtrs " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Kļūda" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Tāda datne jau eksistē" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Pārrakstīt" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Izlai_st" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Tāda datne jau eksistē\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Attiecināt uz visiem" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "izpildītājs/albums" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "izpildītājs - albums" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Ļoti zema" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Zema" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normāla" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Augsta" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Ļoti augsta" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Ārkārtīgi augsta" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 biti (ļoti zema kvalitāte)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 biti (noklusējuma)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 biti" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Maza (ātrāk)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Noklusējuma" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Labāka (lēnāk)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstants (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Vidējs (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Mainīgs (VBR) - labākā kvalitāte" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC bezzudumu (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME audio profils" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "celiņa_numurs - celiņa_nosaukums" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "celiņa_nosaukums" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Iestatījumi" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Tajā pat mapē, kur ir ievades datnes" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Izvēlēties..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Norādītajā mapē" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Izveidot apakšmapes: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Dzēst oriģinālo datni" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Kur novietot rezultātu?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Datnes nosaukuma raksts: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Aizvietot visas neatbilstīgās rakstzīmes" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Izņemt visas rakstzīmes, izņemto burtus, ciparus un ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Datnes nosaukuma piemērs:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Kā nosaukt datnes?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formāts: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalitāte:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Lietot .oga paplašinājumu" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitu ātrums:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Saspiešana:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Parauga platums:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profils:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profils" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Rezultāta tips?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Mainīt nolases biežumu" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Uzspiest mono izvadi" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Ierobežot paralēlo darbu skaitu" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Nav pieejams MP3 kodētājs." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Kā instalēt" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Kur novietot rezultātu?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Datne" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "R_ediģēt" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Palīdzība" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "Pievienot d_atni" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Pievienot _mapi" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Konvertēt pakešu režīmā, no komandrindas bez grafiskas saskarnes.\n" "Jūs varat to izmantot, teiksim, no čaulu skriptiem." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Rādīt birkas ievades datnēm nevis tos pārveidot. Tas norāda\n" "komandrindas pakešu režīmu un deaktivē grafisko saskarni." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Iestatīt izvades MIME tipu pakešu režīmam. Noklusējuma ir %s. Ņemiet vērā, " "ka visdrīzāk vajadzētu iestatīt ari izvades sufiksu." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Būt klusam. Neizvadīt parasto izvadi, tikai kļūdas." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Rādīt papildu atkļūdošanas informāciju" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Iestatīt izvades datnes nosaukumu sufiksu pakešu režīmā. Noklusējuma ir %s. " "Ņemiet vērā, ka sufiks \n" "neietekmē izvades MIME tipu." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Piespiedu vienlaicīgo pārveidošanu skaits." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Rāda GStreamer opcijas" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Kļūda: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Spraudņa instalēšana tika apturēta." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Nevar izveidot mapi “%s”." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer kļūda:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Pārveidošana ir pabeigta %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Nezināms albums" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Nezināms izpildītājs" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Visas datnes" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Kļūda: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Tāds pats kā ievade, bet aizvieto sufiksu" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Tāds pats kā ievade, bet ar papildu sufiksu" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Celiņa numurs - nosaukums" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Celiņa nosaukums" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Izpildītājs - nosaukums" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Pielāgots datnes nosaukuma raksts" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "izpildītājs-albums" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Pieejamie raksti:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Mapē %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Mērķa bitu ātrums: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Atvērt datni" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Pievienot mapi..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Sagatavo pārveidošanu..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Pārveido" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Atcelts" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pauzēts" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d ir atlicis" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Gatavs" soundconverter-4.0.5/po/ml.po000066400000000000000000000241661460501237000161750ustar00rootroot00000000000000# Malayalam translation for soundconverter # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2015-12-03 06:38+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Malayalam \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: ml\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "" #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "" #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "" #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "" #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "" soundconverter-4.0.5/po/ms.po000066400000000000000000000310631460501237000161760ustar00rootroot00000000000000# Malay translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Malay \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: ms\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Penukar Bunyi" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Penukar Format Audio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Tukar fail audio kepada format lain" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Penukar Bunyi Dikuasakan-GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Laman Sesawang" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Penapis " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Ralat" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Fail telah wujud" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Tulis-Ganti" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Langkau" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Fail telah wujud\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "L_aksanakan keseluruhan baris gilir" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artis/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artis - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Sangat Rendah" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Rendah" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Biasa" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Tinggi" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Sangat Tinggi" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Terlalui Tinggi" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bit (kualiti sangat rendah)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bit (lalai)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Kurang (Lebih Pantas)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Lalai" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Lebih Baik (Lebih Perlahan)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Malar (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Putara (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Pembolehubah (VBR) - Kualiti terbaik" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Tak Hilang (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "Wave MS (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Profil Audio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "nombor_trek - tajuk_trek" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "tajuk_trek" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Keutamaan" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Folder yang serupa sebagai fail input" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Pilih..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Ke dalam folder yang dinyatakan" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Cipta subfolder: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Buang fail asal" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Manakah hendak letakkan hasil ?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Corak nama fail: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Gantikan semua aksara yang berselerak" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Buang semua aksara kecuali huruf, digit dan ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Nama fail contoh:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Bagaimana hendak menamakan fail ini ?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kualiti:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Guna sambungan .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Mod kadar bit:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Pemampatan:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Lebar sampel:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "profil-gst" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Jenis hasil?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Sampel semula" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Paksa output mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Bilangan had bagi kerja selari" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Pengekod MP3 tidak hadir." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Baca bagaimana hendak dipasang" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Manakah hendak meletakkan hasil?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Penukar Bunyi" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fail" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Sunting" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Bantuan" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Tambah Fail" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Tambah _Folder" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Tukar dalam mod kelumpok, daria baris perintah, tanpa antaramuka\n" " pengguna. Anda boleh guna ini daripada skrip shell." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Papar tag bagi fail input selain dari menukarkannya. Ini menunjukkan \n" "mod kelumpok baris perintah dan lumpuhkan antaramuka pengguna\n" "bergrafik." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Tetapkan jenis MIME output untuk mod kelumpok. Lalai ialah %s. Perhatian, " "anda kemungkinan hendak tetapkan akhiran output juga." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Senyap. Jangan tulis output biasa, hanya ralat." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Papar maklumat nyahpepijat tambahan" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Tetapkan akhiran nama fail output untuk mod kelumpok. Lalai ialah %s. " "Perhatian akhiran tidak memberi\n" " kesan pada jenis MIME output." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Paksa bilangan penukaran serentak." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Papar Pilihan GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Ralat: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Pemasangan pemalam dihenti paksa." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Tidak dapat cipta folder '%s'" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Ralat GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Penukaran selesai dalam %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Album Tidak Diketahui" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artis Tidak Diketahui" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Semua fail" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Ralat: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Sama seperti input, tetapi menggantikan akhiran" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Sama seperti input, tetapi dengan akhiran tambahan" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Nombor trek - tajuk" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Tajuk Trek" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artis - tajuk" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Corak nama fail suai" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artis-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Corak tersedia:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Ke dalam folder %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Kadar bit sasaran: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Buka fail" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Tambah Folder..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Menyediakan penukaran..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Menukar" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Dibatalkan" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Dijeda" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d berbaki" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Sedia" soundconverter-4.0.5/po/nb.po000066400000000000000000000307271460501237000161640ustar00rootroot00000000000000# Norwegian Bokmal translation for soundconverter # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Norwegian Bokmal \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: nb\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Lydkonvertering" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Lydformat-konvertering" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Konverterer lydfiler til andre formater" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME-drevet lydkonvertering" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Nettside" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Feil" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Fil finnes allerede" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Overskriv" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Hopp over" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Fil finnes allerede\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Bruk på hele køen" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artist/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artist - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Veldig lav" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Lav" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Høy" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Veldig høy" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Latterlig høy" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bit (veldig lav kvalitet)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (standard)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32-bit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Mindre (raskere)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Standard" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Bedre (treigere)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Gjennomsnittlig (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variabel (VBR) - best kvalitet" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME Audio Profile" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "spornummer - sportittel" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "sportittel" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Innstillinger" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Samme mappe som inndatafil" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Velg …" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "I valgt mappe" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Lag undermapper: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Slett opprinnelig fil" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Hvor skal resultater plasseres?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Filnavn-mønster: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Erstatt rotete tegn" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Eksempel på filnavn:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Hvordan skal filer navngis?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalitet:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Bruk «.oga»-filetternavn" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitfrekvens-modus:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Komprimering:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Sample-bredde:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profil" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Hvilken type resultat?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Re-sample" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Tving mono-utdata" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Begrens antall paralelle jobber" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3-kodeprogram mangler." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Les hvordan dette kan installeres" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Hvor skal resultater plasseres?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Lydkonvertering" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fil" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Rediger" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Hjelp" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Legg til fil" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Legg til _mappe" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Konverter bunt fra kommandolinja, uten grafisk brukergrensesnitt.\n" " Du kan f.eks. bruke dette til å konvertere via skallskript." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Vis tagger i inndatafiler i stedet for å konvertere dem. Dette trigger \n" " kommandolinjemodus, og slår av grafisk brukergrensesnitt." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Velg MIME-type for utdata i buntmodus. Standardverdi er %s. Du bør også " "vurdere å velge utdata-suffiks." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Vær stille. Ikke skriv ut vanlig utdata, kun feilmeldinger." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Viser ekstra feilsøkingsinformasjon" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Velg filnavn-suffiks for utdata i buntmodus. Standardverdi er %s . Dette " "suffikset påvirker ikke \n" "MIME-typen i utdata." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Tving antall samtidige konverteringer." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Vis GStreamer-valg" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Feil: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Installasjon av programtillegg avbrutt." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Klarte ikke å opprette mappa «%s»." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer-feil:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Konvertering fullført i løpet av %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Ukjent album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Ukjent artist" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Alle filer" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Feil %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Samme som inndata, men erstatter suffiks" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Samme som inndata, men med ekstra suffiks" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Spornummer - tittel" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Sportittel" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artist - tittel" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Selvvalgt filnavn-mønster" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artist-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Tilgjengelige mønstre:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "I mappa %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Ønsket bitfrekvens: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Åpne en fil" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Legg til mappe …" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Forbereder konvertering …" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Konverterer" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Avbrutt" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "På pause" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d gjenstår" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Klar" soundconverter-4.0.5/po/nl.po000066400000000000000000000317171460501237000161760ustar00rootroot00000000000000# Dutch Translation of soundconverter # Copyright (C) 2007 The Free Software Foundation, Inc. # This file is distributed under the same license as the Soundconverter package. # Tino Meinen , 2007. # msgid "" msgstr "" "Project-Id-Version: Soundconverter 0.9.7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: rob \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: nl\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Geluidsconverteerder" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Geluidsformaat-converteerder" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Converteert geluidsbestanden naar andere formaten" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Geluidsconverteerder gebaseerd op GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Website" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialoog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Fout" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Bestand bestaat al" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Overschrijven" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Over_slaan" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Bestand bestaat al\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "Op de hele wachtrij _toepassen" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artiest/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artiest - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Zeer laag" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Laag" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normaal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Hoog" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Zeer hoog" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Extreem hoog" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8-bits (zeer lage kwaliteit)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16-bits (standaard)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32-bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Minder (sneller)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Standaard" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Beter (langzamer)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Gemiddeld (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variabel (VBR) – Hoogste kwaliteit" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME-audioprofiel" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "track_nummer - nummer_titel" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "nummer_titel" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Voorkeuren" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Zelfde map als het oorspronkelijke bestand" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Selecteren…" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Naar een specifieke map" # onderliggende/sub mappen #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Submappen aanmaken: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Origineel bestand verwijderen" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Waar moeten de bestanden worden neergezet?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Bestandsnaampatroon: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Problematische tekens vervangen" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Alle tekens verwijderen behalve letters, cijfers en ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Voorbeeld bestandsnaam:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Hoe moeten de bestanden genoemd worden?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formaat: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kwaliteit:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr ".oga-extensie gebruiken" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitsnelheid-modus:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compressie:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Sample-breedte:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profiel:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profiel" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Naar welk formaat converteren?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Hersamplen" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Mono-uitvoer forceren" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Aantal parallelle taken beperken" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Er is geen MP3-encoder geïnstalleerd." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Lees hoe te installeren" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Waar moeten de bestanden worden neergezet?" # titel van het venster, mag hetzelfde blijven #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Bestand" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "Be_werken" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Hulp" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Bestand toevoegen" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "_Map toevoegen" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Converteren in batch-modus, vanaf de opdrachtregel, zonder grafische\n" "interface. U kunt dit bijvoorbeeld gebruiken in shell-scripts." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Toon labels voor de oorspronkelijke bestanden in plaats van deze te " "converteren \n" " Dit betekent de opdrachtregel batch-modus zonder grafische interface." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Stel het MIME-type in voor het doelbestand in de batch-modus. Standaard is " "dit %s . Merk op, dat u waarschijnlijk ook de extensie van het doelbestand " "wilt instellen." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Stille modus. Niet de normale uitvoer tonen, alleen de fouten." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Toont extra foutinformatie" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Stel de extensie in voor het doelbestand in de batch-modus. Standaard is dit " "%s . Merk op dat de extensie\n" " geen effect heeft op het MIME-type van het doelbestand." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Aantal gelijktijdige conversies forceren." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Toont GStreamer-opties" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Fout: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Installatie plug-in afgebroken." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Kan de map ‘%s’ niet aanmaken." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer-fout:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversie voltooid in %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Onbekend album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Onbekende artiest" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Alle bestanden" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Fout: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Hetzelfde als het origineel, maar extensie vervangen" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Hetzelfde als het origineel, maar extensie toevoegen" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Tracknummer - titel" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Nummertitel" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artiest - titel" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Zelfgemaakt bestandsnaampatroon" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artiest-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Beschikbare patronen:" # waar moeten de bestanden worden neergezet? #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "In de map ‘%s’" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Doelbitsnelheid: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Een bestand openen" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Map toevoegen…" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Conversie voorbereiden…" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Bezig met converteren" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Geannuleerd" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Gepauzeerd" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d resterend" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Klaar" soundconverter-4.0.5/po/oc.po000066400000000000000000000322011460501237000161530ustar00rootroot00000000000000# Occitan (post 1500) translation for soundconverter # Copyright (c) 2023 Rosetta Contributors and Canonical Ltd 2023 # This file is distributed under the same license as the soundconverter package. # Quentin PAGÈS, 2023. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-12-31 17:15+0000\n" "Last-Translator: Quentin PAGÈS \n" "Language-Team: Occitan (post 1500) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: oc\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Convertidor de sons" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Convertidor de format àudio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Convertís de fichièrs àudio en de formats mai" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Convertidor de son propulsat per GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Site Web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtre " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Error" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Lo fichièr existís ja" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Remplaçar" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Ignorar" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Lo fichièr existís ja\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Aplicar a tota la fila" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artista/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artista - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Fòrça bassa" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Febla" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normala" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Elevada" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Fòrça elevada" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Terriblament elevada" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (qualitat plan febla)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (per defaut)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Mens (mai rapid)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Per defaut" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Melhora (mai lenta)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constanta (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Mejana (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variable (VBR) - Melhora qualitat" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC sens pèrda (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Perfil àudio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "numèro_pista - títol_de_la_pista" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "títol_de_la_pista" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferéncias" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Meteis dossièr que lo fichièr d’entrada" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Causir..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Dins un dossièr especific" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Crear un jos dossièr : " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Suprimir lo fichièr original" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Ont plaçar lo resultat ?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Motiu de nom de fichièr : " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Remplaçar totes los caractèrs que marcan mal" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Levar totes los caractèrs levats las letras, chifras e ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Nom de fichièr d’exemple :" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Cossí nomenar los fichièrs ?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format : " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualitat :" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Utilizar l’extension .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Debit binari :" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compression :" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Escandalhatge :" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Perfil :" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "Perfil GST" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Tipe de fichièr en sortida ?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Re-escandalhatge" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forçar la sortida en mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limitar lo nombre de conversion en parallèl" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "L’encodador MP3 es absent." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Legir coma l’installar" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Ont plaçar los fichièrs convertits ?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fichièr" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Edicion" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Ajuda" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Apondre un fichièr" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Apondre un _dossièr" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Convertir en mòde per lòt, a partir de la linha de comanda sens interfàcia\n" "grafica. Podètz utilizar aquò dins de scripts shell." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Mostrar las balisas dels fichièrs fonts a la plaça de los convertir. Aquò\n" "indica lo mòde per lòt a partir de la linha de comanda e desactiva " "l’interfàcia grafica." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Indicar lo MIME tipe de sortida pel mòde per lòt. %s per defaut. Notatz que " "volriatz benlèu tanben configurar lo sufix de sortida." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Silenciós. Escriure pas la sortida normala, sonque las errors." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Mostrar las informacions suplementàrias de desbugatge." #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Indicar lo sufix del fichièr de sortida pel mòde per lòt. %s per defaut. " "Notatz que lo sufix\n" "afècta pas lo MIME tipe de sortida." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Forçar lo nombre de conversions simultanèas." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Aficha las opcions GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Error : %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "Impossible de crear lo dossièr !" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "Error en cambiant lo nom del fichièr !" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "L’installacion de l'empeuton es estat interrompuda." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Creacion impossibla del dossièr « %s »." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Error GStreamer :" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversion acabada dins %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Album desconegut" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artista desconegut" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "Artista Album Títol Pista Total Estil Data Annada Orodatatge" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Totes los fichièrs" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Error : %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "Apondon dels fichièrs..." #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Identic a la font en remplaçant lo sufix" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Identic a la font en ajustant un sufix" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Numèro de posta - títol" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Títol de la pista" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artista - títol" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Motiu personalizat pels noms de fichièrs" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artista-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Motius disponibles :" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Dins lo dossièr %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Debit binari cible : %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Dobrir un fichièr" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Apondre un dossièr..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Preparacion de la conversion..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Conversion" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Annulada" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "En pausa" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d demorant" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Prèst" soundconverter-4.0.5/po/pl.po000066400000000000000000000316621460501237000161770ustar00rootroot00000000000000# Polish translation for soundconverter package. # Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the soundconverter package. # GNOME PL Team , 2005. # Tomasz Sałaciński , 2008. # Piotr Sokół , 2012. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Piotr Strębski \n" "Language-Team: polski <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: pl\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Konwerter dźwięku" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Konwerter formatów dźwięku" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Konwertuje pliki dźwiękowe do innych formatów" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Konwersja dźwięku umożliwiona przez GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Strona internetowa" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtr " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Błąd" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Plik już istnieje" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Zastąp" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Pomiń" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Plik już istnieje\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "Z_astosuj na całej kolejce" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "wykonawca/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "wykonawca - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Bardzo niska" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Niska" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Zwykła" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Wysoka" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Bardzo wysoka" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Niesamowicie wysoka" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8-bitowa (bardzo niska jakość)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16-bitowa (domyślnie)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bity" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Mniej (szybciej)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Domyślnie" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Lepiej (wolniej)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Stałe (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Uśrednione (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Zmienne (VBR) - najlepsza jakość" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC bezstratnie (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Profil dźwięku GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "numer_ścieżki - tytuł_ścieżki" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "tytuł_ścieżki" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferencje" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Ten sam katalog jak plik wejściowy" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Wybierz..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "W określonym katalogu" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Tworzenie podkatalogów: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Usunięcie pierwotnego pliku" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Położenie docelowe" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Wzór nazwy pliku: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Zastąpienie wszystkich nietypowych znaków" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Usuwa wszystkie niedozwolone znaki oprócz liter, cyfr i znaków ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Przykładowa nazwa pliku:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Nazwy plików" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Jakość:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Użycie rozszerzenia .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Tryb tempa transmisji:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Kompresja:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Długość ścieżki" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profil" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Typ pliku docelowego" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Przepróbkowanie" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Wymuszenie dźwięku jednokanałowego" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Ograniczenie ilości równocześnie konwertowanych plików" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Koder MP3 jest niedostępny." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Przeczytaj jak zainstalować" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Położenie docelowe" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Konwerter dźwięku" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Plik" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Edycja" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "Pomo_c" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "Dodaj p_lik" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Dodaj _katalog" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Konwertuje w trybie wsadowym, z wiersza poleceń, bez interfejsu graficznego. " "Przydatne np. w skryptach powłoki." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Wypisuje etykiety plików źródłowych, zamiast konwertowania. Ta opcja " "uruchamia tryb wsadowy wiersza poleceń i wyłącza graficzny interfejs " "użytkownika." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Ustala typ MIME pliku docelowego w trybie wsadowym. Domyślny typ to %s. " "Proszę pamiętać również o ustaleniu rozszerzenia pliku docelowego." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Nie wypisuje żadnych informacji oprócz komunikatów o błędach" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Wypisuje dodatkowe informacje diagnozowania błędów" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Ustala rozszerzenie pliku docelowego w trybie wsadowym. Domyślne " "rozszerzenie to %s. Proszę pamiętać, że rozszerzenie nie ma wpływu na typ " "MIME pliku docelowego." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Wymusza ilość bieżąco konwertowanych plików" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Wypisuje opcje GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "błąd: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Przerwano instalowanie wtyczki." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Nie można utworzyć katalogu „%s”." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Błąg GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Konwersja ukończona w %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Nieznany album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Nieznany wykonawca" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Wszystkie pliki" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Błąd: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Nazwa źródłowa z nowym rozszerzeniem" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Nazwa źródłowa z dodatkowym rozszerzeniem" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Numer ścieżki - tytuł" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Tytuł" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Wykonawca - tytuł" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Własny wzór nazwy pliku" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "wykonawca-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Dostępne wzory:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Katalog %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Docelowe tempo transmisji: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Otwórz plik" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Dodaj katalog..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Przygotowywanie konwersji..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Konwertowanie" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Anulowano" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Wstrzymano" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "pozostało %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Gotowy" soundconverter-4.0.5/po/pt.po000066400000000000000000000304321460501237000162010ustar00rootroot00000000000000# Portuguese translation for soundconverter # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2010. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: pt\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Conversor de som" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Conversos de formatos áudio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Converte os ficheiros de áudio em diversos formatos" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversão de com para GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Site" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "diálogo1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtro " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Erro" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "O ficheiro já existe" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "S_obrepor" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Ignorar" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "O ficheiro já existe\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Aplicar a todos os ficheiros na fila" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artista/álbum" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artista - álbum" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Muito baixa" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Baixa" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Alta" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Muito alta" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Extremamente alta" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (qualidade muito baixa)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (padrão)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Pior (rápido)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Padrão" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Melhor (lento)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constante (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Média (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variável (VBR) - Melhor qualidade" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Perfil de áudio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "número_da_faixa - título_da_faixa" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "título_da_faixa" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferências" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Utilizar a pasta de origem" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Escolher..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Para uma pasta específica" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Criar sub-pastas: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Apagar o ficheiro original" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Onde colocar os resultados?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Padrão para o nome do ficheiro: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Substituir os caracteres confusos" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Remover todos os caracteres exceto letras, dígitos e ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Examplo do nome do ficheiro:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Como nomear os ficheiros?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formato: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualidade:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Utilizar extensão .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Taxa de dados:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compressão:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Frequência:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Perfil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Tipo de resultado?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Reamostragem" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Impor mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limitar número de tarefas simultâneas" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "O codificador de MP3 não está presente." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Ler o método de instalação" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Onde colocar os resultados?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Ficheiro" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Editar" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "Aj_uda" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Adicionar ficheiro" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Adicionar _pasta" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Conversão em lote, a partir da linha de comandos, sem a interface gráfica.\n" " Pode ser utilizado, por exemplo, em scripts de consola." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Silencioso. Não escrever detalhes de saída mas sim erros." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Mostrar informaçção detalhada para depuração" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Mostrar opções GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Erro: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Instalação cancelada." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Incapaz de criar a pasta '%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Erro GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversão terminada em %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Álbum desconhecido" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artista desconhecido" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Todos os ficheiros" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Erro: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Igual ao original, mas com outro sufixo" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Igual ao original, mas com um sufixo extra" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Número da faixa - Título" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Título da faixa" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artista - Título" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Padra personalizado para o nome do ficheiro" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artista-álbum" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Padrões existentes:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Para a pasta %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Taxa de dados desejada: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Abrir um ficheiro" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Adicionar uma pasta..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Iniciando conversão..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "A converter" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Cancelada" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Em pausa" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "Faltam %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Pronto" soundconverter-4.0.5/po/pt_BR.po000066400000000000000000000317621460501237000165730ustar00rootroot00000000000000# Portuguese/Brazil translation of soundconverter. # Copyright (C) 2005 THE soundconverter'S COPYRIGHT HOLDER # This file is distributed under the same license as the soundconverter package. # Jonh Wendell , 2006. # , fuzzy # # msgid "" msgstr "" "Project-Id-Version: soundconverter 0.8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Portuguese/Brazil \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Conversor de som" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Conversor de formato de áudio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Converter arquivos de áudio para outros formatos" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversão de áudio por meio do GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Página da Web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "diálogo1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtro " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Erro" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "O arquivo já existe" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "S_obrescrever" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Ignorar" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "O arquivo já existe\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Aplicar para toda lista" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artista/álbum" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artista - álbum" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Muito baixa" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Baixa" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Alta" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Muito alta" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Insanamente alta" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bits (qualidade muito baixa)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bits (padrão)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bits" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Menor (rápido)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Padrão" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Melhor (lento)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constante (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Média (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variável (VBR) - Melhor qualidade" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Sem perdas (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Composição (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Perfil de áudio do GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "_número da faixa - _título da faixa" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "_título da faixa" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Preferências" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Mesma pasta do arquivo de origem" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Escolha..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Para dentro de uma pasta específica" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Criar subpastas: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Apagar o arquivo original" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Onde colocar os resultados?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Padrão para nome de arquivo: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Substituir todos os caracteres desordenados" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Remover todos os caracteres exceto letras, dígitos e ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Exemplo de nome do arquivo:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Como nomear os arquivos?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formato: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Qualidade:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Use a extensão .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Modo da taxa de transferência de bits" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Compressão:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Largura da amostra:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Composição nº" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Perfil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "perfil-gst" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Formato do arquivo resultante?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Refazer amostra" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forçar saída mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Limitar o número de tarefas paralelas" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Codificador de MP3 não está presente." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Leia como instalar" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Onde colocar os resultados?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "ConversorDeSom" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Arquivo" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Editar" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "Aj_uda" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Adicionar arquivo(s)" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Adicionar _Pasta" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Converte em modo de lotes, a partir da linha de comando, sem interface\n" "gráfica. Você pode usar isso, digamos, por meio de shell scripts." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Mostrar tags para os arquivos de entrada ao invés de convertê-los. Isto " "demonstra\n" "a existência de uma linha de comando no modo em lote (batch) e\n" "desativa a interface gráfica de usuário." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Definir a saída do tipo MIME para o modo de lote. O padrão é %s. Note que " "você provavelmente vai querer o sufixo de saída também." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Fique quieto. Não escreve saí­das normais, somente erros." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Mostrar informações adicionais de depuração" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Definir sufixo de arquivo de saída para o modo lote. O padrão é %s. Note que " "o sufixo afeta\n" " e saída do tipo MIME." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Forçar números de conversões simultâneas." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Mostrar opções do GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Erro: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Instalação de plugin abortada." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Não foi pssível criar a pasta '%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Erro no GStreamer" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Conversão concluída em %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Álbum desconhecido" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artista desconhecido" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Todos os arquivos" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Erro: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Mesmo que o original, mas substituindo a extensão" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Mesmo que o original, mas com uma extensão adicional" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Número da faixa - tí­tulo" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Título da faixa" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artista - título" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Personalizar o nome de arquivo padrão" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artista-álbum" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Padrões disponíveis:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Na pasta %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Meta da taxa de transferência de bits: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Abrir um arquivo" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Adicionar pasta..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Preparando conversão..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Convertendo" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Cancelado" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pausado" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d restante" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Pronto" soundconverter-4.0.5/po/ro.po000066400000000000000000000262461460501237000162060ustar00rootroot00000000000000# Romanian translation for soundconverter # Copyright (c) 2019 Rosetta Contributors and Canonical Ltd 2019 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2019. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2019-05-17 09:32+0000\n" "Last-Translator: Cristiana Nicolae \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Convertor de sunet" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Convertor de formate audio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Transformă fișierele audio în alte formate" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Conversie de sunet bazată pe GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Pagină web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "" #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Eroare" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Fișierul există deja" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Suprascrie" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Sări peste" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Fișierul există deja\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Aplică asupra întregii liste" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artist/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artist - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Foarte scăzut" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Scăzut" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Ridicat" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Foarte ridicat" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Extrem de ridicat" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 biți (calitate foarte joasă)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 biți (nivel standard)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 biți" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Mai puțin (Și mai rapid)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Standard" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Mai bun (și mai lent)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Constant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Mediu (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variabilă (VBR) - Cea mai bună calitate" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Profil Audio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "numărul_piesei - titlul_piesei" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "titlul_piesei" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Opţiuni" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Coincide cu dosarul de intrare" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Alege..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "într-un anumit dosar" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "" #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Șterge fișierul original" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Unde să fie plasate rezultatele?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "" #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Înlocuiește toate semnele lipsite de noimă" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Înlătură toate semnele exceptând litere, cifre și ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Examplu de nume de fișier:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Cum să fie numite fișierele?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Calitate:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Fișier" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Editare" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Ajutor" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Adaugă fișier" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Adaugă_Dosar" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "" soundconverter-4.0.5/po/ru.po000066400000000000000000000354251460501237000162130ustar00rootroot00000000000000# translation of ru.po to Russian # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Alexandre Prokoudine , 2006. # Olesya Gerasimenko , 2020. msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Basealt Translation Team\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: ru\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Аудиоконвертер" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Конвертер форматов аудио" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Преобразование звуковых файлов в другие форматы" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Преобразование аудио в GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Веб-сайт" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Фильтр " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Ошибка" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Файл с таким именем уже существует" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Заменить" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Пр_опустить" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Файл с таким именем уже существует\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Применить ко всей очереди" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "исполнитель/альбом" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "исполнитель — альбом" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Очень низкое" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Низкое" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Нормальное" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Высокое" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Очень высокое" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Безумно высокое" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 бит (очень низкое качество)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 бит (по умолчанию)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 бита" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Меньше (быстрее)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "По умолчанию" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Лучше (медленнее)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Постоянный (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Усреднённый (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Переменный (VBR) — лучшее качество" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC, без потерь (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "WAV (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Профиль звука GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "номер_дорожки — название_дорожки" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "название_дорожки" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Параметры" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "В тот же каталог, где находится входящий файл" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Выбрать..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "В указанную папку" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Создать вложенные папки: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Удалить исходный файл" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Куда поместить результат?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Шаблон имени файла: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Заменить все некорректные символы" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Удалить все символы, кроме букв, цифр и ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Пример имени файла:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Как назвать файлы?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Формат: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Качество:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Использовать расширение .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Тип битрейта:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Сжатие:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Разрядность семпла:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Профиль:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Формат конечных файлов" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Изменение частоты" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Принудительный вывод моно" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Ограничить количество параллельных процессов" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3-кодек не найден." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Прочтите, как устанавливать" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Куда поместить результаты?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Файл" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Правка" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Справка" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Добавить файл" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Добавить _папку" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Преобразовывать в пакетном режиме, из командной строки,\n" "без графического пользовательского интерфейса.\n" "Этим можно пользоваться, скажем, в сценариях." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Показывать теги входных файлов вместо их конвертации. Это включает \n" " пакетный режим командной строки и отключает графический интерфейс." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Установить выходной MIME-тип для пакетного режима. По умолчанию %s. " "Заметьте, что вы, возможно, хотите также установить суффикс вывода." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Тихий режим. Сообщать только об ошибках." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Показать дополнительную отладочную информацию." #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Установить суффикс вывода для пакетного режима. По умолчанию %s. Заметьте, " "что суффикс не влияет\n" " на MIME-тип вывода." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Количество одновременных преобразований." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Показывает параметры GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Ошибка: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Установка надстройки прервана." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Невозможно создать папку «%s»." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Ошибка GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Преобразование завершено за %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Неизвестный альбом" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Неизвестный исполнитель" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Все файлы" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Ошибка: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Как во входном файле, но заменяя окончание" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Как во входном файле, но с дополнительным окончанием" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Номер дорожки — название" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Название дорожки" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Исполнитель — название" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Собственный шаблон имени файла" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "исполнитель-альбом" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Имеющиеся шаблоны:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "В папку %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Выходной битрейт: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Открыть файл" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Добавить папку..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Подготовка к конвертации..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Преобразование" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Отменено" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Приостановлено" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "Осталось %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Готово" soundconverter-4.0.5/po/sk.po000066400000000000000000000314231460501237000161740ustar00rootroot00000000000000# Slovak translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Dusan Kazik \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: sk\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Zvukový konvertor" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Prevod formátov zvuku" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Prevádza audio súbory do rôznych formátov" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME prevod zvuku" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Webová stránka" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialóg1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Chyba" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Súbor už existuje" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Prepísať" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Preskočiť" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Súbor už existuje\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Použiť na celú frontu" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "umelec/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "umelec - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Veľmi nízka" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Nízka" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normálna" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Vysoká" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Veľmi vysoká" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Najlepšia" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bitov (veľmi nízka kvalita)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bitov (východzie)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bitov" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Nižšia (rýchlejší)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Bežná" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Vyššia (pomalší)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konštantný (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Priemerný (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Promenlivý (VBR)" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC bezstratový (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME Audio Profil" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "stopa_číslo - stopa_titul" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "stopa_titul" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Predvoľby" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Rovnaká zložka ako pôvodný súbor" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Vybrať..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Do určeného priečinka" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Vytvoriť podpriečinky: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Vymazať pôvodný súbor" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Kam sa majú umiestniť výsledky?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Vzor názvu súboru: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Odstrániť všetky problémové znaky" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Odstrániť všetky zanky okrem písmen, číslic a znakov ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Príklad názvu súboru:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Aký názov majú mať súbory?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formát: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalita:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Použiť príponu .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Mód bitového toku:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Kompresia:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Šírka vzorky:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profil" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Typ výsledku?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Prevzorkovať" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Vynútiť mono výstup" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Obmedziť počet paralelných činností" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 kódovač nie je prítomný." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Čítať ako nainštalovať" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Kam umiestniť výsledky?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Prevod zvuku" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Súbor" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Upraviť" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Pomocník" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Pridať súbor" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Pridať _priečinok" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Previesť v dávkovom režime z príkazového riadku bez grafického rozhrania.\n" " Môžte použiť tento spôsob, povedzme, v shellových skriptoch." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Zobraziť značky (tagy) vstupných súborov namiesto ich prevodu. To znamená \n" " dávkový režim v príkazovom riadku a vypnutia grafického užívateľského " "rozhrania." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Nastaviť výstupný MIME typ dávkovom režime. Predvolená hodnota je %s. " "Pravdepodobne budete chcieť nastaviť výstupný príponu rovnako." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Nevypisovať zvyčajný výstup, len chyby." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Zobraziť dodatkové informácie pre ladenie" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Nastavte výstupnú príponu názvu súboru pre dávkové spracovanie. Predvolená " "je% s. Všimnite si, že prípona nemá vplyv\n" " na výstup MIME typu." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Vynútiť počet súbežných konverzií." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Zobraziť možnosti GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Chyba: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Inštalácia pluginu prerušena." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Nemôžem vytvoriť priečinok '%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer chyba:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Zostáva %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Neznáme album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Neznámy interpret" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Všetky súbory" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Chyba: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Rovnako ako vstupné, ale nahradí príponu" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Rovnako ako vstupné, ale s pridanou príponou" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Číslo stopy - názov" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Názov stopy" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Umelec - názov" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Vlastný názov súboru" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "umelec-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Dostupné vzory:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Do priečinka %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Cieľový bitový tok: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Otvoriť­ súbor" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Pridať priečinok..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Pripravuje sa konverzia..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Konvertujem" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Zrušené" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pozastavené" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "zostáva %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Pripravený" soundconverter-4.0.5/po/sl.po000066400000000000000000000306531460501237000162010ustar00rootroot00000000000000# Slovenian translations for soundconverter. # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 # This file is distributed under the same license as the soundconverter package. # # Andrej Žnidaršič , 2010. # msgid "" msgstr "" "Project-Id-Version: soundconverter master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Slovenian GNOME translation group \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "X-Poedit-Country: SLOVENIA\n" "Language: \n" "X-Poedit-Language: Slovenian\n" "X-Poedit-SourceCharset: utf-8\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Pretvornik zvoka" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Pretvornik zapisov zvoka" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Pretvori zvočne datoteke v druge formate" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Pretvornik zvoka za okolje GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Spletna stran" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "pogovorno okno 1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Napaka" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Datoteka že obstaja" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Prepiši" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Pre_skoči" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Datoteka že obstaja\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Uveljavi za celotno čakalno vrsto predvajanja" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "izvajalec/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "izvajalec - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Zelo nizko" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Nizko" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Običajno" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Visoko" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Zelo visoko" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Izjemno visoko" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bitno (zelo nizka kvaliteta)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bitno (normalno)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bitno" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Manjn (hitreje)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Privzeto" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Bolje (počasneje)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstantno (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Povprečno (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variabilno (VBR) - najboljša kvaliteta" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME Audio Profile" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Možnosti" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Ista mapa kot vhodne datoteke" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Izberite ..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "V navedeno mapo" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Ustvari podmape: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Izbriši izvirno datoteko" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Kje naj bodo ustvarjeni rezultati?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Vzorec imena datoteke: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Zamenjaj vse neustrezne znake" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Odstrani vse znake, razen črk, števil in znakov ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Primer imena datoteke:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Kako naj bodo datoteke poimenovane?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Vrsta: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kakovost:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Uporabi .oga pripono" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Način bitne hitrosti:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Stiskanje" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Vzorčna širina" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Kakšna naj bo vrsta rezultata?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Prevzorči" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Prisili izhod mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Omeji število vzporednih opravil" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Kodirnik MP3 ni prisoten." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Preberite kako namestiti" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Kje naj bodo ustvarjeni rezultati?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Pretvornik zvoka" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Datoteka" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "Ur_edi" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Pomoč" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Dodaj datoteko" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Dodaj _mapo" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Pretvori v paketnemu načinu iz ukazne vrstice brez grafičnega uporabniškega\n" " vmesnika. Možnost je mogoče uporabiti s skripti lupine." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "V tišini. Ne izpiše običajnega izhoda, ampak le napake." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Pokaži dodatne podrobnosti razhroščevanja" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Prisili število hkratnih pogovorov." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Napaka: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Nameščanje vstavka je bilo prekinjeno." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Ni mogoče ustvariti mape '%s'" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer napaka:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Pretvorba bo končana v %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Neznan album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Neznan izvajalec" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Vse datoteke" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Napaka: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Enako kot vhodna, toda zamenja pripono" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Enako kot vhodna, toda z dodatno pripono" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Številka skladbe - naslov" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Naslov skladbe" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Izvajalec - naslov" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Vzorec imen datotek po meri" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "izvajalec - album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Razpoložljivi vzorci:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "V mapo %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Ciljna bitna hitrost: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Odpri datoteko" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Dodaj mapo ..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Poteka pripravljanje na pretvorbo ..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Pretvarjanje" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Preklicano" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "V premoru" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d preostalo" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Pripravljeno" soundconverter-4.0.5/po/sq.po000066400000000000000000000276011460501237000162050ustar00rootroot00000000000000# Albanian translation for soundconverter # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Indrit Bashkimi \n" "Language-Team: Albanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: sq\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Konvertues formatesh audio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Konverton skedarët audio në formate të tjera" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Faqja web" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtri " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Gabim" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Skedari ekziston tashmë" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Mbishkruaj" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Tejkalo" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Skedari tashmë ekziston\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Zbato për të gjithë radhën" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artisti/albumi" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artisti - albumi" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Shumë e ulët" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "E ulët" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normale" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "E lartë" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Shumë e lartë" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Tepër e lartë" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bit (cilësi shumë e ulët)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bit (parazgjedhje)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Më pak (I shpejtë)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Parazgjedhje" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Më shumë (I ngadaltë)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Mesatar (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "I ndryshueshëm (VBR) - Cilësi më e mirë" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Profil Audio GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Parapëlqimet" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Në të njëjtën dosje si skedari në input" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Zgjidhni..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Në një dosje të përcaktuar" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Krijo nëndosje: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Fshije dosjen origjinare" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Ku të vendosen rezultatet?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Modeli për emrat e skedarëve: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Zëvendëso të gjitha shkronjat e parregullta" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Shembulli i emrit të skedarin:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Si të emërohen skedarët?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Formati: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Cilësia:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Përdor prapashtesën .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Ngjeshja:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Amplituda e kompionimit:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profili:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Lloji i rezultatit?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Forco daljen mono" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Kufizo numrin e proceseve paralelë" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Kodifikuesi MP3 nuk është i pranishëm." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Ku të vendosen rezultatet?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Skedari" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Ndrysho" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Ndihmë" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Shto skedar" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Shto _dosje" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Forco numrin e konvertimeve të njëkohshëm." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Shfaq opsionet e GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Gabim: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Dosja '%s' nuk mund të krijohet." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Gabim i GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Konvertimi mbaroi në %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Album i panjohur" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Artist i panjohur" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Të gjithë skedarët" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Gabim: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Si input-i, por duke ndryshuar prapashtesën" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Si input-i, por me një prapashtesë më tepër" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artisti - titulli" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Ndrysho sipas dëshirës modelin e emrit të skedarit" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artisti-albumi" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Modelet e disponueshme:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Në dosjen %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Hap një skedar" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Shto dosje..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Duke përgatitur konvertimin..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Duke konvertuar" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "U anulua" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d kohë e mbetur" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Gati" soundconverter-4.0.5/po/sr.po000066400000000000000000000354131460501237000162060ustar00rootroot00000000000000# Serbian translation of Soundconverter. # Courtesy of Prevod.org team (http://prevod.org/) -- 2007. # This file is distributed under the same license as the Soundconverter package. # Miloš Popović , 2007. # Мирослав Николић , 2011—2016. msgid "" msgstr "" "Project-Id-Version: Prekoder zvuka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: sr\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Претварач звука" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Претварач звучног записа" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Претварајте звучне датотеке у друге записе" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Гномово претварање звука" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Веб страница" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "дијалог1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Издвој " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Грешка" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Датотека већ постоји" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "Пре_пиши" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Пре_скочи" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Датотека већ постоји\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "Примени на _све датотеке" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "извођач/албум" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "извођач — албум" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Врло низак" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Низак" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Нормалан" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Висок" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Врло висок" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Нездраво висок" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 бита (врло лош квалитет)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 бита (основно)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 бита" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Мање (брже)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Основно" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Боље (спорије)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Стални (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Просечни (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Променљиви (VBR) — најбољи квалитет" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Огг Ворбис (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "МП3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "ФЛАК без губитака (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "МС звук (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "ААK (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Опус (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Гномов профил звука" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "број_нумере — наслов_нумере" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "наслов_нумере" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Поставке" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "У истој фасцикли улазне датотеке" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Изабери..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "У наведеној фасцикли" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Направи подфасцикле: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Уклони изворне датотеке" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Где ће бити смештени резултати?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Образац назива датотеке: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Замени све лоше знаке" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Уклони све знаке осим слова, цифара и ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Пример назива датотеке:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Како ће бити именоване датотеке?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Запис: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Квалитет:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Користи „.oga“ проширење" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Огг" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Проток бита:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "МП3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Сажимање:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "ФЛАК" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Величина узорка:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "ВејВ" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "ААК" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Опус" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Профил:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "гст-профил" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Која ће бити врста резултата?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Поново узоркуј на" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Присили моно излаз" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Ограничи број истовремених послова" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "МП3 енкодер није присутан." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Прочитајте како да га инсталирате" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Где да сместим резултате?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Претварач звука" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Датотека" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Уређивање" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "По_моћ" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "Додај _датотеку" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Додај _фасциклу" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Претвара у групном режиму, из линије наредби, без графичког корисничког " "окружења.\n" " Ово можете да користите, рецимо, из скрипти шкољке." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Приказује ознаке улазних датотека уместо да их претвара. Ово показује \n" " групни режим линије наредби и искључује графичко сучеље корисника." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Поставља излазну МИМЕ врсту за групни режим. Основно је %s. Знајте да ћете " "највероватније желети да поставите излазни суфикс у сваком случају." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Ради тихо. Не исписује нормалне резултате, само грешке." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Приказује додатне податке за уклањање грешака" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Поставља суфикс назива излазне датотеке за групни режим. Основно је %s. " "Знајте да суфикс не утиче на\n" " излазну МИМЕ врсту." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Присиљава број конкурентних претварања." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Приказује опције Гстримера" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Грешка: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Инсталирање прикључка је прекинуто." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Не могу да направим фасциклу „%s“." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Грешка Гстримера:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Претварање је обављено за %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Непознат албум" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Непознат извођач" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Све датотеке" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Грешка: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Исто као улазна, али замени суфикс" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Исто као улазна, али са додатним суфиксом" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Број нумере — наслов" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Наслов нумере" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Извођач — наслов" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Произвољни образац назива датотеке" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "извођач-албум" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Доступни обрасци:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "У фасциклу „%s“" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Циљни проток: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Отворите датотеку" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Додајте фасциклу..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Припремам претварање..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Претварам" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Отказано" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Заустављено" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "преостало време: %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Спреман сам и чекам ♫ ♫" soundconverter-4.0.5/po/sr@Latn.po000066400000000000000000000256151460501237000171300ustar00rootroot00000000000000# Serbian translation of Soundconverter. # Courtesy of Prevod.org team (http://prevod.org/) -- 2007. # # This file is distributed under the same license as the Soundconverter package. # # Miloš Popović , 2007. # msgid "" msgstr "" "Project-Id-Version: Prekoder zvuka\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Serbian (sr) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Prekoder zvuka" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Prekodiranje zvučnih formata" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dijalog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Greška" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Datoteka već postoji" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "P_repiši" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Pr_eskoči" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Datoteka već postoji\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Primeni na ceo unos" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "izvođač/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "izvođač — album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Postavke" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Izaberi..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "U izabranu fasciklu" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Napravi pod-direktorijume: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Ukloni originalne datoteke" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Gde da smestim izlaz?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Šablon imena: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Zameni sve loše karaktere" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Primer imena datoteke:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Kako da krstim datoteke?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalitet:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitski protok:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Tip izlaza?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 koder nije dostupan." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Pročitaj kako da instaliram" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Gde sa smestim izlaz?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Prekodiranje Zvuka" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Dodaj datoteku" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Dodaj _fasciklu" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Prekodiraj u konzolnom modu, iz komandne linije, bez grafičkog okruženja\n" " Možete na primer koristiti ova mod za pisanje skripta." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Radi tiho. Ne ispisuj normalni izlaz već samo greške." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "" soundconverter-4.0.5/po/sr@latin.po000066400000000000000000000275561460501237000173470ustar00rootroot00000000000000# Serbian translation of Soundconverter. # Courtesy of Prevod.org team (http://prevod.org/) -- 2007. # # This file is distributed under the same license as the Soundconverter package. # # Miloš Popović , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Serbian (sr) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Prekoder zvuka" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Prekodiranje zvučnih formata" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Konvertuje audio fajlove u druge formate" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Web sajt" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dijalog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Greška" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Datoteka već postoji" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "P_repiši" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Pr_eskoči" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Datoteka već postoji\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Primeni na ceo unos" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "izvođač/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "izvođač — album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Vrlo nisko" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Nisko" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normalno" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Visoko" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Vrlo visoko" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Nenormalno visoko" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bita (veoma loš kvalitet)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bita (uobičajeno)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bita" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Manje (Brže)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Podrazumevano" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Bolje (Sporije)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstantno (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Usrednjeno (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Promenjivo (VBR) - najbolji kvalitet" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Gnome audio profil" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "broj_pesme-naziv_pesme" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "naziv_pesme" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Postavke" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Izaberi..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "U izabranu fasciklu" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Napravi poddirektorijume: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Ukloni originalne datoteke" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Gde da smestim izlaz?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Šablon za naziv datoteke: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Zameni sve loše karaktere" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Ukloni sve karaktere osim slova, cifri i ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Primer imena datoteke:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Kako da krstim datoteke?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalitet:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Koristi .oga ekstenziju" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bitski protok:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Kompresija:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Vrsta izlaza?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 koder nije dostupan." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Pročitaj kako da instaliram" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Gde sa smestim izlaz?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Prekodiranje Zvuka" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Datoteka" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Uredi" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Pomoć" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Dodaj datoteku" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Dodaj _fasciklu" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Prekodira u konzolnom režimu, iz komandne linije, bez grafičkog okruženja\n" " Možete na primer koristiti ovaj mod za pisanje skripti." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Radi tiho. Ne ispisuje normalni izlaz već samo greške." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Greška: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Ne mogu da napravim fasciklu „%s“." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Nepoznat album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Nepoznat izvođač" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Svi fajlovi" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Isto kao i na ulazu, ali zameni sufiks" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Isto kao i na ulazu, ali sa dodatnim sifuksom" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Broj numere — naslov" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Naziv pesme" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Izvođač — naslov" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Proizvoljan šablon imena datoteke" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "izvođač-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Dostupni šabloni:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "U fasciklu %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Izlazni bitski protok: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Otvori fajl" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Dodaj fasciklu..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Priprema konvetovanja..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Prekodiram" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Prekinuto" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pauzirano" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d preostalo" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Spreman" soundconverter-4.0.5/po/sv.po000066400000000000000000000300121460501237000162000ustar00rootroot00000000000000# Swedish translation of soundconverter. # Copyright (C) 2006 THE soundconverter'S COPYRIGHT HOLDER # This file is distributed under the same license as the soundconverter package. # Daniel Nylander , 2006, 2008. # # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: sv\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Ljudkonverterare" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Ljudformatskonverterare" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Konverterar ljudfiler till andra format" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME-driven Ljudkonverterare" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Webbplats" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filter " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Fel" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Filen finns redan" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Skriv över" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Hoppa över" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Filen finns redan\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Verkställ för hela kön" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "artist/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "artist - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Mycket låg" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Låg" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Hög" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Mycket hög" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Vansinnigt hög" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bitar (mycket låg kvalitet)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bitar (förvalt värde)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bitar" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Mindre (snabbare)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Standard" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Bättre (långsammare)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Konstant (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Medel (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Variabel (VBR) - bäst kvalitet" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Lossless (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME Audio Profile" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "track_number - track_title" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "track_title" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Inställningar" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Samma mapp som indatafilen" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Välj..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "I en angiven mapp" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Skapa undermappar: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Ta bort originalfilen" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Var ska resultaten placeras?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Filnamnsmönster: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Ersätt felaktiga tecken" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Exempel filnamn:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Hur ska filer namnges?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Format: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kvalitet:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Använd .oga-filändelse" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bithastighetsläge:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Komprimering:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Samplingsbredd:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profil" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Typ av resultat?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Sampla om" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Tvinga mono-output" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Begränsa antalet parallella jobb" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3-kodare finns inte installerad." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Läs hur man installerar" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Var ska resultaten placeras?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Ljudkonverterare" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Arkiv" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "R_edigera" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Hjälp" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Lägg till fil" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Lägg till _mapp" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Konvertera i satsläge, från kommandorad, utan ett grafiskt gränssnitt.\n" " Du kan använda detta, till exempel från skalskript." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Var tyst. Skriv endast ut fel." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Visar ytterligare felsökningsinformation" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Tvinga antalet samtidiga konverteringar." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Visar alternativ för GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Fel: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Kan inte skapa mappen \"%s\"." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer-fel:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Okänt album" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Okänd artist" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Alla filer" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Fel: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Samma som inmatning, men ersätter filändelsen" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Samma som inmatning, men med en filändelse till" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Spårnummer - titel" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Artist - titel" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Anpassat filnamnsmönster" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "artist-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Tillgängliga mönster:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "I mappen %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Målets bitfrekvens: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Öppna en fil" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Lägg till mapp..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Konverterar" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Avbruten" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Pausad" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d kvar" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Redo" soundconverter-4.0.5/po/te.po000066400000000000000000000257331460501237000161760ustar00rootroot00000000000000# Telugu translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2015-12-03 06:38+0000\n" "Last-Translator: Praveen Illa \n" "Language-Team: Telugu \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: te\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "శబ్ద పరివర్తకం" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "ఆడియో ఆకృతి పరివర్తకం" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "జాలస్థలి" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "" #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "దోషం" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "చెరిపివ్రాయి (_O)" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "దాటవేయి (_S)" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "ఈ ఫైల్ ముందే ఉంది\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "సాధారణం" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "అభిరుచులు" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "ఎంపిక చేయండి..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "" #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "ఈ ఫలితాలను ఎకాడ పెటాలి ?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "" #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "ఫైల్ నమకరనముకు ఉదాహరణ:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "రకము : " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "నాణ్యత:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "ఎం పి ౩" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "ఎఫ్ఎల్ఏసి" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "ఎం పి ౩ మార్చేది కనపడుట లేదు" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "దోషము: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "" #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "మార్చివేయడం జరుగుతుంది" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "రద్దుచేయబడినది" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "నిలుపబడింది" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d మిగిలింది" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "సిద్దము" soundconverter-4.0.5/po/tr.po000066400000000000000000000310161460501237000162020ustar00rootroot00000000000000# Turkish translation for soundconverter # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2008. # Mehmet Altan Pire , 2011. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2024-01-16 00:15+0000\n" "Last-Translator: Sabri Ünal \n" "Language-Team: Turkish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: tr\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Ses Dönüştürücü" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Ses Biçimi Dönüştürücü" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Ses dosyalarını diğer biçimlere dönüştürür" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Gnome tabanlı Ses Dönüştürme" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "İnternet Sitesi" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "iletişim1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Filtre " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Hata" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Dosya zaten var" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Üzerine yaz" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Atla" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Dosya zaten var\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "Tüm kuyruğa uygul_a" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "sanatçı/albüm" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "sanatçı - albüm" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Çok Düşük" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Düşük" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Normal" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Yüksek" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Çok Yüksek" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Delicesine Yüksek" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bit (çok düşük kalite)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 bit (varsayılan)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 bit" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Daha Az (Daha Hızlı)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Varsayılan" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Daha İyi (Daha Yavaş)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Sabit (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Ortalama (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Değişken (VBR) - En İyi Kalite" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC Kayıpsız (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME Ses Profili" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "track_number - track_title" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "track_title" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Tercihler" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Girdi dosyasıyla aynı klasör" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Seçiniz..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Belirtilmiş bir dosyaya" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Alt klasörleri oluştur: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Özgün dosyayı sil" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Sonuçlar nereye yerleştirilecek?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Dosya adı kalıbı: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Tüm garip karakterleri kaldır" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Harfler, rakamlar ve ./_- dışındaki tüm karakterleri kaldır" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Örnek dosya adı:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Dosyalar nasıl adlandırılacak?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Biçim: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Kalite:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr ".oga uzantısını kullan" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Bir oran kipi:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Sıkıştırma:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Örnek genişliği:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Profil:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Sonuç türü?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Tekrar örnekle" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Tekli (mono) çıkışa zorla" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Paralel iş sayısını sınırla" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "MP3 şifreleyici belirtilmedi" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Nasıl kurulacağını okuyun" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Sonuçlar nereye yerleştirilsin?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "Ses Dönüştürücü" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "_Dosya" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "_Düzenle" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "_Yardım" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "Dosya _Ekle" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Klasör _Ekle" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Sıralı dönüştürme kipi, komut satırından, grafiksel kullanıcı arabirimi " "olmaksızın.\n" " Bunu, söyleyin, kabuk komutlarından kullanabilirsiniz." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Sessiz ol. Normal çıktıyı yazma, sadece hataları yaz." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Ek hata ayıklama bilgilerini görüntüler" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Eşzamanlı dönüştürmelerin sayısını zorla." #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "GStreamer Seçeneklerini Gösterir" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Hata: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "Klasör oluşturulamadı!" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "Dosya yeniden adlandırılırken hata!" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Eklenti kurulumu iptal edildi." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "'%s' klasörü yaratılamadı." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer Hatası:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Dönüştürme %s içinde tamamlandı." #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Bilinmeyen Albüm" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Bilinmeyen Sanatçı" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Tüm dosyalar" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Hata: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "Dosyalar ekleniyor..." #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Girdi ile aynı fakat son eki değiştir" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Girdi ile aynı fakat fazladan bir son ek" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Parça numarası - başlık" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Parça başlığı" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Sanatçı - başlık" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Özel dosya adı kalıbı" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "sanatçı-albüm" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Kullanılabilir kalıplar:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "%s klasörüne" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Hedef bit oranı: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Dosya aç" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Dizin Ekle..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Dönüşüm hazırlanıyor..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Çevriliyor" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "İptal Edildi" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Duraklatıldı" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d kaldı" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Hazır" soundconverter-4.0.5/po/uk.po000066400000000000000000000346511460501237000162040ustar00rootroot00000000000000# Ukrainian translation for soundconverter # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: GautierPortet \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: uk\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Конвертер аудіо" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Конвертер аудіоформатів" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "Конвертує звукові файли в інші формати" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "Конвертація звуку в GNOME" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "Вебсайт" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "діалог1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Фільтр " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Помилка" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "Файл вже існує" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "Переписати" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "_Пропустити" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "Файл вже існує\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "_Застосувати до всієї черги" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "виконавець/альбом" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "виконавець - альбом" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "Дуже низька" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "Низька" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "Нормальна" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "Висока" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "Дуже висока" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "Дуже висока" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 біт (дуже низька якість)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 біт (звичайний)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 біт" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "Гірше (швидше)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "Типово" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "Краще (повільніше)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "Сталий (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "Середній (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "Змінний (VBR) - Найкраща якість" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC без втрат (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "MS Wave (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "Аудіопрофіль GNOME" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "номер треку-назва треку" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "назва треку" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Параметри" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "Та сама тека для вихідного файлу" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Виберіть..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "До вказаної теки" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Створювати підтеки: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Вилучати оригінальний файл" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Куди зберігати результат?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Шаблон імені файлу: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Замінити усі неправильні символи" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "Вилучить всі символи, крім букв, цифр та ./_-" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Приклад назви файлу:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Як іменувати файли?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Формат: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Якість:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "Використовуйте розширення .oga" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Режим бітрейту:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "Стиснення:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "Ширина семплу" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "Профіль:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-профіль" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Тип результату?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "Змінити частоту" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "Примусовий вивід моно" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "Обмежити кількість паралельних процесів" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Кодек MP3 відсутній." #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Прочитати як встановити" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Куди зберігати результати?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "Файл" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "Редагувати" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "Довідка" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "_Додати файл" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Додати _теку" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Конвертація в пакетному режимі, з командного рядку, \n" " без графічного інтерфейсу. Ви це можете використовувати,\n" " наприклад, у скриптах." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "Показувати теги вхідних файлів замість їх перетворення. Це вмикає\n" "пакетний режим командного рядка й вимикає графічний інтерфейс." #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" "Встановити вихідний MIME-тип для пакетного режиму. Типово %s. Зауважте, що " "ви, можливо, бажаєте також встановити суфікс виводу." #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "" "Бути тихим. Не показувати звичайний вивід програми, виводити тільки помилки." #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "Показати додаткову налагоджувальну інформацію" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "Встановити суфікс виводу для пакетного режиму. Типово %s. Зауважте, що " "суфікс не впливає\n" "на MIME-тип виводу." #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "Кількість одночасних перетворень" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "Показати параметри GStreamer" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Помилка: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "Встановлення втулки перервано." #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Не вдається створити теку '%s'." #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "Помилка GStreamer:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "Перетворення закінчено за %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "Невідомий альбом" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "Невідомий виконавець" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "Усі файли" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "Помилка: %s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Такий самий, як і вхідний, але з заміною суфікса" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Такий самий, як і вхідний, але з додатковим суфіксом" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Номер треку - назва" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "Назва треку" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Виконавець - назва" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Спеціальний шаблон імен файлів" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "виконавець-альбом" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "Шаблони що є" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "До теки %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "Цільовий бітрейт: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "Відкрити файл" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Додати теку..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "Підготування до конвертації.." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Перетворення" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Скасовано" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Призупинено" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d залишилось" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Готово" soundconverter-4.0.5/po/vi.po000066400000000000000000000266271460501237000162070ustar00rootroot00000000000000# Vietnamese translation for soundconverter # Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2009. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: huanctv \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: vi\n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Bộ chuyển đổi âm thanh" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "Bộ chuyển định dạng Audio" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "Hộp thoại1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "Bộ lọc " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "Lỗi" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "File đã tồn tại" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "_Ghi đè" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "Bỏ _qua" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "File đã tồn tại\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "Áp _dụng cho toàn bộ hàng đợi" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "nghệ sĩ/album" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "nghệ sĩ - album" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "Cài đặt" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "Chọn..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "Trong một thư mục xác định" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "Tạo thư mục con: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "Xóa file gốc" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "Nơi lưu kết quả ra?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "Tên file mẫu: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "Thay thế toàn bộ các kí tự lộn xộn" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "Tên file mẫu:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "Cách đặt tên file?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "Định dạng: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "Chất lượng:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "Chế độ bitrate:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "Định dạng kết quả ra?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "Không tìm thấy bộ hóa MP3" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "Đọc cách cài đặt" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "Vị trí lưu kết quả ra?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "T_hêm File" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "Thêm _thư mục" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "Thực hiện chuyển trong chế độ batch, từ dòng lệnh mà không có đồ họa.\n" "Bạn có thể thực hiện kiểu này bằng cách dùng shell scripts." #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "Chỉ hiện ra những thông tin về lỗi" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "Lỗi: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "Không thể tạo thư mục '%s'" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "Giống đầu vào nhưng thay phần hậu tố" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "Giống đầu vào nhưng thêm phần hậu tố" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "Track số - tiêu đề" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "Nghệ sĩ - tiêu đề" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "Mẫu tên file tự do" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "nghệ sĩ-album" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "Vào trong thư mục %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "bitrate lối ra: %s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "Thêm thư mục..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "Đang chuyển" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "Đã hủy" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "Đã tạm dừng" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "%d:%02d trôi qua" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "Sẵn sàng" soundconverter-4.0.5/po/zh_CN.po000066400000000000000000000307541460501237000165660ustar00rootroot00000000000000# Simplified Chinese translation for soundconverter # Copyright (c) 2007 Rosetta Contributors and Canonical Ltd 2007 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2007. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-05-17 09:15+0000\n" "Last-Translator: aerowolf \n" "Language-Team: Simplified Chinese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "音频转换器" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "音频格式转换程序" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "将音频文件转为其他格式" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "GNOME 驱动的声音转换工具" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "网站" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "对话框1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "过滤器 " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "错误" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "文件已存在" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "覆盖(_O)" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "跳过(_S)" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "文件已存在\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "应用到整个队列(_A)" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "艺术家/专辑" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "艺术家 - 专辑" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "很低" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "低" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "正常" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "高" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "很高" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "极高" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 bit(音质很差)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 位(默认音质)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 位" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "更差(稍快)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "默认" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "更好((稍慢)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "固定采样率(CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "平均采样率(ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "可变采样率(VBR)" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "无损FLAC(.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "微软Wave(.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME 音频配置" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "音轨编号 - 音轨标题" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "音轨标题" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "首选项" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "被转换文件所在文件夹" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "选择..." #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "到指定文件夹" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "创建子文件夹: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "删除源文件" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "输出路径" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "文件名模板: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "替换所有乱码" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "移除字母, 数字和 ./_- 之外的全部字符" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "文件名示例:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "如何命名文件?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "格式: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "音质:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "使用 .oga 扩展" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "比特率模式" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "压缩:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "采样范围:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "配置:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst 配置" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "输出格式" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "重新采样" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "强制单声道输出" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "限制并行任务数" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "未安装 MP3 编码器。" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "了解如何安装" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "转换结果存放位置?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "音频转换程序" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "文件(_F)" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "编辑(_E)" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "帮助 (_H)" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "添加文件(_A)" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "添加文件夹(_F)" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "使用命令行可以进行批量转换。\n" "此功能可用在Shell脚本中。" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "显示输入文件的标签,而不是转换它们。此时是命令行批处理模式,\n" "而非图形用户界面。" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "为批量模式设置输出MIME类型。默认为%s。注意:你可能还想设置输出文件的扩展名。" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "静默模式。只在出现错误时显示。" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "显示额外的调试信息" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "为批处理模式设置输出文件扩展名。默认为%s。注意:扩展名不影响。" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "并发转换的数目。" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "显示 GStreamer 选项" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "错误: %s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "不能创建文件夹!" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "重命名文件时出错!" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "插件安装已中止。" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "无法创建文件夹“%s”。" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer 错误:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "%s 转换完成" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "未知专辑" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "未知艺术家" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "艺术家 专辑 名称 音轨 总数 类型 日期 年份 时间戳 碟片编号 碟片总数 扩展" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "全部文件" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "错误:%s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "添加文件…" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "与输入文件相同,但替换前缀" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "与输入文件相同,但添加后缀" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "音轨号 - 标题" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "音轨标题" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "艺术家 - 标题" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "自定义文件名模板" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "艺术家 - 专辑" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "可用模板:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "到文件夹 %s" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "目标比特率:%s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "打开文件" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "添加文件夹..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "准备转换…" #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "正在转换" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "已取消" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "已暂停" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "剩余 %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "就绪" soundconverter-4.0.5/po/zh_TW.po000066400000000000000000000307771460501237000166250ustar00rootroot00000000000000# Chinese (Traditional) translation for soundconverter # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the soundconverter package. # FIRST AUTHOR , 2011. # msgid "" msgstr "" "Project-Id-Version: soundconverter\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-11-02 18:42+0100\n" "PO-Revision-Date: 2023-01-23 09:15+0000\n" "Last-Translator: Pin-hsien Li \n" "Language-Team: Chinese (Traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2024-04-08 15:24+0000\n" "X-Generator: Launchpad (build aec24aef7a9042c99ef3e238d8b0ca01df9e1a9f)\n" "Language: \n" #: ../data/soundconverter.desktop.in.in.h:1 msgid "Sound Converter" msgstr "Sound Converter" #: ../data/soundconverter.desktop.in.in.h:2 msgid "Audio Format Converter" msgstr "聲音格式轉檔工具" #: ../data/soundconverter.desktop.in.in.h:3 msgid "Converts audio files into other formats" msgstr "將聲音檔轉換至其他格式" #: ../data/soundconverter.glade.h:1 msgid "GNOME-powered Sound Conversion" msgstr "以 GNOME 為基礎的聲音轉換工具" #: ../data/soundconverter.glade.h:2 msgid "Website" msgstr "網站" #: ../data/soundconverter.glade.h:3 msgid "dialog1" msgstr "dialog1" #: ../data/soundconverter.glade.h:4 msgid "Filter " msgstr "過濾器 " #. TODO: is this used ? #. TODO: add proper error management when an encoder cannot be created #: ../data/soundconverter.glade.h:5 ../soundconverter/gstreamer.py:555 msgid "Error" msgstr "錯誤" #: ../data/soundconverter.glade.h:6 msgid "File exists already" msgstr "檔案已經存在" #: ../data/soundconverter.glade.h:7 msgid "_Overwrite" msgstr "覆蓋(_O)" #: ../data/soundconverter.glade.h:8 msgid "_Skip" msgstr "略過(_S)" #: ../data/soundconverter.glade.h:9 msgid "File exists already\n" msgstr "檔案已經存在\n" #: ../data/soundconverter.glade.h:11 msgid "_Apply to entire queue" msgstr "套用到所有佇列的檔案(_A)" #: ../data/soundconverter.glade.h:12 ../soundconverter/ui.py:388 msgid "artist/album" msgstr "歌手/專輯" #: ../data/soundconverter.glade.h:13 ../soundconverter/ui.py:390 msgid "artist - album" msgstr "歌手 - 專輯" #: ../data/soundconverter.glade.h:14 msgid "Very Low" msgstr "非常低" #: ../data/soundconverter.glade.h:15 msgid "Low" msgstr "低" #: ../data/soundconverter.glade.h:16 msgid "Normal" msgstr "正常" #: ../data/soundconverter.glade.h:17 msgid "High" msgstr "高" #: ../data/soundconverter.glade.h:18 msgid "Very High" msgstr "非常高" #: ../data/soundconverter.glade.h:19 msgid "Insanely High" msgstr "超級高" #: ../data/soundconverter.glade.h:20 msgid "8 bits (very low quality)" msgstr "8 位元 (超低品質)" #: ../data/soundconverter.glade.h:21 msgid "16 bits (default)" msgstr "16 位元 (預設值)" #: ../data/soundconverter.glade.h:22 msgid "32 bits" msgstr "32 位元" #: ../data/soundconverter.glade.h:23 msgid "Less (Faster)" msgstr "較差 (較快)" #: ../data/soundconverter.glade.h:24 msgid "Default" msgstr "預設值" #: ../data/soundconverter.glade.h:25 msgid "Better (Slower)" msgstr "較好 (較慢)" #: ../data/soundconverter.glade.h:26 msgid "Constant (CBR)" msgstr "固定 (CBR)" #: ../data/soundconverter.glade.h:27 msgid "Average (ABR)" msgstr "平均 (ABR)" #: ../data/soundconverter.glade.h:28 msgid "Variable (VBR) - Best quality" msgstr "動態 (VBR) - 最佳品質" #: ../data/soundconverter.glade.h:29 msgid "Ogg Vorbis (.ogg)" msgstr "Ogg Vorbis (.ogg)" #: ../data/soundconverter.glade.h:30 msgid "MP3 (.mp3)" msgstr "MP3 (.mp3)" #: ../data/soundconverter.glade.h:31 msgid "FLAC Lossless (.flac)" msgstr "FLAC 無損 (.flac)" #: ../data/soundconverter.glade.h:32 msgid "MS Wave (.wav)" msgstr "微軟音效檔 (.wav)" #: ../data/soundconverter.glade.h:33 msgid "AAC (.m4a)" msgstr "AAC (.m4a)" #: ../data/soundconverter.glade.h:34 msgid "Opus (.opus)" msgstr "Opus (.opus)" #: ../data/soundconverter.glade.h:35 msgid "GNOME Audio Profile" msgstr "GNOME 音訊設定檔" #: ../data/soundconverter.glade.h:36 msgid "track_number - track_title" msgstr "音軌編號 - 音軌標題" #: ../data/soundconverter.glade.h:37 msgid "track_title" msgstr "音軌_標題" #: ../data/soundconverter.glade.h:38 msgid "Preferences" msgstr "偏好設定" #: ../data/soundconverter.glade.h:39 msgid "Same folder as the input file" msgstr "與輸入檔同一個資料夾" #: ../data/soundconverter.glade.h:40 msgid "Choose..." msgstr "選擇…" #: ../data/soundconverter.glade.h:41 msgid "Into a specified folder" msgstr "到指定資料夾" #: ../data/soundconverter.glade.h:42 msgid "Create subfolders: " msgstr "建立子資料夾: " #: ../data/soundconverter.glade.h:43 msgid "Delete original file" msgstr "刪除原始檔案" #: ../data/soundconverter.glade.h:44 msgid "Where to place results?" msgstr "輸出結果要放置的地方?" #: ../data/soundconverter.glade.h:45 msgid "Filename pattern: " msgstr "檔名樣式: " #: ../data/soundconverter.glade.h:46 msgid "Replace all messy characters" msgstr "替換所有亂碼字元" #: ../data/soundconverter.glade.h:47 msgid "Remove all characters except letters, digits and ./_-" msgstr "將字母、數字和 ./_- 以外的字元全部移除" #: ../data/soundconverter.glade.h:48 msgid "Example filename:" msgstr "檔案名稱範例:" #: ../data/soundconverter.glade.h:49 msgid "How to name files?" msgstr "如何命名檔案?" #: ../data/soundconverter.glade.h:50 msgid "Format: " msgstr "格式: " #: ../data/soundconverter.glade.h:51 msgid "Quality:" msgstr "品質:" #: ../data/soundconverter.glade.h:52 msgid "Use .oga extension" msgstr "使用 .oga 副檔名" #: ../data/soundconverter.glade.h:53 msgid "Ogg" msgstr "Ogg" #: ../data/soundconverter.glade.h:54 msgid "Bitrate mode:" msgstr "位元率模式:" #: ../data/soundconverter.glade.h:55 msgid "MP3" msgstr "MP3" #: ../data/soundconverter.glade.h:56 msgid "Compression:" msgstr "壓縮:" #: ../data/soundconverter.glade.h:57 msgid "FLAC" msgstr "FLAC" #: ../data/soundconverter.glade.h:58 msgid "Sample width:" msgstr "取樣寬度:" #: ../data/soundconverter.glade.h:59 msgid "WAV" msgstr "WAV" #: ../data/soundconverter.glade.h:60 msgid "AAC" msgstr "AAC" #: ../data/soundconverter.glade.h:61 msgid "Opus" msgstr "Opus" #: ../data/soundconverter.glade.h:62 msgid "Profile:" msgstr "設定檔:" #: ../data/soundconverter.glade.h:63 msgid "gst-profile" msgstr "gst-profile" #: ../data/soundconverter.glade.h:64 msgid "Type of result?" msgstr "輸出結果類型?" #: ../data/soundconverter.glade.h:65 msgid "Resample" msgstr "重新取樣" #: ../data/soundconverter.glade.h:66 msgid "Force mono output" msgstr "強制單音輸出" #: ../data/soundconverter.glade.h:67 msgid "Limit number of parallel jobs" msgstr "限制同時進行工作的數量" #: ../data/soundconverter.glade.h:68 msgid "MP3 Encoder is not present." msgstr "沒有安裝 MP3 編碼器。" #: ../data/soundconverter.glade.h:69 msgid "Read how to install" msgstr "閱讀如何安裝" #: ../data/soundconverter.glade.h:70 msgid "Where to place results?" msgstr "輸出結果要放置的地方?" #: ../data/soundconverter.glade.h:71 msgid "SoundConverter" msgstr "SoundConverter" #: ../data/soundconverter.glade.h:72 msgid "_File" msgstr "檔案(_F)" #: ../data/soundconverter.glade.h:73 msgid "_Edit" msgstr "編輯(_E)" #: ../data/soundconverter.glade.h:74 msgid "_Help" msgstr "說明(_H)" #: ../data/soundconverter.glade.h:75 msgid "_Add File" msgstr "加入檔案(_A)" #: ../data/soundconverter.glade.h:76 msgid "Add _Folder" msgstr "新增資料夾(_F)" #: ../bin/soundconverter.py:107 msgid "" "Convert in batch mode, from command line, without a graphical user\n" " interface. You can use this from, say, shell scripts." msgstr "" "在指令列進行批次模式轉換,不使用圖形使用者\n" " 介面。您可以透過如 Shell 腳本來使用此功能。" #: ../bin/soundconverter.py:112 msgid "" "Show tags for input files instead of converting them. This indicates \n" " command line batch mode and disables the graphical user interface." msgstr "" "顯示輸入檔案的標籤,而非轉換它們。這代表會使用 \n" " 指令列批次模式,並停用圖形使用者介面。" #: ../bin/soundconverter.py:116 #, python-format msgid "" "Set the output MIME type for batch mode. The default is %s. Note that you " "probably want to set the output suffix as well." msgstr "設定批次模式的輸出 MIME 類型。預設值為 %s。您或許也想要設定輸出副檔名。" #: ../bin/soundconverter.py:120 msgid "Be quiet. Don't write normal output, only errors." msgstr "安靜模式。僅輸出錯誤訊息。" #: ../bin/soundconverter.py:122 msgid "Displays additional debug information" msgstr "顯示額外的除錯資訊" #: ../bin/soundconverter.py:124 #, python-format msgid "" "Set the output filename suffix for batch mode.The default is %s . Note that " "the suffix does not affect\n" " the output MIME type." msgstr "" "設定批次模式的輸出副檔名。預設值為 %s。注意,副檔名並不會影響\n" " 輸出的 MIME 類型。" #: ../bin/soundconverter.py:128 msgid "Force number of concurrent conversions." msgstr "強制設定同時間進行的轉換工作的數目。" #: ../bin/soundconverter.py:130 msgid "Shows GStreamer Options" msgstr "顯示 GStreamer 選項" #: ../soundconverter/error.py:30 #, python-format msgid "" "\n" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "\n" "錯誤:%s\n" "%s\n" #: ../soundconverter/fileoperations.py:98 msgid "Cannot create folder!" msgstr "" #. TODO: maybe we need a special case here. If dest folder is unwritable. Just stop. #. or an option to stop all processing. #: ../soundconverter/fileoperations.py:110 msgid "Error while renaming file!" msgstr "" #: ../soundconverter/gstreamer.py:208 msgid "Plugin installation aborted." msgstr "插件安裝已停止。" #: ../soundconverter/gstreamer.py:566 #, python-format msgid "Cannot create '%s' folder." msgstr "無法建立資料夾「%s」。" #. pass #: ../soundconverter/gstreamer.py:607 msgid "GStreamer Error:" msgstr "GStreamer 錯誤:" #: ../soundconverter/gstreamer.py:814 #, python-format msgid "Conversion done in %s" msgstr "轉換完成於 %s" #: ../soundconverter/namegenerator.py:76 msgid "Unknown Album" msgstr "未知專輯" #: ../soundconverter/namegenerator.py:77 msgid "Unknown Artist" msgstr "未知歌手" #. traductors: These are the custom filename patterns. Only if it makes sense. #: ../soundconverter/settings.py:47 msgid "" "Artist Album Title Track Total Genre Date Year Timestamp DiscNumber " "DiscTotal Ext" msgstr "" #: ../soundconverter/settings.py:84 msgid "All files" msgstr "所有檔案" #: ../soundconverter/ui.py:91 ../soundconverter/ui.py:106 #, python-format msgid "" "\n" "Error: %s\n" "%s\n" msgstr "" "\n" "錯誤:%s\n" "%s\n" #: ../soundconverter/ui.py:310 msgid "Adding files..." msgstr "" #: ../soundconverter/ui.py:378 msgid "Same as input, but replacing the suffix" msgstr "和輸入一樣,但替換副檔名" #: ../soundconverter/ui.py:380 msgid "Same as input, but with an additional suffix" msgstr "和輸入一樣,但加上其他副檔名" #: ../soundconverter/ui.py:381 msgid "Track number - title" msgstr "音軌編號 - 標題" #: ../soundconverter/ui.py:382 msgid "Track title" msgstr "音軌 標題" #: ../soundconverter/ui.py:383 msgid "Artist - title" msgstr "歌手 - 標題" #: ../soundconverter/ui.py:384 msgid "Custom filename pattern" msgstr "自定檔名樣式" #: ../soundconverter/ui.py:389 msgid "artist-album" msgstr "歌手-專輯" #: ../soundconverter/ui.py:447 msgid "Available patterns:" msgstr "可用樣式:" #: ../soundconverter/ui.py:644 #, python-format msgid "Into folder %s" msgstr "於資料夾 %s 內" #: ../soundconverter/ui.py:724 #, python-format msgid "Target bitrate: %s" msgstr "目標位元率:%s" #: ../soundconverter/ui.py:1075 msgid "Open a file" msgstr "開啟檔案" #: ../soundconverter/ui.py:1169 msgid "Add Folder..." msgstr "新增資料夾..." #: ../soundconverter/ui.py:1337 msgid "Preparing conversion..." msgstr "正在準備轉換..." #: ../soundconverter/ui.py:1358 msgid "Converting" msgstr "轉換中" #: ../soundconverter/ui.py:1376 msgid "Canceled" msgstr "已取消" #: ../soundconverter/ui.py:1449 msgid "Paused" msgstr "已暫停" #: ../soundconverter/ui.py:1467 #, python-format msgid "%d:%02d left" msgstr "剩餘時間 %d:%02d" #: ../soundconverter/ui.py:1473 msgid "Ready" msgstr "就緒" soundconverter-4.0.5/setup.py000066400000000000000000000050331460501237000163110ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import sys try: import DistUtilsExtra.auto except ImportError as e: sys.stderr.write('You need python-distutils-extra\n') sys.stderr.write(e) sys.exit(1) import os import DistUtilsExtra.auto # This will automatically, assuming that the prefix is /usr # - Compile and install po files to /usr/share/locale*.mo, # - Install .desktop files to /usr/share/applications # - Install all the py files to /usr/lib/python3.8/site-packages/soundconverter # - Copy bin to /usr/bin # - Copy the rest to /usr/share/soundconverter, like the .glade file # Thanks to DistUtilsExtra (https://salsa.debian.org/python-team/modules/python-distutils-extra/-/tree/master/doc) # noqa class Install(DistUtilsExtra.auto.install_auto): def run(self): DistUtilsExtra.auto.install_auto.run(self) # after DistUtilsExtra automatically copied data/org.soundconverter.gschema.xml # to /usr/share/glib-2.0/schemas/ it doesn't seem to compile them. glib_schema_path = os.path.join(self.install_data, 'share/glib-2.0/schemas/') cmd = 'glib-compile-schemas {}'.format(glib_schema_path) print('running {}'.format(cmd)) os.system(cmd) DistUtilsExtra.auto.setup( name='soundconverter', version='4.0.5', description=( 'A simple sound converter application for the GNOME environment. ' 'It writes WAV, FLAC, MP3, and Ogg Vorbis files.' ), license='GPL-3.0', data_files=[ ('share/metainfo/', ['data/soundconverter.appdata.xml']), ('share/pixmaps/', ['data/soundconverter.png']), ('share/icons/hicolor/scalable/apps/', ['data/soundconverter.svg']) ], cmdclass={ 'install': Install }, scripts=["bin/soundconverter"] ) soundconverter-4.0.5/soundconverter/000077500000000000000000000000001460501237000176565ustar00rootroot00000000000000soundconverter-4.0.5/soundconverter/__init__.py000066400000000000000000000015121460501237000217660ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA soundconverter-4.0.5/soundconverter/gstreamer/000077500000000000000000000000001460501237000216475ustar00rootroot00000000000000soundconverter-4.0.5/soundconverter/gstreamer/__init__.py000066400000000000000000000015121460501237000237570ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA soundconverter-4.0.5/soundconverter/gstreamer/converter.py000066400000000000000000000446121460501237000242370ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import os from gettext import gettext as _ from gi.repository import Gst, GLib, Gio from soundconverter.util.fileoperations import vfs_encode_filename, \ vfs_unlink, vfs_rename, vfs_exists, beautify_uri from soundconverter.util.logger import logger from soundconverter.util.settings import get_gio_settings from soundconverter.util.error import show_error from soundconverter.util.task import Task GSTREAMER_SOURCE = 'giosrc' GSTREAMER_SINK = 'giosink' available_elements = set() def find_available_elements(): """Figure out which gstreamer pipeline plugins are available.""" # gst-plugins-good, gst-plugins-bad, etc. packages provide them global available_elements GOOD = 'gst-plugins-good' BAD = 'gst-plugins-bad' BASE = 'gst-plugins-base' UGLY = 'gst-plugins-ugly' LIBAV = 'gst-libav' # some functions can be provided by various packages. # move preferred packages towards the bottom. encoders = [ ('flacenc', 'FLAC', 'flac-enc', GOOD), ('wavenc', 'WAV', 'wav-enc', GOOD), ('vorbisenc', 'Ogg Vorbis', 'vorbis-enc', BASE), ('oggmux', 'Ogg Vorbis', 'vorbis-mux', BASE), ('id3mux', 'MP3 tags', 'mp3-id-tags', BAD), ('id3v2mux', 'MP3 tags', 'mp3-id-tags', GOOD), ('xingmux', 'VBR tags', 'mp3-vbr-tags', UGLY), ('lamemp3enc', 'MP3', 'mp3-enc', GOOD), ('mp4mux', 'AAC', 'aac-mux', GOOD), ('opusenc', 'Opus', 'opus-enc', BASE), ('faac', 'AAC', 'aac-enc', BAD), ('avenc_aac', 'AAC', 'aac-enc', LIBAV), ('fdkaacenc', 'AAC', 'aac-enc', BAD), ] result = dict() for encoder, name, function, package in encoders: have_it = bool(Gst.ElementFactory.find(encoder)) if have_it: available_elements.add(encoder) else: logger.debug( '{} gstreamer element from "{}" not found\n'.format( encoder, package ) ) result[function] = (have_it, package) for function in result: have_it, package = result[function] if not have_it: logger.error( 'Disabling {} output. Do you have "{}" installed?'.format( function, package ) ) if 'oggmux' not in available_elements: available_elements.discard('vorbisenc') if 'mp4mux' not in available_elements: available_elements.discard('faac') available_elements.discard('avenc_aac') find_available_elements() def create_flac_encoder(): """Return an flac encoder for the gst pipeline string.""" flac_compression = get_gio_settings().get_int('flac-compression') return 'flacenc mid-side-stereo=true quality={}'.format(flac_compression) def create_wav_encoder(): """Return a wav encoder for the gst pipeline string.""" wav_sample_width = get_gio_settings().get_int('wav-sample-width') formats = {8: 'U8', 16: 'S16LE', 24: 'S24LE', 32: 'S32LE'} return 'audioconvert ! audio/x-raw,format={} ! wavenc'.format( formats[wav_sample_width] ) def create_oggvorbis_encoder(): """Return an ogg encoder for the gst pipeline string.""" cmd = 'vorbisenc' vorbis_quality = get_gio_settings().get_double('vorbis-quality') if vorbis_quality is not None: cmd += ' quality={}'.format(vorbis_quality) cmd += ' ! oggmux ' return cmd def create_mp3_encoder(): """Return an mp3 encoder for the gst pipeline string.""" quality = { 'cbr': 'mp3-cbr-quality', 'abr': 'mp3-abr-quality', 'vbr': 'mp3-vbr-quality' } mode = get_gio_settings().get_string('mp3-mode') mp3_mode = mode mp3_quality = get_gio_settings().get_int(quality[mode]) cmd = 'lamemp3enc encoding-engine-quality=2 ' if mp3_mode is not None: properties = { 'cbr': 'target=bitrate cbr=true bitrate=%s ', 'abr': 'target=bitrate cbr=false bitrate=%s ', 'vbr': 'target=quality cbr=false quality=%s ', } cmd += properties[mp3_mode] % mp3_quality if 'xingmux' in available_elements and mp3_mode != 'cbr': # add xing header when creating vbr/abr mp3 cmd += '! xingmux ' if 'id3mux' in available_elements: # add tags cmd += '! id3mux ' elif 'id3v2mux' in available_elements: # add tags cmd += '! id3v2mux ' return cmd def create_aac_encoder(): """Return an aac encoder for the gst pipeline string.""" aac_quality = get_gio_settings().get_int('aac-quality') # it seemed like I couldn't get vbr to work with any of these, not even # with rate-control and quality of faac or with maxrate of avenc_aac. # Or it was audacious not displaying the current vbr rate correctly. bitrate = aac_quality * 1000 # list of recommended aac encoders: # https://wiki.hydrogenaud.io/index.php?title=AAC_encoders if 'fdkaacenc' in available_elements: return 'fdkaacenc bitrate={} ! mp4mux'.format(bitrate) encoder = 'faac' if 'faac' in available_elements else 'avenc_aac' logger.warning( 'fdkaacenc is recommended for aac conversion but it is not ' 'available. It can be installed with gst-plugins-bad. ' 'Using {} instead.'.format(encoder) ) if 'faac' in available_elements: return 'faac bitrate={} rate-control=2 ! mp4mux'.format(bitrate) return 'avenc_aac bitrate={} ! mp4mux'.format(bitrate) def create_opus_encoder(): """Return an opus encoder for the gst pipeline string.""" opus_quality = get_gio_settings().get_int('opus-bitrate') return ( 'opusenc bitrate={} bitrate-type=vbr ' 'bandwidth=auto ! oggmux' ).format(opus_quality * 1000) class Converter(Task): """Completely handle the conversion of a single file.""" INCREMENT = 'increment' OVERWRITE = 'overwrite' SKIP = 'skip' def __init__(self, sound_file, name_generator): """create a converter that converts a single file. Parameters ---------- name_generator : TargetNameGenerator TargetNameGenerator that creates filenames for all converters of the current TaskQueue """ # Configuration self.sound_file = sound_file self.temporary_filename = None self.newname = None self.existing_behaviour = Converter.INCREMENT self.name_generator = name_generator # All relevant gio settings have to be copied and remembered, so that # they don't suddenly change during the conversion settings = get_gio_settings() self.output_mime_type = settings.get_string('output-mime-type') self.output_resample = settings.get_boolean('output-resample') self.resample_rate = settings.get_int('resample-rate') self.force_mono = settings.get_boolean('force-mono') self.replace_messy_chars = settings.get_boolean('replace-messy-chars') self.delete_original = settings.get_boolean('delete-original') # State self.command = None self.pipeline = None self._done = False self.error = None self.output_uri = None super().__init__() def _query_position(self): """Ask for the stream position of the current pipeline.""" if self.pipeline: # during Gst.State.PAUSED it returns super small numbers, # so take care position = self.pipeline.query_position(Gst.Format.TIME)[1] return max(0, position / Gst.SECOND) return 0 def get_progress(self): """Fraction of how much of the task is completed.""" duration = self.sound_file.duration if self._done: return 1, duration if self.pipeline is None or duration is None: return 0, duration position = self._query_position() progress = position / duration if duration else 0 progress = min(max(progress, 0.0), 1.0) return progress, duration def cancel(self): """Cancel execution of the task.""" self._stop_pipeline() self.done() def pause(self): """Pause execution of the task.""" if not self.pipeline: logger.debug('pause(): pipeline is None!') return self.pipeline.set_state(Gst.State.PAUSED) def resume(self): """Resume execution of the task.""" if not self.pipeline: logger.debug('resume(): pipeline is None!') return self.pipeline.set_state(Gst.State.PLAYING) def _cleanup(self): """Delete the pipeline.""" if self.pipeline is not None: bus = self.pipeline.get_bus() if hasattr(self, 'watch_id'): bus.disconnect(self.watch_id) bus.remove_signal_watch() self.pipeline.set_state(Gst.State.NULL) self.pipeline = None def _stop_pipeline(self): # remove partial file if self.temporary_filename is not None: if vfs_exists(self.temporary_filename): try: vfs_unlink(self.temporary_filename) except Exception as error: logger.error('cannot delete: \'{}\': {}'.format( beautify_uri(self.temporary_filename), str(error) )) if not self.pipeline: logger.debug('pipeline already stopped!') return self._cleanup() def _convert(self): """Run the gst pipeline that converts files. Handlers for messages sent from gst are added, which also triggers renaming the file to it's final path. """ command = self.command if self.pipeline is None: logger.debug('launching: \'{}\''.format(command)) try: self.pipeline = Gst.parse_launch(command) bus = self.pipeline.get_bus() except GLib.Error as error: self.error = 'gstreamer error when creating pipeline: {}'.format(str(error)) self._on_error(self.error) return bus.add_signal_watch() self.watch_id = bus.connect('message', self._on_message) self.pipeline.set_state(Gst.State.PLAYING) def _conversion_done(self): """Should be called when the EOS message arrived or on error. Will clear the temporary data on error or move the temporary file to the final path on success. """ input_uri = self.sound_file.uri newname = self.newname if newname is None: raise AssertionError('the conversion was not started') if self.error: logger.debug('error in task, skipping rename: {}'.format( self.temporary_filename )) vfs_unlink(self.temporary_filename) logger.error('could not convert {}: {}'.format( beautify_uri(input_uri), self.error )) self.done() return if not vfs_exists(self.temporary_filename): self.error = 'Expected {} to exist after conversion.'.format( self.temporary_filename ) self.done() return # rename temporary file logger.debug('{} -> {}'.format( beautify_uri(self.temporary_filename), beautify_uri(newname) )) path, extension = os.path.splitext(newname) path = path.replace('%', '%%') space = ' ' if self.replace_messy_chars: space = '_' exists = vfs_exists(newname) if self.existing_behaviour == Converter.INCREMENT and exists: # If the file already exists, increment the filename so that # nothing gets overwritten. path = path + space + '(%d)' + extension i = 1 while vfs_exists(newname): newname = path % i i += 1 try: if self.existing_behaviour == Converter.OVERWRITE and exists: logger.info('overwriting \'{}\''.format( beautify_uri(newname) )) vfs_unlink(newname) vfs_rename(self.temporary_filename, newname) except Exception as error: self.error = str(error) logger.error("could not rename '{}' to '{}':".format( beautify_uri(self.temporary_filename), beautify_uri(newname), str(error) )) self.done() return assert vfs_exists(newname) logger.info("converted '{}' to '{}'".format( beautify_uri(input_uri), beautify_uri(newname) )) # finish up the target file try: # Copy file permissions source = Gio.file_parse_name(self.sound_file.uri) destination = Gio.file_parse_name(newname) source.copy_attributes(destination, Gio.FileCopyFlags.NONE) # the modification date of the destination should be now info = Gio.FileInfo() now = GLib.DateTime.new_now(GLib.TimeZone()) if callable(getattr(info, 'set_modification_date_time', None)): info.set_modification_date_time(now) else: # deprecated method timeval = GLib.TimeVal() now.to_timeval(timeval) info.set_modification_time(timeval) destination.set_attributes_from_info( info, Gio.FileQueryInfoFlags.NONE ) except Exception as error: logger.error( "Could not set some attributes of the target '{}': {}".format( beautify_uri(newname), str(error) ) ) if self.delete_original and not self.error: logger.info("deleting: '{}'".format(self.sound_file.uri)) try: vfs_unlink(self.sound_file.uri) except Exception as error: logger.info("cannot remove '{}': {}".format( beautify_uri(self.sound_file.uri), str(error) )) self.output_uri = newname self.done() def done(self): self._done = True self._cleanup() super().done() def run(self): """Call this in order to run the whole Converter task.""" self.newname = self.name_generator.generate_target_uri( self.sound_file ) # temporary output file, in order to easily remove it without # any overwritten file and therefore caused damage in the target dir. self.temporary_filename = self.name_generator.generate_temp_path( self.sound_file ) exists = vfs_exists(self.newname) if self.existing_behaviour == Converter.SKIP and exists: logger.info('output file already exists, skipping \'{}\''.format( beautify_uri(self.newname) )) self.done() return # construct a pipeline for conversion # Add default decoding step that remains the same for all formats. command = ['{} location="{}" name=src ! decodebin name=decoder'.format( GSTREAMER_SOURCE, vfs_encode_filename(self.sound_file.uri) ), 'audiorate ! audioconvert ! audioresample'] # audio resampling support if self.output_resample: command.append('audio/x-raw,rate={}'.format(self.resample_rate)) command.append('audioconvert ! audioresample') if self.force_mono: command.append('audio/x-raw,channels=1 ! audioconvert') # figure out the rest of the gst pipeline string encoder = { 'audio/x-vorbis': create_oggvorbis_encoder, 'audio/x-flac': create_flac_encoder, 'audio/x-wav': create_wav_encoder, 'audio/mpeg': create_mp3_encoder, 'audio/x-m4a': create_aac_encoder, 'audio/ogg; codecs=opus': create_opus_encoder }[self.output_mime_type]() command.append(encoder) gfile = Gio.file_parse_name(self.temporary_filename) dirname = gfile.get_parent() if dirname and not dirname.query_exists(None): logger.info('creating folder: \'{}\''.format( beautify_uri(dirname.get_uri()) )) if not dirname.make_directory_with_parents(): show_error( _('cannot create \'{}\' folder.').format( beautify_uri(dirname) ) ) return command.append('{} location="{}"'.format( GSTREAMER_SINK, vfs_encode_filename(self.temporary_filename) )) # preparation done, now convert self.command = ' ! '.join(command) self._convert() def _on_error(self, error): """Log errors and write down that this Task failed. The TaskQueue is interested in reading the error. """ self.error = error show_error( error, beautify_uri(self.sound_file.uri) ) self._stop_pipeline() self.done() def _on_message(self, _, message): """Handle message events sent by gstreamer. Parameters ---------- message : Gst.Message """ if message.type == Gst.MessageType.ERROR: error, __ = message.parse_error() self._on_error(error) elif message.type == Gst.MessageType.EOS: # Conversion done self._conversion_done() soundconverter-4.0.5/soundconverter/gstreamer/discoverer.py000066400000000000000000000170141460501237000243710ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA from fnmatch import fnmatch from threading import Thread from gi.repository import Gst, GObject, GstPbutils, GLib from soundconverter.util.task import Task from soundconverter.util.logger import logger from soundconverter.util.settings import get_num_jobs from soundconverter.util.formats import filename_denylist type_getters = { GObject.TYPE_STRING: 'get_string', GObject.TYPE_DOUBLE: 'get_double', GObject.TYPE_FLOAT: 'get_float', GObject.TYPE_INT: 'get_int', GObject.TYPE_UINT: 'get_uint', } def add_discoverers(task_queue, sound_files): """Fill a TaskQueue with Discoverer tasks for optimized discovery.""" chunk = [] chunksize = len(sound_files) / get_num_jobs() for sound_file in sound_files: chunk.append(sound_file) if len(chunk) >= chunksize or sound_file is sound_files[-1]: discoverer = Discoverer(chunk) task_queue.add(discoverer) chunk = [] if len(chunk) > 0: raise AssertionError( 'All chunks should have been added to discoverers' ) def get_sound_files(task_queue): """Get all SoundFiles of discoverer tasks in a TaskQueue""" sound_files = [] for task in task_queue: if isinstance(task, Discoverer): for sound_file in task.sound_files: sound_files.append(sound_file) return sound_files def is_denylisted(sound_file): """Check the file against the denylist.""" for file_pattern in filename_denylist: if fnmatch(sound_file.uri, file_pattern): return file_pattern return False class DiscovererThread(Thread): """Discover if multiple SoundFiles can be read and their tags.""" # This is the fastest way I could figure out. discover_uri_async # was not faster than discover_uri, and the UI only stayed responsive # as long as only 1 discover_uri_async job was running at a time. # Maybe it was a bit too much for the GLib event loop, who knows. # Running multiple discover_uri_async jobs at a time also didn't # improve the performance. By using threads with synchronous # discovery, I could get a very responsive UI while spawning 12 # Threads with a drastic ~5-times performance increase for ~360 # files. # I couldn't get it to work with the multiprocessing module though, # because the discover_uri function would hang. def __init__(self, sound_files, bus): super().__init__() self.sound_files = sound_files self.bus = bus def run(self): """Run the Thread.""" for sound_file in self.sound_files: self._analyse_file(sound_file) msg_type = Gst.MessageType(Gst.MessageType.PROGRESS) msg = Gst.Message.new_custom(msg_type, None, None) self.bus.post(msg) msg_type = Gst.MessageType(Gst.MessageType.EOS) msg = Gst.Message.new_custom(msg_type, None, None) self.bus.post(msg) def _analyse_file(self, sound_file): """Figure out readable, tags and duration properties.""" sound_file.readable = False denylisted_pattern = is_denylisted(sound_file) if denylisted_pattern: logger.info('filename denylisted ({}): {}'.format( denylisted_pattern, sound_file.filename_for_display )) return try: discoverer = GstPbutils.Discoverer() info = discoverer.discover_uri(sound_file.uri) # whatever anybody might ever need from it, here it is: sound_file.info = info # Read root tags taglist = info.get_tags() if taglist: taglist.foreach(lambda *args: self._add_tag(*args, sound_file)) for audio_stream in info.get_audio_streams(): # Read tags for each audio stream taglist = audio_stream.get_tags() taglist.foreach(lambda *args: self._add_tag(*args, sound_file)) filename = sound_file.filename_for_display logger.debug('found tag: {}'.format(filename)) for tag, value in sound_file.tags.items(): logger.debug(' {}: {}'.format(tag, value)) duration = info.get_duration() / Gst.SECOND if duration == 0: # might be an image return # since threads share memory, this doesn't have to be sent # over a bus or queue, but rather can be written into the # sound_file sound_file.duration = duration sound_file.readable = True except Exception as error: if not isinstance(error, GLib.Error): logger.error(str(error)) def _add_tag(self, taglist, tag, sound_file): """Convert the taglist to a dict one by one.""" # only really needed to construct output paths tag_type = Gst.tag_get_type(tag) if tag_type in type_getters: getter = getattr(taglist, type_getters[tag_type]) value = str(getter(tag)[1]) sound_file.tags[tag] = value if 'datetime' in tag: date_time = taglist.get_date_time(tag)[1] sound_file.tags['year'] = date_time.get_year() sound_file.tags['date'] = date_time.to_iso8601_string()[:10] class Discoverer(Task): """Find type and tags of a SoundFile if possible.""" def __init__(self, sound_files): """Find type and tags of a SoundFile if possible.""" self.sound_files = sound_files self.error = None self.running = False self.callback = lambda: None self.discovered = 0 self.queue = None self.bus = None self.thread = None super().__init__() def get_progress(self): """Fraction of how much of the task is completed.""" return self.discovered / len(self.sound_files), 1 def cancel(self): """Cancel execution of the task.""" # fast task, use case doesn't exist self.done() def pause(self): """Pause execution of the task.""" # fast task, use case doesn't exist def resume(self): """Resume execution of the task.""" # fast task, use case doesn't exist def run(self): self.running = True bus = Gst.Bus() bus.connect('message', self._on_message) bus.add_signal_watch() thread = DiscovererThread(self.sound_files, bus) thread.start() self.bus = bus self.thread = thread def _on_message(self, _, message): """Write down that it is finished and call the callback.""" if message.type == Gst.MessageType.EOS: self.running = False self.done() else: self.discovered += 1 soundconverter-4.0.5/soundconverter/interface/000077500000000000000000000000001460501237000216165ustar00rootroot00000000000000soundconverter-4.0.5/soundconverter/interface/__init__.py000066400000000000000000000015121460501237000237260ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA soundconverter-4.0.5/soundconverter/interface/batch.py000066400000000000000000000425641460501237000232640ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA """Batch mode to run soundconverter in a console.""" import os from gi.repository import GLib, Gio from soundconverter.interface.preferences import rates from soundconverter.util.soundfile import SoundFile from soundconverter.util.settings import settings, set_gio_settings from soundconverter.util.formats import get_quality_setting_name, \ get_mime_type, get_mime_type_mapping, get_default_quality from soundconverter.gstreamer.converter import Converter from soundconverter.gstreamer.discoverer import add_discoverers, \ get_sound_files from soundconverter.util.taskqueue import TaskQueue from soundconverter.util.namegenerator import TargetNameGenerator from soundconverter.util.fileoperations import filename_to_uri, beautify_uri from soundconverter.util.logger import logger from soundconverter.util.formatting import format_time from soundconverter.interface.mainloop import gtk_iteration cli_convert = [None] def batch_main(files): global cli_convert # works like a pointer, so that it can be accessed in tests, # just like in ui.py cli_convert[0] = CLIConvert(files) def use_memory_gsettings(options): """Use a Gio memory backend and write argv settings into it. In order for the batch mode to work properly with functions that were written for the ui, write argv into the gio settings, but provide a temporary memory backend so that the ui keeps its settings and cli settings are thrown away at the end. """ if options.get('main') == 'gui': raise AssertionError('should not be used with the gui mode') backend = Gio.memory_settings_backend_new() gio_settings = Gio.Settings.new_with_backend('org.soundconverter', backend) set_gio_settings(gio_settings) gio_settings.set_boolean('delete-original', options.get('delete-original', False)) if options.get('main') == 'batch': # the number of jobs is only applied, when limit-jobs is true forced_jobs = options.get('forced-jobs', None) if forced_jobs is not None: gio_settings.set_boolean('limit-jobs', True) gio_settings.set_int('number-of-jobs', options['forced-jobs']) else: gio_settings.set_boolean('limit-jobs', False) format_option = options['format'] mime_type = get_mime_type(format_option) mode = options.get('mode') if mode: gio_settings.set_string('mp3-mode', mode) gio_settings.set_string('output-mime-type', mime_type) output_path = filename_to_uri(options.get('output-path')) gio_settings.set_string('selected-folder', output_path) gio_settings.set_boolean('same-folder-as-input', False) # other than the ui, the batch mode doesn't have a selection of # predefined patterns and it's all text anyways, so patterns can be # created with the -p argument on custom-filename-pattern. Don't use # -o for that to avoid having to escape pattern symbols when a folder # is called like a pattern string. gio_settings.set_boolean('create-subfolders', False) pattern = options.get('custom-filename-pattern') if pattern: gio_settings.set_int('name-pattern-index', -1) gio_settings.set_string('custom-filename-pattern', pattern) else: # the first name pattern is the filename itself gio_settings.set_int('name-pattern-index', 0) quality_setting = options.get('quality') if quality_setting is None: quality_setting = get_default_quality(mime_type) setting_name = get_quality_setting_name() # here is the very long and incredible way to set a variable as gio # settings value with the correct type as defined in the schema: type_string = gio_settings \ .props \ .settings_schema \ .get_key(setting_name) \ .get_value_type() \ .dup_string() variant = GLib.Variant(type_string, float(quality_setting)) gio_settings.set_value( setting_name, variant ) else: # --tags and --check gio_settings.set_boolean('limit-jobs', True) gio_settings.set_int('number-of-jobs', 1) resample = options.get('output-resample') if resample is not None: gio_settings.set_boolean('output-resample', True) gio_settings.set_int('resample-rate', resample) def validate_args(options): """Check if required command line args are provided. Will log usage mistakes to the console. """ main = options.get('main', 'gui') if main not in ['gui', 'check', 'tags', 'batch']: logger.error('unknown main {}'.format(main)) return False if main not in ['gui', 'check', 'tags']: # not needed for --check and --tags if not options.get('output-path'): logger.error('output path argument -o is required') return False existing_behaviour = options.get('existing') if existing_behaviour: existing_behaviours = [ Converter.SKIP, Converter.OVERWRITE, Converter.INCREMENT ] if existing_behaviour not in existing_behaviours: logger.error('-e should be one of {}'.format( ', '.join(existing_behaviours) )) return False # target_format might be a mime type or a file extension target_format = options.get('format') if target_format is None: logger.error('format argument -f is required') return False mime_type = get_mime_type(target_format) if mime_type is None: logger.error( 'cannot use "{}" format. Supported formats: {}'.format( target_format, ', '.join(get_mime_type_mapping()) ) ) return False mode = options.get('mode') if mode and mode not in ['abr', 'cbr', 'vbr']: logger.error('mode should be one of abr, cbr or vbr (default)') return False # validate if the quality setting makes sense quality = options.get('quality') if quality is not None: # optional; otherwise default quality values will be used if mime_type == 'audio/mpeg': if mode in ['abr', 'cbr']: if quality > 320 or quality < 64: logger.error( 'mp3 cbr/abr bitrate should be between 64 and 320' ) return False else: if quality > 9 or quality < 0: logger.error( 'mp3 vbr quality should be between 9 (low) and ' '0 (hight)' ) return False elif mime_type == 'audio/x-vorbis': if quality < 0 or quality > 1: logger.error('ogg quality should be between 0.0 and 1.0') return False elif mime_type == 'audio/x-m4a': # supports arbitrary bitrates # source: https://en.wikipedia.org/wiki/Advanced_Audio_Coding # Our used encoder seems to cap somewhere between 400 and # 440 kbps though if quality < 0: logger.error('m4a bitrate should be larger than 0') return False elif mime_type == 'audio/x-flac': if quality < 0 or quality > 8: logger.error( 'flac compression strength should be between 0 and 8' ) return False elif mime_type == 'audio/x-wav': if quality not in [8, 16, 24, 32]: logger.error( 'wav sample width has to be one of 8, 16, 24 or 32' ) return False elif mime_type == 'audio/ogg; codecs=opus': # source: https://wiki.hydrogenaud.io/index.php?title=Opus if quality < 6 or quality > 510: logger.error('opus bitrate should be between 6 and 510') return False resample = options.get('output-resample', None) if resample and resample not in rates: logger.error( "Possible values for -R or --output-resample option are {rates}".format( rates=", ".join([str(item for item in rates)]) ) ) return False return True def prepare_files_list(input_files): """Create a list of all URIs in a list of paths. Also returns a list of relative directories. This is used to reconstruct the directory structure in the output path. If input_path is a/b/c/ and the file is at a/b/c/e/f/d.mp3, the subdirectries entry will be subdirectories c/e/f/. If input_files is ['/a/b', '/c'] and files are found at ['file:///a/b/d.mp3', '[file:///c/e/f/g.mp3'], subdirectories will be ['b/d', 'c/e/f'] Subdirectories might be different for various files because multiple paths can be provided in the args. Parameters ---------- input_files : string[] Array of paths (not uris) """ # The GUI has its own way of going through subdirectories. # If one of the files is a directory, walk over the files in that # and append each one to parsed_files if -r is provided. subdirectories = [] parsed_files = [] for input_path in input_files: # accept tilde (~) to point to home directories, get absolute path input_path = os.path.realpath(os.path.expanduser(input_path)) if os.path.isfile(input_path): # for every appended file, also append to # subdirectories subdirectories.append('') parsed_files.append(input_path) elif not os.path.isdir(input_path): logger.error('path {} does not exist'.format(input_path)) # walk over directories to add the files of all the subdirectories elif os.path.isdir(input_path): if input_path[-1] == os.sep: input_path = input_path[:-1] if input_path.rfind(os.sep) != -1: parent = input_path[:input_path.rfind(os.sep)] else: parent = input_path # but only if -r option was provided if settings.get('recursive'): for dirpath, _, filenames in os.walk(input_path): for filename in filenames: if dirpath[-1] != os.sep: dirpath += os.sep # dirpath: for example a/b/c/e/f/ parsed_files.append(dirpath + filename) subdir = os.path.relpath(dirpath, parent) + os.sep if subdir == './': subdir = '' subdirectories.append(subdir) else: # else it didn't go into any directory. # Provide some information about how to logger.error( '{} is a directory. Use -r to go into all subdirectories.' .format(input_path) ) # if not a file and not a dir it doesn't exist. skip parsed_files = list(map(filename_to_uri, parsed_files)) return parsed_files, subdirectories class CLIConvert: """Main class that runs the conversion.""" def __init__(self, input_files): """Start the conversion of all the files specified in input_files. To control the conversion and the handling of directories, command line arguments have to be provided which are stored in the global 'settings' variable. input_files is an array of string paths. """ logger.info( 'checking files and walking dirs in the specified paths…' ) # CLICheck will exit(1) if no input_files available and resolve # all files in input_files and also figure out which files can be # converted. file_checker = CLICheck(input_files) loop = GLib.MainLoop() context = loop.get_context() name_generator = TargetNameGenerator() suffix = name_generator.suffix name_generator.suffix = suffix conversions = TaskQueue() self.started_tasks = 0 self.num_conversions = 0 sound_files = file_checker.get_sound_files() for sound_file in sound_files: if not sound_file.readable: filename = beautify_uri(sound_file.uri) logger.info( 'skipping \'{}\': not an audiofile'.format(filename) ) continue converter = Converter(sound_file, name_generator) converter.existing_behaviour = settings.get('existing') conversions.add(converter) self.num_conversions += 1 if self.num_conversions == 0: logger.info('no audio files for conversion found…') exit(2) logger.info('starting conversion of {} files…'.format( len(sound_files) )) self.conversions = conversions def finished(_=None): total_time = conversions.get_duration() logger.info('converted {} files in {}'.format( len(sound_files), format_time(total_time) )) conversions.connect('done', finished) conversions.run() while not conversions.finished: # make the eventloop of glibs async stuff run until finished: context.iteration(may_block=True) # do another one to print the queue done message context.iteration(may_block=False) class CLICheck: """Print all the tags of the specified files to the console.""" def __init__( self, input_files, verbose=False ): """Print all the tags of the specified files to the console. To go into subdirectories of paths provided, the -r command line argument should be provided, which is stored in the global 'settings' variable. It will exit soundconverter if input_files contains no files (maybe because -r is missing and the specified path is a dir) Parameters ---------- input_files : string[] an array of string paths. verbose : bool if True, will print tags, readable and non readable paths """ input_files, subdirectories = prepare_files_list(input_files) if len(input_files) == 0: # prepare_files_list will print something like # "use -r to go into subdirectories" logger.info('no files found…') exit(1) discoverers = TaskQueue() sound_files = [] for subdirectory, input_file in zip(subdirectories, input_files): sound_file = SoundFile(input_file) # by storing it in subfolders, the original subfolder structure # (relative to the directory that was provided as input in the # cli) can be restored in the target dir sound_file.subfolders = subdirectory sound_files.append(sound_file) add_discoverers(discoverers, sound_files) discoverers.run() loop = GLib.MainLoop() context = loop.get_context() while not discoverers.finished: # main_iteration is needed for the typefinder taskqueue to run # calling this like crazy is the fastest way context.iteration(True) self.discoverers = discoverers.all_tasks sound_files = [] for discoverer in self.discoverers: sound_files += discoverer.sound_files if verbose: for sound_file in sound_files: if sound_file.readable: self.print(sound_file) else: logger.info('{} is not an audiofile'.format( beautify_uri(sound_file.uri) )) def get_sound_files(self): """Get all SoundFiles.""" return get_sound_files(self.discoverers) def print(self, sound_file): """Print tags of a file, or write that it doesn't have tags.""" logger.info(beautify_uri(sound_file.uri)) if len(sound_file.tags) > 0: for key in sorted(sound_file.tags): value = sound_file.tags[key] logger.info((' {}: {}'.format(key, value))) else: logger.info((' no tags found')) soundconverter-4.0.5/soundconverter/interface/filelist.py000066400000000000000000000353551460501237000240160ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import os import time from gettext import gettext as _ from gettext import ngettext from gi.repository import GObject, Gtk, Gio, Gdk, GLib, Pango from soundconverter.util.fileoperations import unquote_filename, vfs_walk from soundconverter.util.soundfile import SoundFile from soundconverter.util.taskqueue import TaskQueue from soundconverter.util.logger import logger from soundconverter.gstreamer.discoverer import add_discoverers from soundconverter.util.error import show_error from soundconverter.interface.notify import notification from soundconverter.interface.mainloop import gtk_iteration, idle from soundconverter.util.formatting import format_time # Names of columns in the file list MODEL = [ GObject.TYPE_STRING, # visible filename GObject.TYPE_PYOBJECT, # soundfile GObject.TYPE_FLOAT, # progress GObject.TYPE_STRING, # status GObject.TYPE_STRING, # complete filename ] COLUMNS = ['filename'] class FileList: """List of files added by the user.""" # List of MIME types which we accept for drops. drop_mime_types = ['text/uri-list', 'text/plain', 'STRING'] def __init__(self, window, builder): self.window = window self.discoverers = None self.filelist = set() self.model = Gtk.ListStore(*MODEL) self.progress_cache = {} self.widget = builder.get_object('filelist') self.widget.props.fixed_height_mode = True self.sortedmodel = Gtk.TreeModelSort(model=self.model) self.widget.set_model(self.sortedmodel) self.sortedmodel.set_sort_column_id(4, Gtk.SortType.ASCENDING) self.widget.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.widget.drag_dest_set( Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY ) targets = [ (accepted, 0, i) for i, accepted in enumerate(self.drop_mime_types) ] self.widget.drag_dest_set_target_list(targets) self.widget.connect('drag-data-received', self.drag_data_received) renderer = Gtk.CellRendererProgress() column = Gtk.TreeViewColumn( 'progress', renderer, value=2, text=3, ) column.props.sizing = Gtk.TreeViewColumnSizing.FIXED self.widget.append_column(column) self.progress_column = column self.progress_column.set_visible(False) renderer = Gtk.CellRendererText() renderer.set_property('ellipsize', Pango.EllipsizeMode.MIDDLE) column = Gtk.TreeViewColumn( 'Filename', renderer, markup=0, ) column.props.sizing = Gtk.TreeViewColumnSizing.FIXED column.set_expand(True) self.widget.append_column(column) self.window.progressbarstatus.hide() self.invalid_files_list = [] self.good_uris = [] def drag_data_received(self, widget, context, x, y, selection, mime_id, time): widget.stop_emission('drag-data-received') if 0 <= mime_id < len(self.drop_mime_types): text = selection.get_data().decode('utf-8') uris = [uri.strip() for uri in text.split('\n')] self.add_uris(uris) context.finish(True, False, time) def get_files(self): """Return all valid SoundFile objects.""" return [i[1] for i in self.sortedmodel] @idle def add_uris(self, uris, base=None, extensions=None): """Add URIs that should be converted to the list in the GTK interface. uris is a list of string URIs, which are absolute paths starting with 'file://' extensions is a list of strings like ['.ogg', '.oga'], in which case only files of this type are added to the list. This can be useful when files of multiple types are inside a directory and only some of them should be converted. Default:None which accepts all types. """ self.progress_cache = {} if len(uris) == 0: return start_t = time.time() files = [] self.window.set_status(_('Scanning files…')) # for whichever reason, that set_status needs some more iterations # to show up: gtk_iteration(True) self.window.progressbarstatus.show() self.window.progressbarstatus.set_fraction(0) for uri in uris: gtk_iteration() if not uri: continue if uri.startswith('cdda:'): show_error( 'Cannot read from Audio CD.', 'Use SoundJuicer Audio CD Extractor instead.' ) return info = Gio.file_parse_name(uri).query_file_type( Gio.FileMonitorFlags.NONE, None ) if info == Gio.FileType.DIRECTORY: logger.info('walking: \'{}\''.format(uri)) if len(uris) == 1: # if only one folder is passed to the function, # use its parent as base path. base = os.path.dirname(uri) # get a list of all the files as URIs in # that directory and its subdirectories filelist = vfs_walk(uri) accepted = [] if extensions: for filename in filelist: for extension in extensions: if filename.lower().endswith(extension): accepted.append(filename) filelist = accepted files.extend(filelist) else: files.append(uri) files = [f for f in files if not f.endswith('~SC~')] if len(files) == 0: show_error('No files found!', '') if not base: base = os.path.commonprefix(files) if base and not base.endswith('/'): # we want a common folder base = base[0:base.rfind('/')] base += '/' else: base += '/' scan_t = time.time() logger.info('analysing file integrity') # self.good_uris will be populated # by the discoverer. # It is a list of uris and only contains those files # that can be handled by gstreamer self.good_uris = [] self.discoverers = TaskQueue() sound_files = [] for filename in files: sound_file = SoundFile(filename, base) sound_files.append(sound_file) add_discoverers(self.discoverers, sound_files) self.discoverers.connect('done', self.discoverer_queue_ended) self.discoverers.run() self.window.set_status('{}'.format(_('Adding Files…'))) logger.info('adding: {} files'.format(len(files))) # show progress and enable GTK main loop iterations # so that the ui stays responsive self.window.progressbarstatus.set_text('0/{}'.format(len(files))) self.window.progressbarstatus.set_show_text(True) while self.discoverers.running: progress = self.discoverers.get_progress()[0] if progress: completed = int(progress * len(files)) self.window.progressbarstatus.set_fraction(progress) self.window.progressbarstatus.set_text( '{}/{}'.format(completed, len(files)) ) gtk_iteration() logger.info('Discovered {} audiofiles in {} s'.format( len(files), round(self.discoverers.get_duration(), 1) )) self.window.progressbarstatus.set_show_text(False) # see if one of the files with an audio extension # was not readable. known_audio_types = [ '.flac', '.mp3', '.aac', '.m4a', '.mpeg', '.opus', '.vorbis', '.ogg', '.wav' ] # invalid_files is the number of files that are not # added to the list in the current function call invalid_files = 0 # out of those files, that many have an audio file extension broken_audiofiles = 0 sound_files = [] for discoverer in self.discoverers.all_tasks: sound_files += discoverer.sound_files for sound_file in sound_files: # create a list of human readable file paths # that were not added to the list if not sound_file.readable: filename = sound_file.filename extension = os.path.splitext(filename)[1].lower() if extension in known_audio_types: broken_audiofiles += 1 subfolders = sound_file.subfolders relative_path = os.path.join(subfolders, filename) self.invalid_files_list.append(relative_path) invalid_files += 1 continue if sound_file.uri in self.filelist: logger.info('file already present: \'{}\''.format( sound_file.uri )) continue self.append_file(sound_file) if invalid_files > 0: self.window.invalid_files_button.set_visible(True) if len(files) == invalid_files == 1: # case 1: the single file that should be added is not supported show_error( _('The specified file is not supported!'), _('Either because it is broken or not an audio file.') ) elif len(files) == invalid_files: # case 2: all files that should be added cannot be added show_error( _('All {} specified files are not supported!').format( len(files) ), _('Either because they are broken or not audio files.') ) else: # case 3: some files could not be added (that can already be # because there is a single picture in a folder of hundreds # of sound files). Show an error if this skipped file has a # soundfile extension, otherwise don't bother the user. logger.info( '{} of {} files were not added to the list'.format( invalid_files, len(files) ) ) if broken_audiofiles > 0: show_error( ngettext( 'One audio file could not be read by GStreamer!', '{} audio files could not be read by GStreamer!', broken_audiofiles ).format(broken_audiofiles), _( 'Check "Invalid Files" in the menu for more ' 'information.' ) ) else: # case 4: all files were successfully added. No error message pass self.window.set_status() self.window.progressbarstatus.hide() end_t = time.time() logger.debug( 'Added %d files in %.2fs (scan %.2fs, add %.2fs)' % ( len(files), end_t - start_t, scan_t - start_t, end_t - scan_t ) ) def discoverer_queue_ended(self, queue): # all tasks done self.window.set_sensitive() self.window.conversion_ended() total_time = queue.get_duration() msg = _('Tasks done in %s') % format_time(total_time) errors = [ task.error for task in queue.done if task.error is not None ] if len(errors) > 0: msg += ', {} error(s)'.format(len(errors)) self.window.set_status(msg) if not self.window.is_active(): notification(msg) readable = [] for discoverer in self.discoverers.all_tasks: for sound_file in discoverer.sound_files: if sound_file.readable: readable.append(sound_file) self.good_uris = [sound_file.uri for sound_file in readable] self.window.set_status() self.window.progressbarstatus.hide() def cancel(self): if self.discoverers is not None: self.discoverers.cancel() def format_cell(self, sound_file): """Take a SoundFile and return a human readable path to it.""" return GLib.markup_escape_text(unquote_filename(sound_file.filename)) def set_row_progress(self, number, progress): """Update the progress bar of a single row/file.""" # when convertin a lot of files updating all progress bars really becomes # quite an expensive task cached = self.progress_cache.get(number, 0) # - progress_cache is faster than self.model for this optimization # - skip small changes # - make sure it will be set to 1 even if the change is small if (progress == 1 and cached != 1) or abs(cached - progress) > 0.02: self.model[number][2] = progress * 100.0 self.progress_cache[number] = progress return def hide_row_progress(self): self.progress_column.set_visible(False) def show_row_progress(self): self.progress_column.set_visible(True) def append_file(self, sound_file): """Add a valid SoundFile object to the list of files in the GUI. Parameters ---------- sound_file : SoundFile This soundfile is expected to be readable by gstreamer """ self.model.append([ self.format_cell(sound_file), sound_file, 0.0, '', sound_file.uri ]) self.filelist.add(sound_file.uri) sound_file.filelist_row = len(self.model) - 1 def remove(self, iterator): uri = self.model.get(iterator, 1)[0].uri self.filelist.remove(uri) self.model.remove(iterator) def is_nonempty(self): try: self.model.get_iter((0,)) except ValueError: return False return True soundconverter-4.0.5/soundconverter/interface/gladewindow.py000066400000000000000000000034021460501237000244730ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA class GladeWindow: callbacks = {} builder = None def __init__(self, builder): """Init GladeWindow, store the objects's potential callbacks for later. You have to call connect_signals() when all descendants are ready. """ GladeWindow.builder = builder GladeWindow.callbacks.update(dict( [[x, getattr(self, x)] for x in dir(self) if x.startswith('on_')] )) def __getattr__(self, attribute): """Allow direct use of window widget.""" widget = GladeWindow.builder.get_object(attribute) if widget is None: raise AttributeError('Widget \'{}\' not found'.format(attribute)) self.__dict__[attribute] = widget # cache result return widget @staticmethod def connect_signals(): """Connect all GladeWindow objects to theirs respective signals.""" GladeWindow.builder.connect_signals(GladeWindow.callbacks) soundconverter-4.0.5/soundconverter/interface/mainloop.py000066400000000000000000000032251460501237000240100ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import time from gi.repository import Gtk, GLib def idle(func): def callback(*args, **kwargs): GLib.idle_add(func, *args, **kwargs) return callback def gtk_iteration(blocking=False): """Keeps the UI and event loops for gst going. Paramters --------- blocking : bool If True, will call main_iteration even if no events are pending, which will wait until an event is available. """ if blocking: while True: Gtk.main_iteration() if not Gtk.events_pending(): break else: while Gtk.events_pending(): Gtk.main_iteration() def gtk_sleep(duration): """Sleep while keeping the GUI responsive.""" start = time.time() while time.time() < start + duration: time.sleep(0.01) gtk_iteration() soundconverter-4.0.5/soundconverter/interface/notify.py000066400000000000000000000024101460501237000234750ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA def _notification_dummy(message): pass notification = _notification_dummy try: import gi gi.require_version('Notify', '0.7') from gi.repository import Notify def _notification(message): try: Notify.Notification('SoundConverter', message).show() except Exception: pass if Notify.init('Basics'): notification = _notification except (ImportError, ValueError): pass soundconverter-4.0.5/soundconverter/interface/preferences.py000066400000000000000000000444621460501237000245030ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import urllib.request import urllib.parse import urllib.error from gettext import gettext as _ from gi.repository import Gtk, GLib from soundconverter.util.fileoperations import filename_to_uri, \ beautify_uri from soundconverter.util.soundfile import SoundFile from soundconverter.util.settings import get_gio_settings from soundconverter.util.formats import get_quality, \ get_bitrate_from_settings from soundconverter.util.namegenerator import TargetNameGenerator, \ subfolder_patterns, basename_patterns, locale_patterns_dict from soundconverter.util.logger import logger from soundconverter.gstreamer.converter import available_elements from soundconverter.interface.gladewindow import GladeWindow encoders = [ ('audio/x-vorbis', 'vorbisenc', 'Ogg Vorbis (.ogg)'), ('audio/mpeg', 'lamemp3enc', 'MP3 (.mp3)'), ('audio/x-flac', 'flacenc', 'FLAC Lossless (.flac)'), ('audio/x-wav', 'wavenc', 'MS Wave (.wav)'), ('audio/x-m4a', 'fdkaacenc,faac,avenc_aac', 'AAC (.m4a)'), ('audio/ogg; codecs=opus', 'opusenc', 'Opus (.opus)'), ] rates = [8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000, 128000] class PreferencesDialog(GladeWindow): sensitive_names = [ 'vorbis_quality', 'choose_folder', 'create_subfolders', 'subfolder_pattern', 'jobs_spinbutton', 'resample_hbox', 'force_mono' ] def __init__(self, builder, parent): self.settings = get_gio_settings() GladeWindow.__init__(self, builder) self.present_mime_types = [] self.populate_output_formats() self.dialog = builder.get_object('prefsdialog') self.dialog.set_transient_for(parent) self.example = builder.get_object('example_filename') self.force_mono = builder.get_object('force_mono') self.target_bitrate = None self.sensitive_widgets = {} for name in self.sensitive_names: self.sensitive_widgets[name] = builder.get_object(name) assert self.sensitive_widgets[name] is not None self.set_widget_initial_values() self.set_sensitive() tip = [_('Available patterns:')] for k in sorted(locale_patterns_dict.values()): tip.append(k) self.custom_filename.set_tooltip_text('\n'.join(tip)) self.output_mime_type.set_id_column(0) def populate_output_formats(self): """Add the available encoders to the liststore for formats.""" for mime, encoder_name, display_name in encoders: # valid default output? encoder_present = any( e in available_elements for e in encoder_name.split(',') ) if not encoder_present: logger.error( '{} {} is not supported, a gstreamer plugins package ' 'is possibly missing.'.format(mime, encoder_name) ) continue # add to supported outputs self.present_mime_types.append(mime) self.liststore8.append((display_name,)) def set_widget_initial_values(self): self.quality_tabs.set_show_tabs(False) if self.settings.get_boolean('same-folder-as-input'): widget = self.same_folder_as_input else: widget = self.into_selected_folder widget.set_active(True) self.target_folder_chooser = Gtk.FileChooserDialog( title=_('Add Folder…'), transient_for=self.dialog, action=Gtk.FileChooserAction.SELECT_FOLDER ) self.target_folder_chooser.add_button( Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL ) self.target_folder_chooser.add_button( Gtk.STOCK_OPEN, Gtk.ResponseType.OK ) self.target_folder_chooser.set_select_multiple(False) self.target_folder_chooser.set_local_only(False) uri = filename_to_uri(urllib.parse.quote( self.settings.get_string('selected-folder'), safe='/:@' )) self.target_folder_chooser.set_uri(uri) self.update_selected_folder() widget = self.create_subfolders widget.set_active(self.settings.get_boolean('create-subfolders')) widget = self.subfolder_pattern active = self.settings.get_int('subfolder-pattern-index') model = widget.get_model() model.clear() for pattern, desc in subfolder_patterns: i = model.append() model.set(i, 0, desc) widget.set_active(active) if self.settings.get_boolean('replace-messy-chars'): widget = self.replace_messy_chars widget.set_active(True) if self.settings.get_boolean('delete-original'): self.delete_original.set_active(True) current_mime_type = self.settings.get_string('output-mime-type') for i, mime in enumerate(self.present_mime_types): if current_mime_type == mime: self.output_mime_type.set_active(i) self.change_mime_type(current_mime_type) # display information about mp3 encoding if 'lamemp3enc' not in available_elements: widget = self.lame_absent widget.show() widget = self.vorbis_quality quality = self.settings.get_double('vorbis-quality') quality_setting = get_quality('audio/x-vorbis', quality, reverse=True) widget.set_active(-1) self.vorbis_quality.set_active(quality_setting) if self.settings.get_boolean('vorbis-oga-extension'): self.vorbis_oga_extension.set_active(True) widget = self.aac_quality quality = self.settings.get_int('aac-quality') quality_setting = get_quality('audio/x-m4a', quality, reverse=True) widget.set_active(quality_setting) widget = self.opus_quality quality = self.settings.get_int('opus-bitrate') quality_setting = get_quality('audio/ogg; codecs=opus', quality, reverse=True) widget.set_active(quality_setting) widget = self.flac_compression quality = self.settings.get_int('flac-compression') quality_setting = get_quality('audio/x-flac', quality, reverse=True) widget.set_active(quality_setting) widget = self.wav_sample_width quality = self.settings.get_int('wav-sample-width') quality_setting = get_quality('audio/x-wav', quality, reverse=True) widget.set_active(quality_setting) mode = self.settings.get_string('mp3-mode') self.change_mp3_mode(mode) widget = self.basename_pattern active = self.settings.get_int('name-pattern-index') model = widget.get_model() model.clear() for pattern, desc in basename_patterns: iter = model.append() model.set(iter, 0, desc) widget.set_active(active) self.custom_filename.set_text( self.settings.get_string('custom-filename-pattern') ) if self.basename_pattern.get_active() == len(basename_patterns)-1: self.custom_filename_box.set_sensitive(True) else: self.custom_filename_box.set_sensitive(False) output_resample = self.settings.get_boolean('output-resample') self.resample_toggle.set_active(output_resample) cell = Gtk.CellRendererText() self.resample_rate.pack_start(cell, True) self.resample_rate.add_attribute(cell, 'text', 0) rate = self.settings.get_int('resample-rate') try: idx = rates.index(rate) except ValueError: idx = -1 self.resample_rate.set_active(idx) self.force_mono.set_active(self.settings.get_boolean('force-mono')) self.jobs.set_active(self.settings.get_boolean('limit-jobs')) self.jobs_spinbutton.set_value(self.settings.get_int('number-of-jobs')) self.update_example() def update_selected_folder(self): self.into_selected_folder.set_use_underline(False) self.into_selected_folder.set_label( _('Into folder %s') % beautify_uri(self.settings.get_string('selected-folder')) ) def update_example(self): """Refresh the example in the settings dialog.""" sound_file = SoundFile('file:///foo/bar.flac') sound_file.tags.update({ 'track-number': 1, 'track-count': 99, 'album-disc-number': 2, 'album-disc-count': 9 }) sound_file.tags.update(locale_patterns_dict) try: generator = TargetNameGenerator() except ValueError: # since this is just for displaying the example we don't # care about any errors return generator.replace_messy_chars = False example_path = GLib.markup_escape_text( generator.generate_target_uri(sound_file, for_display=True) ) position = 0 replaces = [] while True: beginning = example_path.find('{', position) if beginning == -1: break end = example_path.find('}', beginning) tag = example_path[beginning:end+1] available_tags = [ v.lower() for v in list(locale_patterns_dict.values()) ] if tag.lower() in available_tags: bold_tag = tag.replace( '{', '{' ).replace( '}', '}' ) replaces.append([tag, bold_tag]) else: red_tag = tag.replace( '{', '{' ).replace( '}', '}' ) replaces.append([tag, red_tag]) position = beginning + 1 for tag, formatted in replaces: example_path = example_path.replace(tag, formatted) self.example.set_markup(example_path) markup = '{}'.format( _('Target bitrate: %s') % get_bitrate_from_settings() ) self.approx_bitrate.set_markup(markup) def set_sensitive(self): for widget in list(self.sensitive_widgets.values()): widget.set_sensitive(False) same_folder = self.settings.get_boolean('same-folder-as-input') for name in ['choose_folder', 'create_subfolders', 'subfolder_pattern']: self.sensitive_widgets[name].set_sensitive(not same_folder) self.sensitive_widgets['vorbis_quality'].set_sensitive( self.settings.get_string('output-mime-type') == 'audio/x-vorbis') self.sensitive_widgets['jobs_spinbutton'].set_sensitive( self.settings.get_boolean('limit-jobs')) self.sensitive_widgets['resample_hbox'].set_sensitive(True) self.sensitive_widgets['force_mono'].set_sensitive(True) def run(self): self.dialog.run() self.dialog.hide() def on_delete_original_toggled(self, button): self.settings.set_boolean('delete-original', button.get_active()) def on_same_folder_as_input_toggled(self, button): self.settings.set_boolean('same-folder-as-input', True) self.set_sensitive() self.update_example() def on_into_selected_folder_toggled(self, button): self.settings.set_boolean('same-folder-as-input', False) self.set_sensitive() self.update_example() def on_choose_folder_clicked(self, button): ret = self.target_folder_chooser.run() folder = self.target_folder_chooser.get_uri() self.target_folder_chooser.hide() if ret == Gtk.ResponseType.OK: if folder: folder = urllib.parse.unquote(folder) self.settings.set_string('selected-folder', folder) self.update_selected_folder() self.update_example() def on_create_subfolders_toggled(self, button): self.settings.set_boolean('create-subfolders', button.get_active()) self.update_example() def on_subfolder_pattern_changed(self, combobox): self.settings.set_int('subfolder-pattern-index', combobox.get_active()) self.update_example() def on_basename_pattern_changed(self, combobox): self.settings.set_int('name-pattern-index', combobox.get_active()) if combobox.get_active() == len(basename_patterns)-1: self.custom_filename_box.set_sensitive(True) else: self.custom_filename_box.set_sensitive(False) self.update_example() def on_custom_filename_changed(self, entry): self.settings.set_string('custom-filename-pattern', entry.get_text()) self.update_example() def on_replace_messy_chars_toggled(self, button): self.settings.set_boolean('replace-messy-chars', button.get_active()) def change_mime_type(self, mime_type): """Show the correct quality tab based on the selected format.""" self.settings.set_string('output-mime-type', mime_type) self.set_sensitive() self.update_example() tabs = { 'audio/x-vorbis': 0, 'audio/mpeg': 1, 'audio/x-flac': 2, 'audio/x-wav': 3, 'audio/x-m4a': 4, 'audio/ogg; codecs=opus': 5, } self.quality_tabs.set_current_page(tabs[mime_type]) def on_output_mime_type_changed(self, combo): """Called when the format is changed on the UI.""" selected_display_name = self.liststore8[combo.get_active()][0] for mime, _, display_name in encoders: if display_name == selected_display_name: self.change_mime_type(mime) return def on_output_mime_type_ogg_vorbis_toggled(self, button): if button.get_active(): self.change_mime_type('audio/x-vorbis') def on_output_mime_type_flac_toggled(self, button): if button.get_active(): self.change_mime_type('audio/x-flac') def on_output_mime_type_wav_toggled(self, button): if button.get_active(): self.change_mime_type('audio/x-wav') def on_output_mime_type_mp3_toggled(self, button): if button.get_active(): self.change_mime_type('audio/mpeg') def on_output_mime_type_aac_toggled(self, button): if button.get_active(): self.change_mime_type('audio/x-m4a') def on_output_mime_type_opus_toggled(self, button): if button.get_active(): self.change_mime_type('audio/ogg; codecs=opus') def on_vorbis_quality_changed(self, combobox): if combobox.get_active() == -1: return # just de-selectionning fquality = get_quality('audio/x-vorbis', combobox.get_active()) self.settings.set_double('vorbis-quality', fquality) self.update_example() def on_vorbis_oga_extension_toggled(self, toggle): self.settings.set_boolean('vorbis-oga-extension', toggle.get_active()) self.update_example() def on_aac_quality_changed(self, combobox): quality = get_quality('audio/x-m4a', combobox.get_active()) self.settings.set_int('aac-quality', quality) self.update_example() def on_opus_quality_changed(self, combobox): quality = get_quality('audio/ogg; codecs=opus', combobox.get_active()) self.settings.set_int('opus-bitrate', quality) self.update_example() def on_wav_sample_width_changed(self, combobox): quality = get_quality('audio/x-wav', combobox.get_active()) self.settings.set_int('wav-sample-width', quality) self.update_example() def on_flac_compression_changed(self, combobox): quality = get_quality('audio/x-flac', combobox.get_active()) self.settings.set_int('flac-compression', quality) self.update_example() def on_force_mono_toggle(self, button): self.settings.set_boolean('force-mono', button.get_active()) self.update_example() def change_mp3_mode(self, mode): keys = {'cbr': 0, 'abr': 1, 'vbr': 2} self.mp3_mode.set_active(keys[mode]) keys = { 'cbr': 'mp3-cbr-quality', 'abr': 'mp3-abr-quality', 'vbr': 'mp3-vbr-quality', } quality = self.settings.get_int(keys[mode]) index = get_quality('audio/mpeg', quality, mode, reverse=True) self.mp3_quality.set_active(index) self.update_example() def on_mp3_mode_changed(self, combobox): mode = ('cbr', 'abr', 'vbr')[combobox.get_active()] self.settings.set_string('mp3-mode', mode) self.change_mp3_mode(mode) def on_mp3_quality_changed(self, combobox): keys = { 'cbr': 'mp3-cbr-quality', 'abr': 'mp3-abr-quality', 'vbr': 'mp3-vbr-quality' } mode = self.settings.get_string('mp3-mode') bitrate = get_quality('audio/mpeg', combobox.get_active(), mode) self.settings.set_int(keys[mode], bitrate) self.update_example() def on_resample_rate_changed(self, combobox): selected = combobox.get_active() self.settings.set_int('resample-rate', rates[selected]) self.update_example() def on_resample_toggle(self, rstoggle): self.settings.set_boolean('output-resample', rstoggle.get_active()) self.resample_rate.set_sensitive(rstoggle.get_active()) self.update_example() def on_jobs_toggled(self, jtoggle): self.settings.set_boolean('limit-jobs', jtoggle.get_active()) self.jobs_spinbutton.set_sensitive(jtoggle.get_active()) def on_jobs_spinbutton_value_changed(self, jspinbutton): self.settings.set_int('number-of-jobs', int(jspinbutton.get_value())) soundconverter-4.0.5/soundconverter/interface/ui.py000066400000000000000000000462401460501237000226130ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import os from gettext import gettext as _ from gi.repository import Gtk, GLib from soundconverter.util.fileoperations import filename_to_uri from soundconverter.util.settings import settings from soundconverter.util.namegenerator import TargetNameGenerator, \ filepattern from soundconverter.util.taskqueue import TaskQueue from soundconverter.util.logger import logger from soundconverter.gstreamer.converter import Converter from soundconverter.util.error import set_error_handler from soundconverter.util.formatting import format_time from soundconverter.interface.gladewindow import GladeWindow from soundconverter.interface.preferences import PreferencesDialog from soundconverter.interface.filelist import FileList from soundconverter.interface.mainloop import gtk_iteration, gtk_sleep class SoundConverterWindow(GladeWindow): """Main application class.""" sensitive_names = [ 'remove', 'clearlist', 'convert_button' ] unsensitive_when_converting = [ 'remove', 'clearlist', 'prefs_button', 'toolbutton_addfile', 'toolbutton_addfolder', 'convert_button', 'filelist', 'menubar' ] def __init__(self, builder): GladeWindow.__init__(self, builder) self.widget = builder.get_object('window') self.prefs = PreferencesDialog(builder, self.widget) GladeWindow.connect_signals() self.filelist = FileList(self, builder) self.filelist_selection = self.filelist.widget.get_selection() self.filelist_selection.connect('changed', self.selection_changed) self.existsdialog = builder.get_object('existsdialog') self.existsdialog.message = builder.get_object('exists_message') self.existsdialog.apply_to_all = builder.get_object('apply_to_all') self.addfolderchooser = Gtk.FileChooserDialog( title=_('Add Folder…'), transient_for=self.widget, action=Gtk.FileChooserAction.SELECT_FOLDER ) self.addfolderchooser.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.addfolderchooser.add_button(Gtk.STOCK_OPEN, Gtk.ResponseType.OK) self.addfolderchooser.set_select_multiple(True) self.addfolderchooser.set_local_only(False) self.combo = Gtk.ComboBox() self.store = Gtk.ListStore(str) self.combo.set_model(self.store) combo_rend = Gtk.CellRendererText() self.combo.pack_start(combo_rend, True) self.combo.add_attribute(combo_rend, 'text', 0) for files in filepattern: self.store.append(['{} ({})'.format(files[0], files[1])]) self.combo.set_active(0) self.addfolderchooser.set_extra_widget(self.combo) self.addchooser = Gtk.FileChooserDialog( title=_('Add Files…'), transient_for=self.widget, action=Gtk.FileChooserAction.OPEN ) self.addchooser.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) self.addchooser.add_button(Gtk.STOCK_OPEN, Gtk.ResponseType.OK) self.addchooser.set_select_multiple(True) self.addchooser.set_local_only(False) self.addfile_combo = Gtk.ComboBox() self.addfile_store = Gtk.ListStore(str) self.addfile_combo.set_model(self.addfile_store) combo_rend = Gtk.CellRendererText() self.addfile_combo.pack_start(combo_rend, True) self.addfile_combo.add_attribute(combo_rend, 'text', 0) self.addfile_combo.connect('changed', self.on_addfile_combo_changed) self.pattern = [] for files in filepattern: self.pattern.append(files[1]) self.addfile_store.append(['{} ({})'.format(files[0], files[1])]) self.addfile_combo.set_active(0) self.addchooser.set_extra_widget(self.addfile_combo) # self.aboutdialog.set_property('name', NAME) # self.aboutdialog.set_property('version', VERSION) # self.aboutdialog.set_transient_for(self.widget) self.converter_queue = None self.sensitive_widgets = {} for name in self.sensitive_names: self.sensitive_widgets[name] = builder.get_object(name) for name in self.unsensitive_when_converting: self.sensitive_widgets[name] = builder.get_object(name) self.set_sensitive() self.set_status() # This bit of code constructs a list of methods for binding to Gtk+ # signals. This way, we don't have to maintain a list manually, # saving editing effort. It's enough to add a method to the suitable # class and give the same name in the .glade file. def __getattr__(self, attribute): """Allow direct use of window widget.""" widget = self.builder.get_object(attribute) if widget is None: raise AttributeError('Widget \'{}\' not found'.format(attribute)) self.__dict__[attribute] = widget # cache result return widget def close(self, *args): logger.debug('closing…') self.filelist.cancel() if self.converter_queue is not None: self.converter_queue.cancel() if self.filelist.discoverers is not None: self.filelist.discoverers.cancel() self.widget.hide() self.widget.destroy() # wait one second… # yes, this sucks badly, but signals can still be called by gstreamer # so wait a bit for things to calm down, and quit. # It can be optionally changed in the settings dict to speed up tests. gtk_sleep(settings.get('gtk_close_sleep', 1)) Gtk.main_quit() return True on_window_delete_event = close on_quit_activate = close on_quit_button_clicked = close def on_add_activate(self, *args): last_folder = self.prefs.settings.get_string('last-used-folder') if last_folder: self.addchooser.set_current_folder_uri(last_folder) ret = self.addchooser.run() folder = self.addchooser.get_current_folder_uri() self.addchooser.hide() if ret == Gtk.ResponseType.OK and folder: self.filelist.add_uris(self.addchooser.get_uris()) self.prefs.settings.set_string('last-used-folder', folder) self.set_sensitive() def addfile_filter_cb(self, info, pattern): filename = info.display_name return filename.lower().endswith(pattern[1:]) def on_addfile_combo_changed(self, w): """Set a new filter for the filechooserwidget.""" filefilter = Gtk.FileFilter() if self.addfile_combo.get_active(): filefilter.add_custom( Gtk.FileFilterFlags.DISPLAY_NAME, self.addfile_filter_cb, self.pattern[self.addfile_combo.get_active()] ) else: filefilter.add_pattern('*.*') self.addchooser.set_filter(filefilter) def on_addfolder_activate(self, *args): last_folder = self.prefs.settings.get_string('last-used-folder') if last_folder: self.addfolderchooser.set_current_folder_uri(last_folder) ret = self.addfolderchooser.run() folders = self.addfolderchooser.get_uris() folder = self.addfolderchooser.get_current_folder_uri() self.addfolderchooser.hide() if ret == Gtk.ResponseType.OK: extensions = None if self.combo.get_active(): patterns = filepattern[self.combo.get_active()][1].split(';') extensions = [os.path.splitext(p)[1] for p in patterns] self.filelist.add_uris(folders, None, extensions) if folder: self.prefs.settings.set_string('last-used-folder', folder) self.set_sensitive() def on_remove_activate(self, *args): model, paths = self.filelist_selection.get_selected_rows() while paths: # Remove files childpath = model.convert_path_to_child_path(paths[0]) i = self.filelist.model.get_iter(childpath) self.filelist.remove(i) model, paths = self.filelist_selection.get_selected_rows() # re-assign row numbers files = self.filelist.get_files() for i, sound_file in enumerate(files): sound_file.filelist_row = i self.set_sensitive() def on_clearlist_activate(self, *args): self.filelist.model.clear() self.filelist.filelist.clear() self.filelist.invalid_files_list = [] self.invalid_files_button.set_visible(False) self.set_sensitive() self.set_status() def on_showinvalid_activate(self, *args): self.showinvalid_dialog_label.set_label( 'Those are the files that could ' 'not be added to the list due to not\ncontaining audio data, ' 'being broken or being incompatible to gstreamer:' ) buffer = Gtk.TextBuffer() buffer.set_text('\n'.join(self.filelist.invalid_files_list)) self.showinvalid_dialog_list.set_buffer(buffer) self.showinvalid_dialog.run() self.showinvalid_dialog.hide() def do_convert(self): """Start the conversion.""" name_generator = TargetNameGenerator() files = self.filelist.get_files() self.converter_queue = TaskQueue() self.converter_queue.connect('done', self.on_queue_finished) for sound_file in files: gtk_iteration() self.converter_queue.add(Converter( sound_file, name_generator )) # all was OK self.set_status() self.converter_queue.run() # try to make the progress bars look smooth by calling this often self.update_progress() GLib.timeout_add(1000 / 20, self.update_progress) # since the remining time shows only seconds, there is no need to # call it more often than once per second self.update_remaining() GLib.timeout_add(1000, self.update_remaining) self.set_sensitive() def update_remaining(self): """Refresh the remaining time in the title bar and bottom left. Can be used in GLib.timeout_add. """ paused = self.converter_queue.paused running = len(self.converter_queue.running) > 0 if not running: # conversion done self.filelist.hide_row_progress() return False if not paused and running: converter_queue = self.converter_queue if converter_queue is None: self.progressfile.set_markup('') self.filelist.hide_row_progress() self.progressbar.set_show_text(False) return if converter_queue.paused: self.progressbar.set_text(_('Paused')) title = '{} - {}'.format(_('SoundConverter'), _('Paused')) self.widget.set_title(title) return # how long it has already been running duration = converter_queue.get_duration() if duration < 1: # wait a bit not to display crap self.progressbar.set_text(_('Estimating…')) self.progressbar.set_show_text(True) return # remainign duration remaining = converter_queue.get_remaining() if remaining is not None: seconds = max(remaining % 60, 1) minutes = remaining / 60 remaining = _('%d:%02d left') % (minutes, seconds) self.progressbar.set_text(remaining) self.progressbar.set_show_text(True) title = '{} - {}'.format(_('SoundConverter'), remaining) self.widget.set_title(title) # return True to keep the GLib timeout running return True def update_progress(self): """Refresh all progress bars, including the total progress. Can be used in GLib.timeout_add. """ paused = self.converter_queue.paused running = len(self.converter_queue.running) > 0 if not running: # conversion done self.filelist.hide_row_progress() return False self.filelist.show_row_progress() if not paused and running: # if paused, don't refresh the progress total_progress, task_progress = self.converter_queue.get_progress() self.progressbar.set_fraction(total_progress) for task, progress in task_progress: if progress == 0: # otherwise the ui becomes really laggy with too many files continue self.set_file_progress(task.sound_file, progress) # return True to keep the GLib timeout running return True def on_convert_button_clicked(self, *args): # reset and show progress bar self.progress_frame.show() self.status_frame.hide() self.set_status(_('Converting')) for soundfile in self.filelist.get_files(): self.set_file_progress(soundfile, 0.0) # start conversion self.do_convert() # update ui self.set_sensitive() def on_button_pause_clicked(self, *args): if self.converter_queue.paused: self.converter_queue.resume() else: self.converter_queue.pause() def on_button_cancel_clicked(self, *args): self.converter_queue.cancel() self.set_status(_('Canceled')) self.set_sensitive() self.conversion_ended() def on_select_all_activate(self, *args): self.filelist.widget.get_selection().select_all() def on_clear_activate(self, *args): self.filelist.widget.get_selection().unselect_all() def on_preferences_activate(self, *args): self.prefs.run() on_prefs_button_clicked = on_preferences_activate def on_about_activate(self, *args): about = self.aboutdialog about.set_property('name', NAME) about.set_property('version', VERSION) about.set_transient_for(self.widget) # TODO: about.set_property('translator_credits', TRANSLATORS) about.run() def on_aboutdialog_response(self, *args): self.aboutdialog.hide() def selection_changed(self, *args): self.set_sensitive() def on_queue_finished(self, __=None): """Should be called when all conversions are completed.""" total_time = self.converter_queue.get_duration() msg = _('Conversion done in %s') % format_time(total_time) error_count = len([ task for task in self.converter_queue.done if task.error ]) if error_count > 0: msg += ', {} error(s)'.format(error_count) logger.info(msg) self.conversion_ended(msg) def conversion_ended(self, msg=None): """Reset the window. Parameters ---------- msg : string If set, will display this on the bottom left. """ self.progress_frame.hide() self.filelist.hide_row_progress() self.status_frame.show() self.widget.set_sensitive(True) self.set_status(msg) try: from gi.repository import Unity name = "soundconverter.desktop" launcher = Unity.LauncherEntry.get_for_desktop_id(name) launcher.set_property("progress_visible", False) except ImportError: pass def set_widget_sensitive(self, name, sensitivity): self.sensitive_widgets[name].set_sensitive(sensitivity) def is_running(self): """Is a conversion (both paused and running) currently going on?""" queue = self.converter_queue return queue is not None and queue.running def set_sensitive(self): """Update the sensitive state of UI for the current state.""" for widget_name in self.unsensitive_when_converting: self.set_widget_sensitive(widget_name, not self.is_running()) if not self.is_running(): self.set_widget_sensitive( 'remove', self.filelist_selection.count_selected_rows() > 0 ) self.set_widget_sensitive( 'convert_button', self.filelist.is_nonempty() ) def set_file_progress(self, sound_file, progress): """Show the progress bar of a single file in the UI.""" row = sound_file.filelist_row self.filelist.set_row_progress(row, progress) def set_status(self, text=None, ready=True): if not text: text = _('Ready') if ready: self.widget.set_title(_('SoundConverter')) self.statustext.set_markup(text) self.set_sensitive() gtk_iteration(True) def is_active(self): return self.widget.is_active() NAME = VERSION = None # use a global array as pointer, so that the constructed # SoundConverterWindow can be accessed from unittests win = [None] class ErrorDialog: def __init__(self, builder): self.dialog = builder.get_object('error_dialog') self.dialog.set_transient_for(builder.get_object('window')) self.primary = builder.get_object('primary_error_label') self.secondary = builder.get_object('secondary_error_label') def show_error(self, primary, secondary=None): self.primary.set_markup(str(primary)) self.secondary.set_markup(str(secondary) if secondary else '') if secondary: logger.error('{}: {}'.format(primary, secondary)) else: logger.error(primary) self.dialog.run() self.dialog.hide() def gui_main(name, version, gladefile, input_files): """Launch the soundconverter in GTK GUI mode. The values for name, version and gladefile are determined during `make` and provided when this function is called in soundconverter.py input_files is an array of string paths, read from the command line arguments. It can also be an empty array since the user interface provides the tools for adding files. """ global NAME, VERSION NAME, VERSION = name, version GLib.set_application_name(name) GLib.set_prgname(name) input_files = list(map(filename_to_uri, input_files)) builder = Gtk.Builder() builder.set_translation_domain(name.lower()) builder.add_from_file(gladefile) window = SoundConverterWindow(builder) set_error_handler(ErrorDialog(builder)) window.filelist.add_uris(input_files) window.set_sensitive() global win win[0] = window Gtk.main() soundconverter-4.0.5/soundconverter/util/000077500000000000000000000000001460501237000206335ustar00rootroot00000000000000soundconverter-4.0.5/soundconverter/util/__init__.py000066400000000000000000000015121460501237000227430ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA soundconverter-4.0.5/soundconverter/util/error.py000066400000000000000000000025731460501237000223450ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA from soundconverter.util.logger import logger class ErrorPrinter: """Default error handler""" def show_error(self, primary, secondary=None): if secondary: logger.error('{}: {}'.format(primary, secondary)) else: logger.error(primary) pass error_handler = ErrorPrinter() def set_error_handler(handler): """Add a function to show errors on the UI.""" global error_handler error_handler = handler def show_error(primary, secondary=None): error_handler.show_error(primary, secondary) soundconverter-4.0.5/soundconverter/util/fileoperations.py000066400000000000000000000125351460501237000242360ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import os import re import urllib.request import urllib.parse import urllib.error from gi.repository import Gio from soundconverter.util.logger import logger def unquote_filename(filename): """Transform an URL encoded filename to a non-encoded one. E.g. '%20' will be changed to ' ' """ return urllib.parse.unquote(str(filename)) def beautify_uri(uri): """Convert an URI to a normal path. Also returns the prefix, for example 'file://'""" match = split_uri(uri) if match[0] is not None: # take the path part from the uri path = match[1] path = unquote_filename(path) else: # no uri, take as is, return any existing %20 strings without # modifying them. path = uri return path def vfs_walk(uri): """Similar to os.path.walk, but with Gio. uri -- the base folder uri. return a list of uri. """ filelist = [] try: dirlist = Gio.file_parse_name(uri).enumerate_children( '*', Gio.FileMonitorFlags.NONE, None ) for file_info in dirlist: info = dirlist.get_child(file_info).query_file_type( Gio.FileMonitorFlags.NONE, None ) uri = dirlist.get_child(file_info).get_uri(); if info == Gio.FileType.DIRECTORY: filelist.extend(vfs_walk(uri)) if info == Gio.FileType.REGULAR: filelist.append(str(uri)) except Exception as e: # this is impossible to write unittests for, because this only happens # when the owner of this directory is e.g. root logger.error('Failed to walk "%s": "%s"', uri, e) return filelist def vfs_getparent(path): """Get folder name.""" gfile = Gio.file_parse_name(path) return gfile.get_parent() def vfs_unlink(filename): """Delete a gnomevfs file.""" gfile = Gio.file_parse_name(filename) return gfile.delete(None) def vfs_rename(original, newname): """Rename a gnomevfs file.""" gforiginal = Gio.file_parse_name(original) gfnew = Gio.file_parse_name(newname) if not gfnew.get_parent().query_exists(None): fgnew_uri = gfnew.get_parent().get_uri() logger.debug('Creating folder: \'{}\''.format(fgnew_uri)) Gio.File.make_directory_with_parents(gfnew.get_parent(), None) gforiginal.move(gfnew, Gio.FileCopyFlags.NONE, None, None, None) def vfs_exists(filename): """Check if file or URI exists.""" if not is_uri(filename): # gio does not support relative path syntax filename = os.path.realpath(filename) gfile = Gio.file_parse_name(filename) return gfile.query_exists(None) def split_uri(uri): """Match a regex to the uri that results in: [0]: scheme and authority, might be None if not an uri [1]: filename. This still has to be unquoted! """ if not isinstance(uri, str): raise ValueError('cannot split {} {}'.format(type(uri), uri)) match = re.match(r'^([a-zA-Z]+://([^/]+?)?)?(/.*)', uri) if match is None: # not an uri return None, uri return match[1], match[3] def is_uri(uri): return split_uri(uri)[0] is not None def filename_to_uri(filename, prefix='file://'): """Convert a filename to a valid uri. Parameters ---------- filename : string Filename can be a relative or absolute path, or an URI. If an URI, only characters that are not escaped yet will be escaped. prefix : string for example 'file://' """ match = split_uri(filename) if match[0]: # it's an URI! It can be basically just returned as is. But to make # sure that all characters are URI escaped, the path will be # escaped again. Don't quote the schema. # e.g. a pattern contained file:// in front but inserting tags into it # resulted in whitespaces. # ' %20' to ' ' to '%20%20'. Don't quote it to '%20%2520'! filename = unquote_filename(match[1]) filename = urllib.parse.quote(filename) uri = match[0] + filename else: # convert to absolute path filename = os.path.realpath(filename) # it's a normal path. If it happens to contain %25, it might be # part of the album name or something. ' %20' should become '%20%2520' uri = prefix + urllib.parse.quote(filename) return uri # GStreamer gnomevfssrc helpers def vfs_encode_filename(filename): return filename_to_uri(filename) def file_encode_filename(filename): return Gio.get_local_path_from_uri(filename).replace(' ', r'\ ') soundconverter-4.0.5/soundconverter/util/formats.py000066400000000000000000000177151460501237000226730ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA from soundconverter.util.settings import get_gio_settings from soundconverter.util.logger import logger filename_denylist = ( '*.iso', ) def get_mime_type_mapping(): """Return a mapping of file extension to mime type.""" mime_types = { 'ogg': 'audio/x-vorbis', 'flac': 'audio/x-flac', 'wav': 'audio/x-wav', 'mp3': 'audio/mpeg', 'aac': 'audio/x-m4a', 'm4a': 'audio/x-m4a', 'opus': 'audio/ogg; codecs=opus' } return mime_types def get_mime_type(audio_format): """Return the matching mime-type or None if it is not supported. Parameters ---------- audio_format : string for example 'mp3' or 'audio/mpeg' for which the result would be 'audio/mpeg' """ mime_types = get_mime_type_mapping() if audio_format not in mime_types.values(): # possibly a file extension return mime_types.get(audio_format, None) else: # already a mime string return audio_format def get_file_extension(mime): """Return the matching file extension or '?' if it is not supported. Examples: 'mp3', 'flac'. Parameters ---------- mime : string mime string (like 'audio/x-m4a') """ mime_types = get_mime_type_mapping() if mime in mime_types: # already an extension suffix = mime if suffix == 'ogg': if get_gio_settings().get_boolean('vorbis-oga-extension'): suffix = 'oga' return suffix else: mime2ext = {mime: ext for ext, mime in mime_types.items()} return mime2ext.get(mime, '?') def get_quality_setting_name(): """Get the settings name for quality for the set output-mime-type.""" settings = get_gio_settings() mime_type = settings.get_string('output-mime-type') if mime_type == 'audio/mpeg': mode = settings.get_string('mp3-mode') setting_name = { 'cbr': 'mp3-cbr-quality', 'abr': 'mp3-abr-quality', 'vbr': 'mp3-vbr-quality' }[mode] else: setting_name = { 'audio/x-vorbis': 'vorbis-quality', 'audio/x-m4a': 'aac-quality', 'audio/ogg; codecs=opus': 'opus-bitrate', 'audio/x-flac': 'flac-compression', 'audio/x-wav': 'wav-sample-width' }[mime_type] return setting_name def get_bitrate_from_settings(): """Get a human readable bitrate from quality settings. For example '~224 kbps' """ settings = get_gio_settings() mime_type = settings.get_string('output-mime-type') mode = settings.get_string('mp3-mode') bitrate = 0 approx = True if mime_type == 'audio/x-vorbis': quality = max(0, min(1, settings.get_double('vorbis-quality'))) * 10 quality = round(quality) bitrates = (64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 500) bitrate = bitrates[quality] elif mime_type == 'audio/x-m4a': bitrate = settings.get_int('aac-quality') elif mime_type == 'audio/ogg; codecs=opus': bitrate = settings.get_int('opus-bitrate') elif mime_type == 'audio/mpeg': mp3_quality_setting_name = { 'cbr': 'mp3-cbr-quality', 'abr': 'mp3-abr-quality', 'vbr': 'mp3-vbr-quality' }[mode] setting = settings.get_int(mp3_quality_setting_name) if mode == 'vbr': # depends on the input audio return 'N/A' if mode == 'cbr': approx = False bitrate = setting if mode == 'abr': bitrate = setting elif mime_type == 'audio/x-wav': approx = False output_resample = settings.get_boolean('output-resample') resample_rate = settings.get_int('resample-rate') sample_width = settings.get_int('wav-sample-width') if output_resample: bitrate = sample_width * resample_rate / 1000 else: # the actual bitrate will depend on the input audio, which # cannot be known in the settings menu beforehand. Assume 44100 # which is the most common. bitrate = sample_width * 44100 / 1000 if bitrate: if approx: return '~{} kbps'.format(bitrate) else: return '{} kbps'.format(bitrate) else: return 'N/A' def get_default_quality(mime, mode='vbr'): """Return a default quality if the -q parameter is not set. Parameters ---------- mime : string mime type mode : string one of 'cbr', 'abr' and 'vbr' for mp3 """ # get 6-tuple of qualities default = { 'audio/x-vorbis': 1.0, 'audio/x-m4a': 400, 'audio/ogg; codecs=opus': 192, 'audio/mpeg': { 'cbr': 320, 'abr': 320, 'vbr': 0, # inverted ! }, 'audio/x-wav': 16, 'audio/x-flac': 5 }[mime] if isinstance(default, dict): default = default[mode] return default def get_quality(mime, value, mode='vbr', reverse=False): """Map an integer between 0 and 5 to a proper quality/compression value. Parameters ---------- mime : string mime type value : number between 0 and 5, or 0 and 2 for flac and wav. -1 indexes the highest quality. mode : string one of 'cbr', 'abr' and 'vbr' for mp3 reverse : bool default False. If True, this function returns the original value-parameter given a quality setting. Value becomes the input for the quality then. """ # get 6-tuple of qualities qualities = { 'audio/x-vorbis': (0.0, 0.2, 0.4, 0.6, 0.8, 1.0), 'audio/x-m4a': (64, 96, 128, 192, 256, 320), 'audio/ogg; codecs=opus': (48, 64, 96, 128, 160, 192), 'audio/mpeg': { 'cbr': (64, 96, 128, 192, 256, 320), 'abr': (64, 96, 128, 192, 256, 320), 'vbr': (9, 7, 5, 3, 1, 0), # inverted ! }, 'audio/x-wav': (8, 16, 32), 'audio/x-flac': (0, 5, 8) }[mime] if isinstance(qualities, dict): qualities = qualities[mode] # return depending on function parameters if reverse: if isinstance(value, float): # floats are inaccurate, search for close value for i, quality in enumerate(qualities): if abs(value - quality) < 0.01: return i if value in qualities: return qualities.index(value) # might be some custom value set e.g. in batch mode. # the reverse mode is only interesting for the ui though, because # it has predefined qualities as opposed to batch. So this is # either a setting leaking from some tests or the batch mode # persisted something. if mime == 'mp3': ftype_mode = '{} {}'.format(mime, mode) else: ftype_mode = mime logger.warning( 'tried to index unknow {} quality {}'.format(ftype_mode, value) ) return None else: # normal index if value > len(qualities): raise ValueError('quality index {} has to be < {}'.format( value, len(qualities) )) return qualities[value] soundconverter-4.0.5/soundconverter/util/formatting.py000066400000000000000000000024521460501237000233620ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA """Functions for formatting strings.""" def format_time(seconds): units = [(86400, 'd'), (3600, 'h'), (60, 'm'), (1, 's')] seconds = round(seconds) result = [] for factor, unity in units: count = int(seconds / factor) seconds -= count * factor if count > 0 or (factor == 1 and not result): result.append('{} {}'.format(count, unity)) assert seconds == 0 return ' '.join(result) soundconverter-4.0.5/soundconverter/util/logger.py000066400000000000000000000043751460501237000224750ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA # logging & debugging from soundconverter.util.settings import settings import logging class Formatter(logging.Formatter): def format(self, record): if record.levelno == logging.INFO and not settings['debug']: # if not launched with --debug, then don't print "INFO:" self._style._fmt = '%(msg)s' # noqa else: # see https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit # for those numbers color = { logging.WARNING: 33, logging.ERROR: 31, logging.FATAL: 31, logging.DEBUG: 36, logging.INFO: 32, }.get(record.levelno, 0) if settings['debug']: self._style._fmt = ( # noqa '\033[{}m%(levelname)s\033[0m: ' '%(filename)s, line %(lineno)d, %(message)s' ).format(color) else: self._style._fmt = ( # noqa '\033[{}m%(levelname)s\033[0m: %(message)s' ).format(color) return super().format(record) logger = logging.getLogger() handler = logging.StreamHandler() handler.setFormatter(Formatter()) logger.addHandler(handler) def update_verbosity(): """Set the logging verbosity according to the settings object.""" if settings['debug']: logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) soundconverter-4.0.5/soundconverter/util/namegenerator.py000066400000000000000000000430141460501237000240360ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA """Utils for generating names.""" import string import time import re import os from random import random import urllib.request import urllib.parse import urllib.error import unicodedata from gettext import gettext as _ from soundconverter.util.fileoperations import vfs_exists, filename_to_uri, \ split_uri, is_uri, beautify_uri from soundconverter.util.settings import get_gio_settings from soundconverter.util.formats import get_file_extension basename_patterns = [ ('{inputname}', _('Same as input, but replacing the suffix')), ('{inputname}.{ext}', _('Same as input, but with an additional suffix')), ('{track-number:02}-{title}', _('Track number - title')), ('{title}', _('Track title')), ('{artist}-{title}', _('Artist - title')), ('Custom', _('Custom filename pattern')), ] subfolder_patterns = [ ('{album-artist}/{album}', _('artist/album')), ('{album-artist}-{album}', _('artist-album')), ('{album-artist} - {album}', _('artist - album')), ] # custom filename patterns english_patterns = 'Artist Album Album-Artist Title Track Total Genre Date ' \ 'Year Timestamp DiscNumber DiscTotal Ext' # traductors: These are the custom filename patterns. Only if it makes sense. locale_patterns = _('Artist Album Album-Artist Title Track Total Genre Date ' 'Year Timestamp DiscNumber DiscTotal Ext') patterns_formats = ( '{artist}', '{album}', '{album-artist}', '{title}', '{track-number:02}', '{track-count:02}', '{genre}', '{date}', '{year}', '{timestamp}', '{album-disc-number}', '{album-disc-count}', '{target-ext}', ) # Name and pattern for CustomFileChooser filepattern = ( (_('All files'), '*.*'), ('MP3', '*.mp3'), ('Ogg Vorbis', '*.ogg;*.oga'), ('iTunes AAC ', '*.m4a'), ('Windows WAV', '*.wav'), ('AAC', '*.aac'), ('FLAC', '*.flac'), ('AC3', '*.ac3') ) # Example: { 'artist': '{Artist}' } locale_patterns_dict = dict(list(zip( [p.lower() for p in english_patterns.split()], ['{%s}' % p for p in locale_patterns.split()] ))) # add english and locale custom_patterns = english_patterns + ' ' + locale_patterns # convert to list custom_patterns = ['{%s}' % p for p in custom_patterns.split()] # and finally to dict, thus removing doubles. # Example: { '{Künstler}': '{artist}' } depending on the locale custom_patterns = dict(list(zip(custom_patterns, patterns_formats * 2))) def process_custom_pattern(pattern): """Convert e.g. '{Künster}' to '{artist}' in the pattern.""" for locale_name, tag_name in custom_patterns.items(): pattern = pattern.replace(locale_name, tag_name) return pattern def get_basename_pattern(): """Get the currently selected or custom filename pattern. For example '{artist}-{title}', without target extension. A custom-filename-pattern can also serve the purpose of a subfolder-pattern by having forward slashes. """ settings = get_gio_settings() index = settings.get_int('name-pattern-index') if index >= len(basename_patterns) or index < -1: index = 0 if index in (-1, len(basename_patterns) - 1): pattern = settings.get_string('custom-filename-pattern') return process_custom_pattern(pattern) # an index of -1 selects the last entry on purpose return basename_patterns[index][0] def get_subfolder_pattern(): """Get the currently selected subfolder pattern. For example '{album-artist}/{album}', to create those new subfolders in the slected_folder based on tags. """ # Since it is not a free text input on the ui, process_custom_pattern # doesn't have to be used settings = get_gio_settings() index = settings.get_int('subfolder-pattern-index') if index >= len(subfolder_patterns) or index < -1: index = 0 return subfolder_patterns[index][0] class TargetNameGenerator: """Generator for creating the target name from an input name. Create this class every time when the queue for conversion starts, because it remembers all relevant settings to avoid affecting the name generation of a running conversion by changing them in the ui. This class, once created, can create the names for all conversions in the queue, there is no need to create one TargetNameGenerator per Converter. """ def __init__(self): # remember settings from when TargetNameGenerator was created: settings = get_gio_settings() self.same_folder_as_input = settings.get_boolean('same-folder-as-input') self.selected_folder = settings.get_string('selected-folder') self.output_mime_type = settings.get_string('output-mime-type') self.vorbis_oga_extension = settings.get_boolean('vorbis-oga-extension') self.create_subfolders = settings.get_boolean('create-subfolders') self.replace_messy_chars = settings.get_boolean('replace-messy-chars') self.subfolder_pattern = get_subfolder_pattern() self.basename_pattern = get_basename_pattern() self.suffix = get_file_extension(self.output_mime_type) # Enforcing such rules helps to avoid undefined and untested # behaviour of functions and to reduce their complexity. if not self.same_folder_as_input and not is_uri(self.selected_folder): raise ValueError( 'your selected folder {} should be in URI format.'.format( self.selected_folder ) ) # If you wish to provide an uri scheme like ftp:// it should be in # the selected_folder instead. if is_uri(self.basename_pattern) or is_uri(self.subfolder_pattern): raise ValueError( 'patterns should be patterns, not complete URIs.' ) @staticmethod def _unicode_to_ascii(unicode_string): # thanks to http://code.activestate.com/recipes/251871/ return str(unicodedata.normalize('NFKD', unicode_string).encode('ASCII', 'ignore'), 'ASCII') @staticmethod def safe_string(name): """Replace all special characters in a string. Replace all characters that are not ascii, digits or '.' '-' '_' '/' with '_'. Umlaute will be changed to their closest non-umlaut counterpart. Will not break URI schemes. """ scheme, name = split_uri(name) nice_chars = string.ascii_letters + string.digits + '.-_/' return (scheme or '') + ''.join([ c if c in nice_chars else '_' for c in name ]) @staticmethod def safe_uri(parent, child): """Replace all unusual characters in child for non-existing folders. Replace all characters that are not ascii, digits or '.' '-' '_' '/' with '_'. Umlaute will be changed to their closest non-umlaut counterpart. Will not be applied on the part of the path that already exists, as that part apparently is already safe. Returns an URI. Parameters ---------- parent : string Part of filename starting from the beginning of it that should be considered safe already and not further modified. Has to be an URI. For example "file:///home/user/" child : string Part of the path that needs to be modified to be safe. May already be URI escaped, but doesn't have to. Substrings of this path may already exist, in which case they will not be modified (" " won't be replaced with "_" then, They will be escaped to %20 though to fit the URI format) For example "music/artist/file.mp3" """ # some validation of input parameters if not is_uri(parent): raise ValueError('expected the parent to be an URI') if child.startswith(parent): raise ValueError( 'wrong usage. Child "{}" should be the '.format(child) + 'child of parent "{}", not the whole path'.format(child) ) if child.startswith('./'): raise ValueError( 'you cannot provide a relative path to the cwd starting ' 'with "./", the child is intended to be relative to the ' 'parent.' ) if len(child) == 0: raise ValueError('empty filename') if is_uri(child): raise ValueError( 'expected child "{}" to be a subfolder, '.format(child) + 'path not a complete URI.' ) # ensure URI escaping of the parent parent = filename_to_uri(parent) # ensure correct slahes like "file:///parent/" "subdir1/subdir2" if not parent.endswith('/'): parent += '/' if child.startswith('/'): child = child[1:] # figure out how much of the path already exists # split into for example [/test', '/baz.flac'] or ['qux.mp3'] split = [s for s in re.split(r'((?:/|^)[^/]+)', child) if s != ''] safe = '' while len(split) > 0: part = split.pop(0) if vfs_exists(parent + safe + part): safe += part else: # put the remaining unknown non-existing path back together # and make it safe rest = part + ''.join(split) # the path is in uri format, so before applying safe_string, # unquote it. # otherwise '%20' becomes '_20' when it should be '_' rest = urllib.parse.unquote(rest) rest = TargetNameGenerator._unicode_to_ascii(rest) rest = TargetNameGenerator.safe_string(rest) safe += rest break if parent: safe = parent + safe # ensure URI escaping of the result safe = filename_to_uri(safe) return safe def find_format_string_tags(self, pattern): """Given a pattern find all tags that can be substituted. For example for {i}{a}b{c}{{d}}{e}c{{{g}}}{hhh} it should find i, a, c, e, g, hhh """ variables = [] candidates = re.findall(r'{+.+?}+', pattern) for candidate in candidates: # check if the candidate is made out of an uneven number of # curly braces. Two curly braces are a single escaped one. if not re.match(r'^(?:{{)*([^{}]+?)(?:}})*$', candidate): # get the inner curly brace content variable = re.search(r'([^{}]+)', candidate)[1] variables.append(variable) return variables def fill_pattern(self, sound_file, pattern): """Fill tags into a filename pattern for a SoundFile. Parameters ---------- sound_file : SoundFile The soundfile has to have tags, which can be done with the discoverer task. pattern : string For example '{album-artist}/{album}/{title}'. Should not be an URI """ tags = sound_file.tags filename = beautify_uri(sound_file.uri) filename = os.path.basename(filename) filename, ext = os.path.splitext(filename) assert '/' not in filename mapping = { 'filename': filename, 'inputname': filename, 'ext': ext[1:], 'target-ext': self.suffix, 'album': _('Unknown Album'), 'artist': _('Unknown Artist'), 'album-artist': _('Unknown Artist'), 'title': filename, 'track-number': 0, 'track-count': 0, 'genre': _('Unknown Genre'), 'year': _('Unknown Year'), 'date': _('Unknown Date'), 'album-disc-number': 0, 'album-disc-count': 0, } for key in tags: mapping[key] = tags[key] if isinstance(mapping[key], str): # take care of tags containing slashes mapping[key] = mapping[key].replace('/', '-') if key.endswith('-number'): mapping[key] = int(mapping[key]) # when artist set & album-artist not, use artist for album-artist if 'artist' in tags and 'album-artist' not in tags: mapping['album-artist'] = tags['artist'] # add timestamp to substitution dict -- this could be split into more # entries for more fine-grained control over the string by the user... timestamp_string = time.strftime('%Y%m%d_%H_%M_%S') mapping['timestamp'] = timestamp_string # if some tag is called "venue", map it to "Unknown Venue" tags_in_pattern = self.find_format_string_tags(pattern) unknown_tags = [tag for tag in tags_in_pattern if tag not in mapping] for tag in unknown_tags: mapping[tag] = 'Unknown {}'.format(tag.capitalize()) # now fill the tags in the pattern with values: result = pattern.format(**mapping) return result def generate_temp_path(self, sound_file): """Generate a random filename that doesn't exist yet.""" basename = os.path.split(sound_file.uri)[1] parent_uri = self._get_common_target_uri(sound_file) while True: rand = str(random())[-6:] if self.replace_messy_chars: filename = basename + '~' + rand + '~SC~' final_uri = TargetNameGenerator.safe_uri(parent_uri, filename) else: final_uri = parent_uri + basename + '~' + rand + '~SC~' if not vfs_exists(final_uri): return final_uri def _get_target_subfolder(self, sound_file): """Get subfolders that should be created for the target file. Might be None. They may also already exist, for example because a previous conversion created them. """ basename_pattern = self.basename_pattern subfolder_pattern = self.subfolder_pattern subfolder = None if self.create_subfolders: subfolder = self.fill_pattern(sound_file, subfolder_pattern) elif sound_file.subfolders is not None and '/' not in basename_pattern: # use existing subfolders between base_path and the soundfile, but # only if the basename_pattern does not create subfolders. # For example: # .subfolders may have an existing structure of artist/album, # whereas basename might create a new structure of year/artist subfolder = sound_file.subfolders return subfolder def _get_common_target_uri(self, sound_file): """Get the directory into which all files are converted. Ends with '/' """ if self.same_folder_as_input: parent = sound_file.base_path else: parent = self.selected_folder if not parent.endswith('/'): parent += '/' # ensure it is an URI, possibly adding file:// return filename_to_uri(parent) def _get_target_filename(self, sound_file): """Get the output filename for the soundfile.""" # note, that basename_pattern might actually contain subfolders, so # it's not always only a basename. # It's the deepest part of the target path though. return '{}.{}'.format( self.fill_pattern(sound_file, self.basename_pattern), self.suffix ) def generate_target_uri(self, sound_file, for_display=False): """Generate a target filename in URI format based on the settings. Patterns will be populated with tags. Parameters ---------- sound_file : SoundFile for_display : bool Format it nicely in order to print it somewhere """ # the beginning of the uri that all soundfiles will have in common # does not need to be processed in safe_uri. parent_uri = self._get_common_target_uri(sound_file) # custom subfolders and such, changes depending on the soundfile subfolder = self._get_target_subfolder(sound_file) # filename, also changes depending on the soundfile filename = self._get_target_filename(sound_file) # put together if subfolder is not None: child = os.path.join(subfolder, filename) else: child = filename # child should be quoted to form a proper URI together with parent child = urllib.parse.quote(child) if child.startswith('/'): # os.path.join will omit parent_uri otherwise child = child[1:] # subfolder and basename need to be cleaned if self.replace_messy_chars: path = self.safe_uri(parent_uri, child) else: path = os.path.join(parent_uri, child) if for_display: return beautify_uri(path) else: return path soundconverter-4.0.5/soundconverter/util/settings.py000066400000000000000000000042631460501237000230520ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA """Holds all the settings for both cli arguments as well as Gio settings. Gio Settings are set in the UI and retained over restarts. In batch mode, some of the CLI args are written into that temporarily. """ from multiprocessing import cpu_count from gi.repository import Gio # Use get_gio_settings instead of importing this directly, because this # object changes in tests, and also this object will be replaced with a # memory backend for the batch mode. _gio_settings = Gio.Settings(schema='org.soundconverter') # do not import! def get_gio_settings(): """Return the current Gio.Settings object. Use this isntead of importing _gio_settings directly. """ return _gio_settings # Arguments that can exclusively set over the CLI settings = { 'main': 'gui', 'debug': False } def set_gio_settings(settings): """Overwrite the default Gio.Settings object. For example use a memory backend instead. Parameters ---------- settings : Gio.Settings You can get this by using for example Gio.new_with_backend or Gio.Settings """ global _gio_settings _gio_settings = settings def get_num_jobs(): """Return the number of jobs that should be run in parallel.""" return ( _gio_settings.get_int('number-of-jobs') if _gio_settings.get_boolean('limit-jobs') else cpu_count() ) soundconverter-4.0.5/soundconverter/util/soundfile.py000066400000000000000000000062751460501237000232070ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import os from gi.repository import GLib from soundconverter.util.fileoperations import unquote_filename, is_uri class SoundFile: """Meta data information about a sound file (uri, tags).""" __slots__ = [ 'uri', 'base_path', 'filename', 'tags', 'filelist_row', 'subfolders', 'readable', 'duration', 'info' ] def __init__(self, uri, base_path=None): """Create a SoundFile object. if base_path is set, the uri is cut in three parts, - the base folder, which is a common folder of multiple soundfiles (.base_path) - the remaining subfolders, which would be for example something like artist/album in the existing folder structure. As long as no subfolder pattern is provided, soundconverter will use those subfolders in the output directory. (in .subfolders) - the filename (in .filename) """ # enforcing an uri format reduced the nightmare of handling 2 # different path formats in generate_target_uri if not is_uri(uri): raise ValueError('uri was not an uri: {}!'.format( uri )) if base_path is not None and not is_uri(base_path): raise ValueError('base_path was not an uri: {}!'.format( base_path )) self.uri = uri self.subfolders = None if base_path: if not uri.startswith(base_path): raise ValueError( 'uri {} needs to start with the base_path {}!'.format( uri, base_path ) ) self.base_path = base_path subfolders, filename = os.path.split(uri[len(base_path):]) self.subfolders = unquote_filename(subfolders) self.filename = filename else: self.base_path, self.filename = os.path.split(self.uri) self.base_path += '/' self.filelist_row = None # properties of valid audio are yet to be figured out in a Discoverer self.tags = {} self.readable = False self.duration = None self.info = None @property def filename_for_display(self): """Return the filename in a form suitable for displaying it.""" return GLib.filename_display_name( unquote_filename(self.filename) ) soundconverter-4.0.5/soundconverter/util/task.py000066400000000000000000000040401460501237000221450ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA from gi.repository import GObject class Task(GObject.Object): """Abstract class of a single task.""" def __init__(self): super().__init__() # avoid storing a variable called timer in your inheriting class def get_progress(self): """Fraction of how much of the task is completed. Returns a tuple of (progress, weight), because some tasks may take longer than others (because it processes more audio), which cannot be reflected by the progress alone. The weight might correspond to the length of the audio files for example. """ raise NotImplementedError() def cancel(self): """Cancel the execution of the task.""" raise NotImplementedError() def pause(self): """Pause the execution of the task.""" raise NotImplementedError() def resume(self): """Resume the execution of the task after pausing.""" raise NotImplementedError() def run(self): """Run the task.""" raise NotImplementedError() def done(self): """Emit a "done" event.""" self.emit('done') GObject.signal_new( 'done', Task, GObject.SignalFlags.RUN_FIRST, None, [] ) soundconverter-4.0.5/soundconverter/util/taskqueue.py000066400000000000000000000224541460501237000232230ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import time from queue import Queue from gi.repository import GObject, GLib from soundconverter.util.settings import get_num_jobs from soundconverter.interface.mainloop import gtk_iteration class TaskQueue(GObject.Object): """Executes multiple tasks in parallel.""" def __init__(self): self._on_queue_finished = None # state self.all_tasks = [] self.pending = Queue() self.running = [] self.done = [] self.finished = False self.paused = False self._timer = Timer() super().__init__() def add(self, task): """Add a task to the queue that will be executed later. Parameters ---------- task : Task Any object inheriting from Task """ task.timer = Timer() self.all_tasks.append(task) self.pending.put(task) def get_progress(self, only_running=False): """Get the fraction of tasks that have been completed. returns a tuple of (total progress, task progress) with "task progress" being a list of (task, progress) tuples. """ # some tasks may take longer, in order to communicate that they # provide a weight attribute. if len(self.all_tasks) == 0: return None total_weight = 0 total_progress = 0 tasks = self.running if only_running else self.all_tasks task_progress = [] for task in tasks: progress, weight = task.get_progress() total_progress += progress * weight total_weight += weight task_progress.append((task, progress)) return total_progress / total_weight, task_progress def pause(self): """Pause all tasks.""" self._timer.pause() self.paused = True for task in self.running: task.timer.pause() task.pause() def resume(self): """Resume all tasks after the queue has been paused.""" self._timer.resume() for task in self.running: task.timer.resume() task.resume() self.paused = False def cancel(self): """Stop all tasks.""" self.finished = True for task in self.running: # by calling run it can be resumed, but cancelled tasks will start # from the beginning. The proper way would be to call pause and # resume for such a functionality though. self.pending.put(task) task.timer.stop() task.cancel() self._timer.reset() self.running = [] def task_done(self, task): """One task is done, start another one. This callback has to be called by the task, when the task is done. Parameters ---------- task : Task A completed task """ # avoid adding duplicate signal handlers if the queue is restarted task.disconnect_by_func(self.task_done) if task in self.done: raise Exception('Duplicate task_done call') if self.finished: return task.timer.stop() self.done.append(task) self.running.remove(task) if self.pending.qsize() > 0: self.start_next() elif len(self.running) == 0: self.finished = True self._timer.stop() self.emit('done') def start_next(self, _=None): """Start the next task if available.""" if self.pending.qsize() > 0: task = self.pending.get() task.connect('done', self.task_done) self.running.append(task) # - Just looping over self.pending causes too many tasks to be running in # parallel # - There is no semaphore mechanism for glib to do it in a simple while # loop, in order to limit it to num_jobs # - I don't think GLib.Mutex works with main-loop single-thread # parallelization and the whole thread will stop here # - Telling tasks to start the next task via a python callback or event # causes the runtime to crash due to recursion with too many tasks. # However, idle_add prevents those recursion depth problems GLib.idle_add(task.run) task.timer.start() def run(self): """Run all tasks.""" self.finished = False self._timer.start() num_jobs = get_num_jobs() while self.pending.qsize() > 0 and len(self.running) < num_jobs: # Run as many tasks as the configured number of jobs. Finished tasks will # trigger running the next task via a event self.start_next() gtk_iteration() def get_duration(self): """Get for how many seconds the queue has been actively running. The time spent while being paused is not included. """ return self._timer.get_duration() def get_remaining(self): """Calculate how many seconds are left until the queue is done.""" if len(self.running) == 0: # cannot be estimated yet return None total_duration = 0 total_remaining_weight = 0 total_processed_weight = 0 max_remaining_weight = -1 for task in self.all_tasks: # duration is the time the timer has been running, not the # audio duration. duration = task.timer.get_duration() # total_duration would be 12s if 12 tasks run for 1s total_duration += duration # weight is actually the audio duration, but it's unit is going # to be canceled in the remaining_duration calculation. It could # be anything as long as all tasks have the same unit of weight. progress, weight = task.get_progress() remaining_weight = (1 - progress) * weight max_remaining_weight = max(remaining_weight, max_remaining_weight) total_remaining_weight += remaining_weight processed_weight = progress * weight total_processed_weight += processed_weight if total_processed_weight == 0: # cannot be calculated yet return None # how many seconds per weight. This remains pretty stable, even when # less processes are running in parallel, because total_duration # is the sum of all task durations and not the queues duration. speed = total_duration / total_processed_weight # how much weight left per process remaining_weight_per_p = total_remaining_weight / len(self.running) remaining_duration = speed * remaining_weight_per_p # if the max_remaining time exceeds the time of the # remaining_duration which especially happens when the conversion # comes to an end while one very large file is being converted, # take that one. if max_remaining_weight != -1: max_remaining = speed * max_remaining_weight remaining = max(max_remaining, remaining_duration) else: remaining = remaining_duration return remaining GObject.signal_new( 'done', TaskQueue, GObject.SignalFlags.RUN_FIRST, None, [] ) class Timer: """Time how long the TaskQueue took.""" # separate class because I would like to not pollute the TaskQueue # with a bunch of timing variables def __init__(self): self.reset() def reset(self): self.run_start_time = None self.pause_duration = 0 self.pause_time = None self.finished_time = None def stop(self): self.finished_time = time.time() def start(self): self.run_start_time = time.time() def pause(self): self.pause_time = time.time() def resume(self): self.pause_duration += time.time() - self.pause_time self.pause_time = None def get_duration(self): """Get for how many seconds the queue has been actively running. The time spent while being paused is not included. """ if self.run_start_time is None: return 0 if self.pause_time is not None: # still being paused pause_duration = time.time() - self.pause_time else: pause_duration = self.pause_duration if self.finished_time is None: # still running finished_time = time.time() else: finished_time = self.finished_time return finished_time - self.run_start_time - pause_duration soundconverter-4.0.5/tests/000077500000000000000000000000001460501237000157405ustar00rootroot00000000000000soundconverter-4.0.5/tests/__init__.py000066400000000000000000000000001460501237000200370ustar00rootroot00000000000000soundconverter-4.0.5/tests/bulk-test-data/000077500000000000000000000000001460501237000205615ustar00rootroot00000000000000soundconverter-4.0.5/tests/bulk-test-data/sample_0.mp3000066400000000000000000000003301460501237000226760ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_1.mp3000066400000000000000000000003301460501237000226770ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_10.mp3000066400000000000000000000003301460501237000227570ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_100.mp3000066400000000000000000000003301460501237000230370ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_101.mp3000066400000000000000000000003301460501237000230400ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_102.mp3000066400000000000000000000003301460501237000230410ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_103.mp3000066400000000000000000000003301460501237000230420ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_104.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_105.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_106.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_107.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_108.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_109.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_11.mp3000066400000000000000000000003301460501237000227600ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_110.mp3000066400000000000000000000003301460501237000230400ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_111.mp3000066400000000000000000000003301460501237000230410ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_112.mp3000066400000000000000000000003301460501237000230420ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_113.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_114.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_115.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_116.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_117.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_118.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_119.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_12.mp3000066400000000000000000000003301460501237000227610ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_120.mp3000066400000000000000000000003301460501237000230410ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_121.mp3000066400000000000000000000003301460501237000230420ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_122.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_123.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_124.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_125.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_126.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_127.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_128.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_129.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_13.mp3000066400000000000000000000003301460501237000227620ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_130.mp3000066400000000000000000000003301460501237000230420ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_131.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_132.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_133.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_134.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_135.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_136.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_137.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_138.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_139.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_14.mp3000066400000000000000000000003301460501237000227630ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_140.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_141.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_142.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_143.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_144.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_145.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_146.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_147.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_148.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_149.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_15.mp3000066400000000000000000000003301460501237000227640ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_150.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_151.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_152.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_153.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_154.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_155.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_156.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_157.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_158.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_159.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_16.mp3000066400000000000000000000003301460501237000227650ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_160.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_161.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_162.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_163.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_164.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_165.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_166.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_167.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_168.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_169.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_17.mp3000066400000000000000000000003301460501237000227660ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_170.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_171.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_172.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_173.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_174.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_175.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_176.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_177.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_178.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_179.mp3000066400000000000000000000003301460501237000230570ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_18.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_180.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_181.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_182.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_183.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_184.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_185.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_186.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_187.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_188.mp3000066400000000000000000000003301460501237000230570ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_189.mp3000066400000000000000000000003301460501237000230600ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_19.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_190.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_191.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_192.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_193.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_194.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_195.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_196.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_197.mp3000066400000000000000000000003301460501237000230570ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_198.mp3000066400000000000000000000003301460501237000230600ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_199.mp3000066400000000000000000000003301460501237000230610ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_2.mp3000066400000000000000000000003301460501237000227000ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_20.mp3000066400000000000000000000003301460501237000227600ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_200.mp3000066400000000000000000000003301460501237000230400ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_201.mp3000066400000000000000000000003301460501237000230410ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_202.mp3000066400000000000000000000003301460501237000230420ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_203.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_204.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_205.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_206.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_207.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_208.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_209.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_21.mp3000066400000000000000000000003301460501237000227610ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_210.mp3000066400000000000000000000003301460501237000230410ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_211.mp3000066400000000000000000000003301460501237000230420ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_212.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_213.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_214.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_215.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_216.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_217.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_218.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_219.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_22.mp3000066400000000000000000000003301460501237000227620ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_220.mp3000066400000000000000000000003301460501237000230420ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_221.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_222.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_223.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_224.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_225.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_226.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_227.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_228.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_229.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_23.mp3000066400000000000000000000003301460501237000227630ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_230.mp3000066400000000000000000000003301460501237000230430ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_231.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_232.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_233.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_234.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_235.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_236.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_237.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_238.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_239.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_24.mp3000066400000000000000000000003301460501237000227640ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_240.mp3000066400000000000000000000003301460501237000230440ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_241.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_242.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_243.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_244.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_245.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_246.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_247.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_248.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_249.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_25.mp3000066400000000000000000000003301460501237000227650ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_250.mp3000066400000000000000000000003301460501237000230450ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_251.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_252.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_253.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_254.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_255.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_256.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_257.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_258.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_259.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_26.mp3000066400000000000000000000003301460501237000227660ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_260.mp3000066400000000000000000000003301460501237000230460ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_261.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_262.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_263.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_264.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_265.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_266.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_267.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_268.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_269.mp3000066400000000000000000000003301460501237000230570ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_27.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_270.mp3000066400000000000000000000003301460501237000230470ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_271.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_272.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_273.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_274.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_275.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_276.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_277.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_278.mp3000066400000000000000000000003301460501237000230570ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_279.mp3000066400000000000000000000003301460501237000230600ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_28.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_280.mp3000066400000000000000000000003301460501237000230500ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_281.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_282.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_283.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_284.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_285.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_286.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_287.mp3000066400000000000000000000003301460501237000230570ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_288.mp3000066400000000000000000000003301460501237000230600ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_289.mp3000066400000000000000000000003301460501237000230610ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_29.mp3000066400000000000000000000003301460501237000227710ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_290.mp3000066400000000000000000000003301460501237000230510ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_291.mp3000066400000000000000000000003301460501237000230520ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_292.mp3000066400000000000000000000003301460501237000230530ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_293.mp3000066400000000000000000000003301460501237000230540ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_294.mp3000066400000000000000000000003301460501237000230550ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_295.mp3000066400000000000000000000003301460501237000230560ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_296.mp3000066400000000000000000000003301460501237000230570ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_297.mp3000066400000000000000000000003301460501237000230600ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_298.mp3000066400000000000000000000003301460501237000230610ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_299.mp3000066400000000000000000000003301460501237000230620ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_3.mp3000066400000000000000000000003301460501237000227010ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_30.mp3000066400000000000000000000003301460501237000227610ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_31.mp3000066400000000000000000000003301460501237000227620ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_32.mp3000066400000000000000000000003301460501237000227630ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_33.mp3000066400000000000000000000003301460501237000227640ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_34.mp3000066400000000000000000000003301460501237000227650ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_35.mp3000066400000000000000000000003301460501237000227660ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_36.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_37.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_38.mp3000066400000000000000000000003301460501237000227710ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_39.mp3000066400000000000000000000003301460501237000227720ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_4.mp3000066400000000000000000000003301460501237000227020ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_40.mp3000066400000000000000000000003301460501237000227620ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_41.mp3000066400000000000000000000003301460501237000227630ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_42.mp3000066400000000000000000000003301460501237000227640ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_43.mp3000066400000000000000000000003301460501237000227650ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_44.mp3000066400000000000000000000003301460501237000227660ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_45.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_46.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_47.mp3000066400000000000000000000003301460501237000227710ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_48.mp3000066400000000000000000000003301460501237000227720ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_49.mp3000066400000000000000000000003301460501237000227730ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_5.mp3000066400000000000000000000003301460501237000227030ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_50.mp3000066400000000000000000000003301460501237000227630ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_51.mp3000066400000000000000000000003301460501237000227640ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_52.mp3000066400000000000000000000003301460501237000227650ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_53.mp3000066400000000000000000000003301460501237000227660ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_54.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_55.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_56.mp3000066400000000000000000000003301460501237000227710ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_57.mp3000066400000000000000000000003301460501237000227720ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_58.mp3000066400000000000000000000003301460501237000227730ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_59.mp3000066400000000000000000000003301460501237000227740ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_6.mp3000066400000000000000000000003301460501237000227040ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_60.mp3000066400000000000000000000003301460501237000227640ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_61.mp3000066400000000000000000000003301460501237000227650ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_62.mp3000066400000000000000000000003301460501237000227660ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_63.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_64.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_65.mp3000066400000000000000000000003301460501237000227710ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_66.mp3000066400000000000000000000003301460501237000227720ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_67.mp3000066400000000000000000000003301460501237000227730ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_68.mp3000066400000000000000000000003301460501237000227740ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_69.mp3000066400000000000000000000003301460501237000227750ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_7.mp3000066400000000000000000000003301460501237000227050ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_70.mp3000066400000000000000000000003301460501237000227650ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_71.mp3000066400000000000000000000003301460501237000227660ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_72.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_73.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_74.mp3000066400000000000000000000003301460501237000227710ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_75.mp3000066400000000000000000000003301460501237000227720ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_76.mp3000066400000000000000000000003301460501237000227730ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_77.mp3000066400000000000000000000003301460501237000227740ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_78.mp3000066400000000000000000000003301460501237000227750ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_79.mp3000066400000000000000000000003301460501237000227760ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_8.mp3000066400000000000000000000003301460501237000227060ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_80.mp3000066400000000000000000000003301460501237000227660ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_81.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_82.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_83.mp3000066400000000000000000000003301460501237000227710ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_84.mp3000066400000000000000000000003301460501237000227720ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_85.mp3000066400000000000000000000003301460501237000227730ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_86.mp3000066400000000000000000000003301460501237000227740ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_87.mp3000066400000000000000000000003301460501237000227750ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_88.mp3000066400000000000000000000003301460501237000227760ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_89.mp3000066400000000000000000000003301460501237000227770ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_9.mp3000066400000000000000000000003301460501237000227070ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_90.mp3000066400000000000000000000003301460501237000227670ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_91.mp3000066400000000000000000000003301460501237000227700ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_92.mp3000066400000000000000000000003301460501237000227710ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_93.mp3000066400000000000000000000003301460501237000227720ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_94.mp3000066400000000000000000000003301460501237000227730ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_95.mp3000066400000000000000000000003301460501237000227740ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_96.mp3000066400000000000000000000003301460501237000227750ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_97.mp3000066400000000000000000000003301460501237000227760ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_98.mp3000066400000000000000000000003301460501237000227770ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/bulk-test-data/sample_99.mp3000066400000000000000000000003301460501237000230000ustar00rootroot00000000000000 D- \BR`0 =N,wG D_(?v_Y?k  ݐ$UUBAC8D*!f%]T eCXùWdUVYeCek,0P a2D@b&+M0ih馕LAME3.100UUUUUUUUUUUUUUsoundconverter-4.0.5/tests/test data/000077500000000000000000000000001460501237000176115ustar00rootroot00000000000000soundconverter-4.0.5/tests/test data/a.iso000066400000000000000000000145001460501237000205450ustar00rootroot00000000000000ID3aTPE1 test_artistTALB test_albumXing( %%%++00077<<˟dQ;&r?N-ijPPP֍PX!d L284{%ۣo_Z,:FeYsɂꮄw=/OOWoW1y1Cq̠܈EPeGnќ$3$ tl`ϓ8W(TH f!r9s&`k^H0OR[ܯb`$XQlAY5 !=@< x+yV^n;Ϳ_y$k1]&m**pXU#}f|j$>i2N_-/sa - M ƍ@"wƚBPb})ݪ$ALbݕRr%LHCr!̥ s0 Dk%0<@T %$IG M < ^;SZ/_N^i$7fEyG5DTʚ#(?&~ZY>a}E @B]@ȳ9L F96##w6 NM (7/mh:Q  d6QF=Nʓ Ɖ@Q<ք֨ѹC;L;cu˙q3G =99 M+9oO\ Ю+:ת<U;n%YJ3*mx Ɓ@QݼD`z*?Ը =B?Dus*_C%2mw"KFE#{8u-L"W0"R;{ɼ, @QȞe ??5t쪨fZlJ dcW꠻\A..r{\g5|o TdHwN8!c2ݠ!@#HVdPɷdM5Dd+RVcJw,7ŬR#Pd \8+d 9Cтe/ªrh@$/7\@KRD WUdDAb?l&\)d źɑ-b(X깒i@$ !@:c 9K>Ŧ%y؆1}P}{dvS(8P*?n}kˣ)bVS1OLs t<-#f^e4-(`~` <ьn!-ya)QpuAI)w]sqF ?j- eiT`U慈]~/P\,*` Ĺ# 9m4( N.z Cg#j 0lpD}q`Q3jS%h6/CU@2*. @4d@ >!@WjɅT+h? !f1hS/2tD_Ǔ)F2dgllq9HK,JmӞ| "DerNS܎#&` ͢O ^QQ0,hJ0]DOљ{3"d 1 :ؙ5P&` $H FS3r,f~/ a.3a0m*B.o9- 5 #=iC@J`I,'0-3b, x+ S*J) ko&b2?b`5:! j ih!_,#U%J)/N/.f/ # J KR",!pا f \ ݞ N! |?s ZW+@ބ)u-1/*@)`-zH)372>=(>/lm=!ߟ^);ݪ vY '%n,R*{$w$> ?3 ^.2 g  S;(t .y,) b~R24tKzM E  f! )_ k hO &@&5 {"0_ F sr $j !L_9{+"p'% v" #_ !\%IGEzI 1x8KE6+m9iL 9hT"Bq' @& /.{/@(Y!d  `$Dx&? 17^i|K"Vٜ0s ~'zjG0T .M $Gf >]w/#"8\(1g%t-2uCh a)C#E&%a  !M /[, q#;I'R ThMkF  /e@)4s QS<_hZ P:hMb']sit  C6Y iT$o@ \I@1n",u y Y` "']3 T +W]% r 3  #&/0" :+.'{**[6M9`;.DpBl AK!M1!7/31,"')" ) &]'$u4.!# # d#,,3('d"@)n Mj)2@ . -'7) $ qt FM!>W`1$ Y ~*# )K&r\y"UN/r,84 7&m-#j)O!'S A<" Q& >  :n% av(\GG ']\"( v3+i!^!t p m  Y4U i I!8H[T_a1D>' rx#K dvF[  e <@'ZS) "K\t4 coDB !noe :6&rٴeұ Hj+hA"PX'vL i#q'1ZO- OicM\Tj K& 8T%(0V4*ݓۯA 6*Za fv+ :,k- }ۃg L* P_.,Ҷ݀S3:zrI {U݄.Z2 sW6E qB <ncDYD Ru*[*9js-b8M#%'v)HihY,لNH7J  F7_HR=XB\A$pn 11.+r /nlM`'PmFNC#J 33H 2 l}wH&S&yc''P ?] 5&fߪM E(=o L $'ng V~7ydU'p( -uC/܋@oNUMv a}` oW( 48,& K&c0-50 &EG/ل>gHV7 +3Xi E n P2 L޷ UYD5Hn/~, 5|FUds0 rr X8+ o NF23{b' M XZvDUa ; ? rw 8] o , (1 GMP ݌<f gH ',_]lsQVLhtzB!ۨ [Й 2" >y% Ѐ2߅m$X tYZXoKlYrInh*~ ]: ?Nd$U?m+5y ^(W o} cR "9 CQdD$ b Ml.Fa G*?vn$@Pi3 r  ;7t K Y 7kދߗt6+/߈ ueMYE,) t  P +LJC`y.46m!5 z* -IeAq7J #Tߎ܏m;w~ g1 yx{gEl5(s NE a=-%I ]l.) A C= 6?}cθRnx< <(QuV.H . 8r_rߕwsTsUfm h0_јeܘL.cގx6BHɩ hI#&(;*U}ܲ$%DA"4e*=-Qk PoVLC\ } -+ *. H: ) ;M ?ޛu2 $J"@N6 ? u( 1=  :  eeX _C!n%(t? >H !5\ +& :$&L  #&)'2+ #])M x3o p8h{ +R4&U h by ym'[:[!A!d y " x l| 4 MP#UQ!~ E  H p  |":K:5iq !z9*p#T :4 $=#&} /-+H va 4O >PD Ylg0l%eO `v%g`$'N!5 HRpN9x;~'L%r( >X(]/Zg&# %#&{ xvk ,K'8 `3RR &#  H\O,alv Crnjx9 {9B"4).Aa9 "e v % D!#'% V L6 K(J% ',2Dv!w!H= ^ *#U?#q] _}d#C#o  L@7H. drD#+ > 3T+?(D<, ["K$<*1&_"utR%YK !03# mHQ(7Hَ 53 wgqb(.S*%,e4q?؜0zBJ  ?"P;"Q;0F8% s8 04k3H3^ R!_ 5iY N $  ZG) Y B#L0F/%%7|)#1Zcv? +_#d6># W ( W %c+Qx,12 1 ` 57 l]vHG|% s9 ){7#Z,{ jD = UF\ yw@[ b"|.%c߂_ YC1 ,AsT (eX  FjKm O߂aݟ  8 ~VPXR*)ҧ @ :if l+ԕ )ӟ,m!2) ց" RU{4f>NX+ |ֳqZX Bhjє{[1f,Y~ٴ;iC | tea}"ں =2dۓk\Q]j|%wkw. Kq̬BŚzg|6g8rν#Y+r7J:OW< GI w tmE-nM{>  rHhN"ޤw75`\wb ̅܃i .;A`xb݁|R% h62#Y%Z,"w1U gQ~"8|)69rѰ+z.,FI }_f {^6o ) 5 Mktq:ߵ A'߹HR~ذmLߏ!J<gM}n{Մ.A:uc8QfX$ing$Xt#mU[3Oy;M a8w4x=fy%"l~ 1 ~$>52?y&6D(LY#/#+-!L! $- #)- j6C'rOvi>&Am+  nK$"rj(QU~ !=] s4aN=&H0~!5 '*C-k2[' %k&"^$H-$*#422 8(a0*{/ %! =2!0%3 03%  4,$N #+j >HEDs~> ] 20p) :X-  V~L C?; !m ! 'Dl]P!g 0#4r WJ pQu u0B)%+r#C% fHx"pe4 p! O# &=m& 'ms c@ 9 -#\i=vx%>()B 6 %,Lz0 Z  =+"%< v=ߦ o -!O"1 qw~j n Z?mBFLn]{V # 6 $Z5Mg/t /B!MD  !    _9 3&E !{z# )Z"9~ | I ocn H  H.\ <3 W0t ]_/&"cx*!@w3 0[ fd"8 yMe6 p N K IV `Tt T ߹'q3H^! igWݺvUe8קRb`L9y]Vf`@ tdRޝ N X^S'icP> s >Y uK _62v ' { 5 w]#}cV $[w&b( 9 * ~7:\0wܦKzZq/_S:%K҆R26y'ׯبbr_4ݜ})ˆRb@܉32ߍF՗B&k{yԁE+,!|1ݰfAl? 8̎d@ iD b?$v754[ԗG]. 6Pk@ G Pv B[C9/Mht @V(2h //zX M |#Dgzzw (`NH5%+C# =PE>/z(Z$t:*tu!+ e#!U'XQ`&[2dY'~ 7 4p^ <8H{wiTX `&HPI؁_a%r} б ؚn$>foe Tl]̼0ӬCU+nz- ]@`iSa[Eޏ {-Tc%=~ |e":0x?O}unݑC?2QaaV6Ai)T::? b C U?d]*XG;( aݴk>&'rv,NepkZ 5X 6*nmt A 6-W D!2lu4'9`5i#bI {=Cm@ T*CS ^p75} 4 TG6C_7V 'T (|hU*b 0 XRiVJ{   3 E\%=U0+&.08 [,, 2*J5 *,Q {,~.O!F2!} )0+Pc!$~CY L <!atv d0 !ߢw,|H jN  '(*Rd ߮s!%e-14e #W+s-F3_u&GQ.F).r(->i -U>##G&&R+t"Iy uZkhR~\ - 2 (s , *28  cz$+ k/+m  #ufN&#T2 DU@z2 z/ j)q'/k"p&tn{kޖU0 6߃r#u6+ r֒-vu  zk ;7|* _G Yk v25JSdp9)܇p$٭ j]9?@,f=3;/=s߿z-^  5rDnnoROQE7Bb&{5[߭Fa{i/Ov֔Tt*8kRA܂mG8$`>'Gռ܂Ed'Cm@ X; CA 3Ց4Њ܄/ K'S&{6 ~ /,X Ys |PV }L{׷K0 wA^ #D" DŽ0̃ ā!t `Z{̸©0Z +6.$tgl]!bf0gx }{48HZetS / IsxYT'F~.DA8Pb9Ml, PR* DY~;%M 0 z,c  x ?Lڣ ۑ ekXx8-,٨ip  }tޢ$&,U!.we* Q4!\!(1Ib `%8ٙՀEiR Ebދt,PAtFgk Nϡ/9x 7Ѫ$ݽ $ pۋɱWJUkcbwi˶ y[QSnA> -   (* TI ]:cB:6 )#$`#s82_ 'Aʮ"q Mt- Uv݇)z[W١ѭNҩ ٕ7 ױp voҙͩ}؈ɽúhWGTsQ`!Ʌ#ʖ$ ͓% p\r1 =V#pONCzԝx &ڋen ׄ MB#ר ݣ ׸QUr:#Cz߲O YI;h2#(" vLؔ0Q? lzp }E!& ET?> $+.t9gQBb ? -\B4>P+ 9z޵ }wUpR#-b+r'j 0̟b!}L\J 2nI ^/Ƴ!(fԩ!D'o܄$/kj#/ 7#"҅04WN؍ ?LPJ] sؼ&[ ~nqBp0Q  I ~ P" [)& yYL83v xl?ّ985 X T'4&3}W ,_׆>ȬOՅ2]nHZlWڠ;H@:0˻ l!" 82n+ Jم$o #h"g&o% ޾ tO]t!,щ[-{2? ̱#շ&ݚ* 0 ֿ&-մ)!W$$l*:xDrңŏYvhՃ _ )%Qw ZJ[y   cm#n" 9Y iG2 r,eJoT0=7CwqpWgi/)xmMBbn2R"CEagjl7OYgm*jQ G &JG<(GF*"_&; p b{t  .SFPL C" "Kc+|->27r&$27 R r GGcf e  A #%'^% Lr4Yfs|}=!}  !)l3Q u f`))i  Q? y"##w G { |  ZP s @%Znq4'&ZqP6z { '`">hAHjc3oR> 1^' # KC ###M $(\0bAK  /!g_ 2/h/r-d  L8# %t j  7 x*Z 1a h,p Q d t U\L= #Hu.#!( 3X&2L@%D N D\ t i?gL@3  yj5U %$WnU=P TZ =B&Gfy.oNB ^c`! E:qV%dmq4c< L-5+#cdAs = /. az 4 T+ZHAR-N+*s߽\ rib w . Wh? Z m G zU(o J \3[ &T8<XHT-z7ۥG%? LDU Y=5m84' # { C, : P F< w FTiHprD`zn : $\h-#>X?+n(o]٫$rmy '~vC ~# 7<A ]o9Q$? ==]z  YM%a  ! *|8&!5!, f8jd7bl]<  ( ] y O/+& 8"i&>(" *+,~2:"j/ 02#  &j"<# ] TS  X*c 0Umn G"h&@h ?+dPy u[{ : ( " C% | 'wH"q +j/ [U ;u Z-/# 2W &&(Xu"<,'0$'%-( 2eA*6l6=/3()I{$ \OvfF'U" }` $( B *| t `52.:$ ~Bwh *Lh!E <8 s {4 n ~%M[br 12a. r_Y L2 1A(b V~@.C j +&hO 9 9m#{ba[l iZp/^S[a:G#>i/2'/T{*wG a"G@N `#LT -I yf=&}u 5<%q% #1 *~]!wmWZ! \yD QzL6I l P ?! E6R غ RwA?CH0CYYnjWy#(z) *>d# #geQ 3'f B5(Y hh_D A],5 E  IjSc_2BGF S"[ ; !7[,O+4)#~qab>D <`MY J s 0  %A\ &C/ j.5 Z=5Vk..#@Vޏ rfOj )veB ep<So5{w, |,kH$ o'>6~y}0{a`) 2!c R%Kq 6OaDa jU_ $ߔ;tzgٽYub 7]k>12}/ 9UeB:Q17 } h@ S p_Ў#%-c*ۅ̃mr\ eOظPޓ҂dіj]d A0Ik }U",JeI? @ # x :" =& kC@c7l,fqg Lz1RNf T,>44zwEuf @rjF_q?SN ݉ n_ YC, | /kݍ$FtI 4T(:F}}o_+1Y m D C8) XGb A I97A  -[,O+v ;;R _p $D%,/!F=jH ',;0N:o-92#M0t!3%$ " WJg0#]? \H @9k'Q |G!C` ri\ xMKe   B`e <&I Ly &` CQ s RZ~}2$#U @Q$\)B4.|(#+ {#3 Z tx(@ +:SV $@ "{  %!). esxP X6 pq=| |i {qVd]K qX#*F8 +7?EZa6EZ;A T  Iof8Ff ITU< 3e)"P'3:'~2+"Z(x# d ).<#i2) _0&T67 *3 =EmDa==: / /)5 ";u^<g'.a"+)7 va8U! 6;J"'> -L   a$ REs !0<F $$v0S8!A=X'[ IJ  )6TJj ( T q '0 %| F-W0R/ f  j! (`;+4(' 9#*N!{ a  !*/ wks[!c02f'b.h%LEڡ"){թ' &K-]d,~#(/ (VRI#w} z Kl L| H@|q?  ! + } ku1{>&$O: ss?O!>|$v& ]t;?pq40  <^59y"$~~G` *]> Y_h h#;+a n3 3q #"L#'%. [!H/1N%"$h'[FL&(s"3r}6A 1#i+7O&0)<6? 9bsa 7G(04:6_ "!C +bj9!Y-98"&/+/,7.. 0>ykY  '% k .6yW  E{ 1 v,|bN!k6  +#n Rv #E[,,q ! } /  }Xr r!k L"H= o66"  h` ?>%T  s# 4 JB Tn ' 6!a"$ $'.%sH!j B%-t=(1("b* 3 u ;  (?  k &   I(&`"R*(="?(4,9N7@.lk *["1  MH/ !!d Fg3s!xe"x~>.H$mM,  ve%LN1gh894s!, *!= ! 3# 4=#e, iC9i&$!B2>(6? ?D /y9b'*!u >Z a '9~.+}538v2 =z60k& #* /qH (4'w#)q+4P):9@Hs,{;K% -!($|Q% /d4cOx)P j` Ur 2G%@nK!} 2pV 8  y S(9O9HO.|'dZl n9m)leZb cxGFGa ,n~  n*"/br17:0 pR &RX5 q,](,"3) !"( `L O Ju !&}( Jbd&pP] C'H %4)o-Fs%!s&Rw#"tc$"  Te35 %I!5j `v8,$oV+2$Z*F {0 &, $ 4sl)X'7' ' p";< ?#2' hI'Z:Dj. C'YjaP/$w !cLp @3vW 3 = 4* s/E=S#d c&5; Un:Z\ W"FH023 GZ 8 >. s m ($ c'LN %h 2(y u PieXFf,[U  lVYq v #DNu31|  @<, 9!*12.)!'h%}Q,/]+ ,{!-#l _"C Arx:`@(, 2U J 3`a#.&!h!# -'+*&"%)w/% [ ^(M B22%"+j(<m09yJ@1v.!: r@j;Cy76$F9B*a$2? @2M%} y G#y R " , 9 4uG$!U !0& :wN' ^"-5Jy(!.#| {-n;ePCs\!?gVOm wu2bb&Pm~2 a;a)xtP U~ d!b'l$E) !2++100J,6g'i~)a(71 2<+  3D ^~/5O''W )e!m * '"  w`qfns ).( AF&G ,Q]@>] 324p$r,%A Q,B equ 4kfR1,Dh s,r k7 "#B$UpM.XS!_;)'' e)7g qU$/So+7N1:AtG׊k,y 2P qTG%,> O-MO +xp=XWJH=R}x wP=. Wi ln0 1F~ e q}]K B 5 < ,/ >}##-  'J_v$wL  PYD4*Yp Q.=.cu :/y 2 |2 A {ފ_ߠn#K/xNGgک7GoDC("]K! p^6Jf \ާf&^  h}g4^'zeb%/Wg<%'Y#x;' ;J u gD, l1 !( _M "Ji% ?*g H  $x" )(1`#ed)!R+[X+ J3&'%225* .(Z6; J,S u(cq c//a$U6N6 !G FfY37 *S`$%<$$)H(N l'F6!1"]#6' _)4B{ ."<5 "F2"- 1T':]g 0!x&j 8 K N :Uz R!Q|#  yg oK[TM^](p ;f)8-j<) %.L o!}*3'X#_ 4 E=q % iwo7 ?]}hv T T?Z 5")8`!] f)!++3X 0!d!R-! 'kTDC|c 9 r +GRUO=T آ@:} # F ""  4 OM!h%~S(&*G t [, B;xs9AIxc >S RpA+Xn ^ G g c  q /,9(1" #"x  j }# ~N;'o*u"o6$y,,pV\4$*x&I} _ y,\ލ%6C&(--"~-z#X"*[0Z{2!` G  ePx iT  E6%!PF U $"="&rP)^ z* /%  3t5]b'5-!>: -+<| !# ,E3 & y2"f3a eb,j oW#.G M s  0_" #e1Y \ 2$Uu. ]+MG|[pl%:> {'ܧUݴ K,*ی.jl9%?L x BB 'O&f'[(FZ%[7  + .gX'*%y o$%, 6Q $Z!,A ]P^.#(' y,&u+d[.a3/S{ X+ #/?M  { F m $3_ BH>A %+ M <~ " 4=0|8S- >Y y *D~I)pz '<'A0 .B#N*~;+x3 |;D-Z*!~((3 :{ /2<$(k,,m60A s  7 Z<r X 0Nt q/x({ L L%" $(6&5C%/: <l'D&A3O .!Mnx m;3c.='K.<&6m!<I -(  .-k#+Q 'Z5 6;5"6*ZH Y .%NV,j=oK ItjQ1xG 8XE2Rd ҩ MMFF4K@=W !g=2On {h2R `(< $^OEEڇZ-ݑ =tjޗn ,.6Ӻ8S0 csxO$4 !MkJ" Hڗ-0:-F ؁ Z Ly-ن ضprOfۡ ӇR҇&3BɊІݵ<V H/I  XA/63)b W 2 R >S  # %6 o rX; U%a8&<6 +cI#tG h 0x 5\5%9BYH^# SUoA_45/=pc:WT)>gJ) N 8 "(AV? @C V:WNd+E* B!qZ *1 nz6fyWLffy y  \  1x 6& a97$V7*  Ik iU Ri> d.*`+&9,;+.* 8L54f''Y#naK(  6oDiڴ`nN_Iy7.5- i|nGNaU H^q*U^;i*WqhBwtZ= at/z##3!YԻ#:#%z`ČRϷ3ҼbHC #$qQ^" o !U, l$nl5#O4 { Cu 9> X r_6!{54 7)10D *)ey% 9 U &qVy7%1/n/g6ScHAZ6mz/VZp" 31 zL  7gR }S -&i0  "0"b ~M |  m` moA},8l _V   @/ ]  uK$l6s#@ B# s U ~] d ph Nh!3`  '+YK YQ |6#F jP\ 3 G "ZEt8d&(# -PO'u LK,H6m2  !0K! h' ?26J ( ! #I-ka!B12 v-0^)h/r$ O~"r$ /X$J~0`( Y8XE >&H]A 6yO S ;a n @_ 3^Op9o :tbCQ~)-!K&kj30| r.DhHH" >5(: @9xOP+[ Wb\oj"  &t' .JM `#1- eIy K K v  ~ 3 [4&Myfrpgm' Y h`Znyr / xw^0R e[ G ! &,x 6+s_-w  (n   w ? tz)..3*%b3 P a "T r ;' {Kr9 +gQ@ 9 !B ^& m' s .NOOxK-$X  [ <i5%  3z$B%wEwfly%D' eXvAJ'T=I&5!=+K(0{$)&.*CA% w%r,3& ' p+Z%uC7\GW r ZK {Y d*m71!H Dc 4 1MAhAD+U\Y V<V Y | mR6/v  Y/ pSuAY8""^&&vp .oV ]NJZo}M`rXQjytjf\hJީ u/j#H N(c  [eߌ,%(4.wF LZ I) ٷ'|*1z$,*REn VOӖ&/2p9!jz)#/(}&(' l3 *%[, YQ&..}as Z.!7T&H_ /6Hgh  67dޔO0Sަ)Oqrv:s0  b C:oԉa. k̾GԊ\pTgkh& c $'e|(z d4!d { v gX6$ :|H}'!7#wNt{ F JcYچS2'jC U+c <54>2.`5 O &~a^`L PkaIW* l% /PTc}"1GY& BA2 LN1 !pPxEr", K*)4e&P.{uJ()Vk ]"$O`p: xN )0 *c ݌%gҙ!0lK =,,kUF 4#"<')2]\  *["qB4Vo R hmCI,{=v{ o, + VPv w G\Xc^\t xyU(+ (>mBq) 4c/,"0D E hddtY i_b f&[ 5U 01 {e  LT"W [< D!,4w!*7$l$z!,#d35a * J<f}kj ;! 5q ߓ"I Zo"p ko$ %.gZ 0yo{3csT~= 0 C#_]*2$"*!\ h5H)2'# \'"  :g#M])|5+/ 9=&>@Bj_;(3( $ # & l A4I+e5rI(31S 87]:yy 4t/!2%T U, 07 (l)/.SNgk;(Q'"043,2  26sd ' m'0R$KmS7'e wY I / yq*!j~X [Z&RPľFϸ`ݷ v,$;sw 2hR4 ( }2Q720 S>/j; (!8"p%L  H$&tBa!GؽUQgǁM׈&!L1Mf- 4!g0 4ri|L+% ~^P SG98 CP/ ~%Aoڨ6=@NVZ .E=W< m\{qzv:^; % dh%br* w  @r=q%i_IyV *KN Z ('$+S'+?"_+[n.%JG4!7')17#,AV!VE8'3*C+Z" o-}s5)3gC I_0= `~  wB 8 ]`#v ~ g~]>{SP(g,QY rl5mT'qJ; w YM7,0K^&`uI;_ B# XQ. m v)8H M"&T3'k:)#  B] ' g|ja#W |'=!XX k'Y.X;-f-L> l!qt1qVn%i-+zq%& 1 !  fN*N 9[gU6] /%H* )2u /1_(&@!9 g )"j  $ Fz zaS{ `xG ?l+j L&Sj CL.Qe O?2_(vrH +L# wQ x/C"!(   Yr$k$.lg; W'n:%r/&LweB< Y I $v-Y w!> t) + ++(d+[f$  -h ! CL 3 a " )H۲+4 ~P##GCyJl"N !^+LJ'wu-G-7w"O5 +*51m)*5*4T2!D^-8! XR"  [l 5k eX"A| .3(P.,*߾si;x17 | Fjw D K\JF% #  g(B!~ \I\A{lqf Z T pX 9u G v#0E1   `8 O  \A 8~Ied }Ty) #h B!`/bJp  8E  (KwFC+S V 'eK [2AW|^[S,X o' L aE>j QrS!.r*A*P cD IK&*p&b0y qS!$S |   A89 *>Afgw p >#D j d`9 f& tF{-l ].yvծ* ( 4uV e)H9/Yk0} ?KnS` w  K9X ? JX>h \ {Wm]w, TVJ >  ` "Vt!> n]m/Tj>Z  pM  A|j~kܼ+ץP' ']'  +N"O`HOwUu 4#uuLh3Zh (X%B -! D+p^ Xd/ RZ;&QtQ s2 D bCߜ>l O# SdS)D %|9<H<&z czղ&א1Ddhp$pHK\Jy \53 I 9p!_ed (^9I ZYRr2 c5sXc o O ?J"5#ߑ%'_ 6#%/z'!  h{ON Qz%V d L % uj B5 #1j >: p! nKIs"{ %iN O R" ~!" }p $ V > ig#n'wI+" !X{U%%v 1  vT!#l!*r&>'ZB%4jMY't K g&2}+ /4,,M'wb2y  pRD.~: %mS  E[pVo )߯M^ݮ "YAb`_r7eK 6 ڞ,<ܙnT] Y*RޜE zkAqXf+رr6`EZ@U"Wܸ8 sf@֝0, C// - -"qjy՘K57PO0&`zmgQly޽]s^#*(#i| Vl Rɓ#SMUe"0 F = j & ? M !<= 8W78_85KlݱC,6H6, 1&''M.E!mw R JCݳ '֧ZNhӎVݘ ;%1$6e^rPr_I M8u  ~P%FEwr|1tP,C 0  Fr  d!85@5 LEcHRBM9g FX@']K7Lq _/Oe6jZ 6  j 2 iYb E b/&# *cZA!BST ~3pq14bUf)%M ,o |V(8&dx^yu[%M ]t*sFh/ E[ٙ^}! vB y 6)?  H #t3sy-3=dٟyKacj fx Iv|zC)Fi*MO3x(*,M,"= !3(7)<&5 a*[*{K )% #  I - &&"2J)]!&g3ZS<++-I7T<2 b2** o +  8$?/E1W):*}G ^("1," 1e!"t*%LO+/L$JH+!7%fQJ(50 N&]0( !+:. #l#$hL45e0;} X t,   JV8UiT _aX/%F j 9  sA 3h &V # P 6X9nCbWU% n  ^ s1,[ 0%!!"I Z2}&!)S  !t0+ ['g7rr}c !',[4.%0#*f6 7o0$d/## $%l - 6>}<41PB< 8 o;w5q'ad0n .]v-*7F >%_54.+; R'u$$4}(9H ;D$%273.Y"| 9Z#%p } ;$1'42nb"lm-FC! .8C) 9Q(wKL2W/ 1'E#F&  ' " J Dn4`/~"0%,C  f)W~ u vPC@+   &7cH4AQx'P -$Ay+! $>q$ X7 x  ( H)n& q+&xX2 [LvN4߯Z|q6bO 9r<x#O5 '߬ ^e= D (b9z0Tg$6mUebVWޛw !"M&1 d{B 8a3^Pn=H:LbH nqa;Y^E%V /yr e o,5)/+6! i`tw.d jU5|^ IRޣrv ;B %i  S tf Z  _;rjw>^A /15e[ I l?@ 8Jnv] f_Q `N %T KGH T ,c  A  *d|n vi?VP@KԇІc/g^J{rdD&.;)W |E :E" f J<C~l  51G) tfuX ]>q!$Ժ2xgz R3dx[NPr- QwI1 _؍ | 6l$d{ߢ{m  DV K&5 Оs m0< z,>d!i# uҀ.r_nKY&Ȧ""!*EK0a4E< =gT) ޽Uҙ$(ee\K G#Mx! 3 B<϶+ +֒rҡo"Uכ?=y=iu3'܌ !> # ٲ } Yַ wn@ 6dS cײcX\!Yip'Ӝ.g@ 2^g +p RN!G X 0txjX&<  )L;$! 9' $ 's:weCL}Bo ?o b"?ݞڶrOn#̇swY9 |E?S#1#evdi#u ?lܓ ?'[mxCyZ <~?60R8n e%$p<*3q.oPs\P 7$Q }I-N^ :/ O v C `v#j LQ(X$!,1- B(30 fT)%l3"3 1\:0h)ZZ Y !y 42+ |]qk!t>'y)4= + = { j S (@W 4bpmg }(&R:+b $B"&(Rra< ?p&JUs- o4ߌu;ژ8FضXhU!\މsDTo*X(":Fw,yB=hϴS)R)٪ڹ 9҅"( $օk)Ͽc[Yi(+2K@FC |8B3>uC8 s*yLy#! P6mGJ8"  h W J MzkG i )F#;:@ xS bn6) #2WY KykM  wn&q ((By5azB koF9a ,a]iϔ K " N B _?u  l$h9 C Le]%x$?p%6)mv{ 20 Io2ͺպ;π|߆j&Tܚ(R 2 UZD@ +t;  .Ydn a!#{ @! nh EZ8? jY%U aMd.DעֈOo,7 i ԆsɪmV @ 3IePy #3'< _ ف}g3K _~<Wk|q~ ` U/CB"3H,i _\ y F@_:'Py*} W*Q]M!]}Cߢ!&R&4 $!f."  ? ,f2 yyj ۛ`3inl;ϧ;P"xА!Q$YS4P -G !~PыaIT  U"{ ) X 7NVl=FB^ M-9 ZD׷ߑְDKܲbx'r/Q Z2d ՘5[V۩s-]U@fNtS;)~T xRN!g ( -> $,*=̎4Y %gR :\.K&KقlE N)Քրw.`  Fso~p N 3ioGԶ ӄ@/rU9uGď s'N mט{5)v# "\mE"-m$X]75'^2 m}p&%] mǤ$^| GQ#G G}Xhv&)dצ~=(A I^RF(Kf`P>Q<Uo=ߦf8w C ed N~UI!QE cDM.4[:yeE5 ٰBG"gp7Z. XmJAA]7Z/߯?ucL' ӚۈʮuN1-˄s< `?aҨ*تˋ> A^ DDer=Gl >Ք=HU "!W7AzEs_@*I={Kk%T]JӲPЩI}#S\d{D<h`COVyIlp̈́AՙldCՕe.W8( 8"d?b4ލ7@@zվǿ4a:y`7ރpd2FZK~9,yBݰ@רaD eљmAw,T<ܫ*{ ߲$K۲/Eӑ6ΙzJQ11g}Xړ94֤eY}9ރGϼ܀Q( Ҫ׵ʉЋwؽڈ4ؽ5|q8tP7џߵ މFG֝ۂډMr%FkofAv)B 3ܫsrTv`@]3p%Gq6. fdnޞMP*_[%%ˑܐ*( | J(Y&$/q;`ܟېQb FoAP/!ѐ =;dpI& {BX,0!ulI^i֭Eaٕ|FԜL؝TyԐpaC2\ktUa{PiUk.8?Cn= 0La6i$ %`cm"3)`p]!z}@t!fݍk S?;P 9, Y r=L$l"( m E7Z]9`KQX%fP:%܍ _6 5-K-_?oISDQ%gy`3| q7Oki,?VJC78 ܬf~ z;9 0V[)e 9C$. ݂N&OiO!9\Gܛ$k n.A\ EW= SnsO;L n=4 Uk+* qY'l@YV{aL_W DVR"8#f;0 ! 8  z3&(kI"l7bd8}B Dp|\ ݯD{uX  s$ a']F'GN` #?zxI5Tߡcu#- e w Yv[ b&AU:&c:̧ ;x<J~y h 8D [%ҴY ů*U 1]Q5m  b֬:IUO ? `E?Nj#!}> % u )E^~ XQ[; l v j>eSJC(%r Uttu ͬ !ֽxa zd:LmRg tK  a Qu>&}9p,aF hrpG J}[]?~AKH%e{ ?i2 Ɩʰ*Km#sN޶7Uѳ< 52 9S_SRξcHMV:Kc ߎ7`#ӫx̝8˪vҘ &|܇Gǩ47PJf$ݕ%҂6s.]^-6 v'ټ߹*Q $X ҂jٰA"˕9&P(/HzWBZ*A* :>LLIM2tmX=$_0C; Fr|vUprq<`WY# }"p__M 5@I` r~)egܢ5عu z҂`Dߛ\ X7cwҧb Z Ԣ !Zd% Sq(8LUZ o ѻl8 Ծ8WPe_6xp ~մ -IEX~K$ܬ"Ѓ p)4kA q# $uk^GV [@/ vrOn<3 ۇ: 1 ؃ <QF%P)2&G);Ds*g46x^F ) >m4 {g9| Qm j۠UBμ  Q= Bm H:*wH0'-֍/A ? ߁ށ 1!<.<AݡItofΑUʒȋa@u˸n٤~aW`Sp1ob]_WD#^LGhD>j,aǀ̘=sj i[ M_l׏B1}/u@F'އd?]xq/ܩy%~Ni6[)]LOڃPvG~ !- ) ^-\r87K(3ׇ\ Wr>/RߑhP*9 `Ͼđ(bܶ[eYڐh{F͆6۩grb+@Kͥ|ە@LdqC8ICE`I?g Θa.:.NI3mܝ ؙոLvwܟ9{ǂ;oq{~t j90:L{ I >=MY%1x9NM1B'  \g 1k&*\ J dTIWJD?ٷ~FBT;P37 ^=,ypD dw C g$x];E&^ V'P>qΤfb Eۙzf_ n E̓ $wJ BKpq]  |7 >Wogt x3^%x:v %FWO7 ){$ &"%r VQr9$q ?0 9Ԃ9܆^  M[ `(U=A۵gtdغ7Aި& B) ^0> d ^#~qbl^ sN/ݚ? WimJW XF BR)S MГ އ*ͩ")8e h3 V< ؐ}4fa1L (  6]g Z&z[e lNJoD^t " Mo5k??T] yyI ##XfK߅aqH5&`j(1WmzKn ߦ ~\nx  y 0iJf8)s + U&[axrfW*i Qy C   Dq pD @F &&, >rfn~$Cf\ 8[[dHAt^p%3S$ ge  y6bhDw j$kW4q $6t hZ{$#j{W?V h i`R H y|  tV-vצ'H%0] m !k+ 1 =އ n Ws W 5.@Wu!E|& ,J ^bP/ 5od> A h#Ua7@'mCrl;i :"9  M y*7 3%' sc%* WeA% %DG3f j]' .S*6GFi [/y 4  . *B `Z+!+$;1 -':'_)X%M_[(I3!+Btx6G~ Rfc~]ktP03 {{=< 3UYn kESdlYN 'AG6~ ._ֺ{qN4 "XMWMrgt ?D'"j$QgW۞8|**/=5qLA3Sڙ1Da#3|/Bb :OF |ްeZ.;t#.b#'o+L#?/<@ H` == /l 9cmo k E brwOX !x Y*$CSn"",!4"* ZJ C bEggKf!$s hv: a7+$?Q8t$(I!3/\:[*C3.&%k,G g aC e / 6S`M_C ]G*h.߉!d C K(+"O =0 d~@x> e2FJTB!~d _"@&" f+]xI s sat0_A&OA !a,5%z((`!&~Q$,)t5ݐ"+&<+*8$gЏÁ>Z'i ") B,t0 :Eo"!ߏpg(}$zN :%& !  $ܺ RePVے#:#&U*{ }L u E~. ԰1P/ѼE|ٹҊCO: 9m:++Ȫ:ܳ$i=ܻs5YbL۵J;Bܱ jѶ`*_~GB +6c< * AZT+2A19m܈ ,FPR?0A/"C*m})ڵkR@ S v-$OBz߅i$y| ?FEc6\ރ+s89i.Yٜ͂ ];޳ݗ%Ӛ}^'ț*?b/5|xV* 2w7>T j / w JS \ .!ps*l`0y zPNdV%gg=+ >`c T"Q NX :kr  q" 3J $&< &6 RAOwg7S$`N|Z)7kZ1@\' ZRVF=IU'} &T:; |TW,_ICP,oLJ .\G%jO V@j=^ !V MfRf: 8Ualyi!' /Vt nvSj @ ~f:E z> b4h+0 Vtx9TlH. $#yF.7~ SRXf-B2 _{%qO :' * OFH{ @6 y!RA ;T JA\ t! } G$  NjG!a"PE"^|= E! fs $ rVbv u "}_tz"B  D2vNdպ =t:9) t5j"+B\$6('F5r]=q[+`,#K'$%%-EWX ]x "N k yY 1BM ruz~ckw9\B`jzݜښϜj!pٞU uڿيMP@ER"OA&q wL\ )R->+P*v ;qmeFRZcs!By4SY s7MMmL HD6=ٕ@T9Xn\8޴QݩL6#ބ١ا0Ux<lE"YKn/ sN}N!mi >Fޜ +7/wHqlۮsYص˒u޸+ޯ_xl8\JiUMH\ Gڈ u^3Z%FQVXk`jݵf- 8_׏`|6W),s&KN $#Z=&>KIئA5cp +HWɱX"Y`O"% y(W"ERI9l9WDvR =4Wnwsy B~ Quz 2| /'Dj0܁VېBѨJ*jl'!d =?=ZL_Զ0ڲ aQߏA n]bG|*Cc&{CFO7Д> V dHhVGt|Ё U<1<}E{7n?fG E( fZ\d sޗ Pyִ d0btSI9`3amBx:Zf;M2) lG RWX ۵w(#S yW <PKBݽ{k#OYCR~&zXx~'DfUt$ѫy ?f<<w-U$m+ջw'5=RyhJQ % fv+ nsh Wݰ Fe5xjqلؾ=*۰څoz] _n%-̼g}@v{g|$~*mb;FSK&L߽z0*?UsکsA}3{ع9 9{݇Ҵd%ǯWڰy͔4ʴ&ξ3ʙ%$m͑T `ç4U>sYFĉr Unۢpjf<:!ܺf {lwh_ Tkֻ7qa"C &8SVDb vnc D57q [jXrO";иLoPӂzVצ3$.u){u$> 8I ڪ-R 2t٢; 0o_+#ۙ  PMPY #%*F{Q$k1p-: ' 1c!d+<1T&1o3=(E*)(Vhn#W k>3 ..=  k Yל'Mb)2!ڦ `Yz<ZQ' ! 3JUuvQ8NHc*.  kKh2o   ~4#0-vheW)E &VXCh -elem naw{ZX O65 u֣j0|3Y cm+|)z1F H@(Q!lz$ 05 ( i .Wh &v%aQi;ek-DC( izm2o Qjo,` t1SL)! ؇1N*Y|T%5  #A w ' jCyz 1;#c - v% U bLr*" W ew  x}&.4A m CKE' [=x& e  5Q%F*'8 'n"P#x-Y5'f&/&*19/F-)4e.<$.-96QP'r/-jHn)$W:Nn z9v$ c N  6 3 * A\ M 2 au!` &"%w U8  d<}* $ON6%$<#$'%0Y [21NT` 2jRvylhG!P  /FM f f? :"*+5*-*H*st, " y G\|!V d21%U:  ? h"Q6-rV"*S/&^# ,mi#U /-h !*#*  DN@ DV *5880/7h  xTS !W $1.;L>]n!mo"R%l!A#| u#.;"r/Lx> :! . JD!2P 1 `8 Xlx). V#Es GSi !d 2 l# )xQ%6 ] z$ &g9%'*TR: C&. 2a[d) y-: m x+.jksOa @BKt$VKW9}ޗ >,}<f3@.Y&! UF p3 Cߞ=942&%<#q $k$w--$1qK"0d,b/r ^! *([wwn '$)R: v u4*KVT N=N?eO vz!*\)r R8)\`BlIkٰ2P/>4  tF -/ K T Tw \?`}CAYcYj >YA5 vY {/u4 Qf w]? > v $H(n i  2 I$!</$*R(13q9;@80  h pZTw*YKjA)| [Nk& !+FM%2"AZU L3~%(w F S AO|DK&$E&#&q)a?j`$ c Sl$F(|q#F06 #~MTGd ]*%, :+n7  $ " j(kY@ $%D'  .K<N M 'WZ m6 -wlbU l|KS >@  \o|) ; rXLknl 7U!w Dp M7~@q!x{Cm#A+ Kg ޿fR (U:ݑ@Ӻ_e"NFޛs8j-e~6 =-?=NكM>pIZ2 uP7~}. MV]^A ߄ QS }h (ɶP X)&n^wl=,\P*l)t5C@ԜW֕ZϽZsߐf\ L 2D#?[9 H %8{ s[R(27 J" XRF:7R]T^ :Όb`e)RWi45mӰ Kn*G'  |K=Ht%=mV "K'$>ݐA`8 itNw ~J ] f di  {d\{9=|=#fC)' 8J5@= )& #S;޼|f0 +H'a5*@Li%s+48w!}4:7cќ'ˏBTeC'$"$c V s?<@\۳#rD$o)q+ O^2 N"t9M`_܈N%>!܅ Oj1b x߱ J?ew* ? a4S0~K-g ~l%7R aAo~[ ~  g ly, VK i$ N"  )R  CG%$}[+0x/~0>G)8   DzIL{7Qp ' CM:,D2 U' *;&*}% t =0|Oar$*9 i}& oC~ f6$=%!.k#/0%RV%K $8 b'~ב۰_ c + T"2 [ru .Jz \>;fj]؁Z_c Mމ(4LC#m,݄BF? @0ح}B0kw = z*eyѹT?\]c3  s' .ӱHSw"zj[Hhό ^  (l&osu]9nrQwh%#f^aX@C@ <;(| +w'u & , ^c  -) U" l I} f[  &GqqcBiߝ8 aW B: ?-  k;T0" y S9 4N QVl $?K )k;"ؗ}9 n! C3 33:v8BL;)e $U n bCx% fڻ=(~&!Oδ\#(֗`< ($;!o5$9"s&| V"F!c S  9r4w %!v  4HRRݛndVJ{k< C!4ۇMA Y yosHRm^36(ށz9 T ;c82p a /#. L X m +E,p EE٤X{F ,SjPoLl#; (>K = +6-xr[]Xr%ueN-H&k)6 69-B$ { F.\) qtk AC6If&,sn{k2?=fM5T o!lC R&Eݎ\K׌q֤3X,w(+a+f# Mй@Z!̍ 0?׏n @XurK$3۾#Ds *V m1U'Om *S}sA &^)Ӌ65Ͳ#ҚYyKmigM6tO4S( eq-2)2Uvh=Ց~"߻;bH!q0J"eWcy 5 ܡ wPf .RW 'mGhIIp}@@ l(09A?_H*sҖ)m2{߃Ap&[TQ(8 _whqLC j>v g]Y83 +vLYueYy׆ H]Jh`0rf8D ?)TJn+s;j` v%!65P8D>nYCJ!%yX)C1()4 m ' * b)y HF %V FX@d:' y$ y"9B a '+~54,, 0,[N=3oP6 9 3ܿ ݵ\ReCFOJQP`v$a3 o;}W{Kc 4(.,r"  p(  (q { C: g }GP}v_ rd[{!$/I. 8] m hU R!u  #R\A&{Z}HGy G&_!h6@  5{<1 w! ,d  7 A UD"޹znQ zܢ% r4jo!$Z!1  yun 5 C!o[ A5t7N5t&hzZ3ْ'σΣ Y؁ 5)ވ #= ٿ8W޴mA5 [Dky3\<, g   pu&`S ! [d 6NR/o5\;.yW %{: Y^!#vӻ*֌j_*4z Jw( Up5Xv#gcje=sۍ.Rv2nFmy s?1Y?; 'TݘmW}/B h {jt6 7 7F1 7O#m+L!i.  c X O_yNHf{O| /Co]vr"}uTre`vAEs<  ` :&6 4xvH @1|gY]` .vKsD #^4D)10 7kA ;) Ez_,d6 :e"px 5 9Qv XRI </|V7 kcV*Nen# ; pTCn }]!ܬ)o ^sW~'0\@ FK-*}  X+s _ t wVG?HOO у H# A֒[W r~נ"g$+n/0Z R!vHx uj#P/ %G62x L$F Z[8[ biLI q ,dv'] Hp#i ZKZ WfZ3F"wbv b 'Y)# XM .''"+1z& k"TJj   w܃"<'<iH 1 9 bpGl/ ~IB" AwOֈ$ '+5C c_#Fm2?iiq ~2\ rU N %(#[ VGD~GZY~: )2]` ZH{ j<`,}RfM aA6`u>22N+ V e0 wן:( f  sa c={`-?6f;#/e>FrMU_TYBFsq 7p+?3 s}Hyi%fc,L v`7(` 8kgX9 %C {, 5 ;3   mI %(ru!lzK]}7U q3/ O>2د"* nn,ylHu'+@}&8-ԸDP.[Χ۶MںtN gM ٜ+EsLo9< Bt ,6rײػ]gk;Lu_f6S BXJ E lڛ ltYm~Ah|;^g 4yR tr &]vGJ/m2"$&) w&7 :?O*ً0QO^y'DK= H% RhQ #(}r1 +oAFFhK+   :Iz./ V <o8 M&StC I3U*O#j<#fLz]>  = 1?  L`;c4k=?m ^%1(P !h 13O)O37[. zJ^;k j=t7t!]#)GQ[$@H"&v)8 ?  *1 L1|%S*[/2t*-I2o:)269#f'&t82hwl/ߜ5%^ A )a$yDm !!" u"~" rl\ vY^ 3^ ).o  M$=%n+g$(p} >F  S  =e$c # )%5,Z4f b T)tb (u.)/ I. &2 W B+se '&Db#1sy*/os>)R P#D - Y W kN Ew%+^ ++h,.7}7"n1E*%]3"  UU"\ '(!t3  O**g2..6.C:JBY061 3|5*X%!* 1uG +0O I11R 9 ='R?Y#-3(E5@J)8:N9H: =} 7|8F 'q1lL;0N#~V3V)")- U'{jJN^k ]DNmK }lo'$m+#U) d 7 ;$ B@ Y, **;&X!L.N I) {&Q ],#b!" 4_cF*L/ % E3 "",c8R,~8 4# $ms[2v& (G'?:,T60^&Y( Z-OQ+ m+o" kWLY,<U p 5aS 88 m;2"!,`'F3'>%CKaEdoU}֑"6`"ͩH\Ju0$ް 2ՔЊΧ۸ؼʻ Y ղx/pqA^c?1 1K#8Dy<"S֍!*#l+&l Z e\'  ~ %.b_h: w X VhV$W)C{$$D  +fj( $u Qr(kZy{ #o)55A=%(2Gg57$%U~ >,$; Bw2 duds*sN(N2 L  4 (w PZԖ51:r+$?4> K" 2&O X[ej`WuU  %A){">8F")&nR  )#@yi #P" "OD*-j f<n% - /+j 'NDVH:&(0M-N /jXc $\$e#rE5?V 0ArY!]$& #-m~MEsL' B XAvN8T fExA0j %wc |*j8" {[ (+# :I, + ߨsuV f  6RM ;$ ', '8 Vո 6'F$n+5D`.1pY` xobL%n\g܎\ild zY/"D*& !tg!ASVm }qvK(E334tG$e M ~ La"P Y ( 7  ( -F 8?X+#", 7u?R D6(v1  *u  !N E& 3 ^ I l 3l9.( J~޾W@[ FA+e b2U 1 Zg l*' B X\B 0L4p d  1l= 21t3Fg  A] l# \8R j; Zo>w C y TJ5]_(M[X A%ޟ3 ^_Q͘;B+\ߢ_+.-)#O 3fL H@ {n__r  v[F+ !T2 4 up(?:8z U [ۖ)ԋm2xXG!Hܙ5X$-׃ԙaʠ 35{Y jm!y?9LV߽ )?+r5X4VݴesjlQ:Sr"xXnJYqhV$ *v M =Ydh B x z kX5tkIBz!cf ` d7  +x9y[rNޯ~@Ԫ.?1zIPQ.L4W9_&YLׁ+ppC" [yYoYd.XdL cq9Qzj s R &J?/Vw`#"|M?-6J% "BҹhqQܤ@>"FeO n%SY=S%Vm, P - 0U@-k su6A)t;wagL6*i wI f N={tl" g*=.!AW )c _0  l/# WGژ a ywZ"Y Pi, ^JKrf _kr _eLURZ| _KR|a+WL ^:)  " GK ?W}u7f^lI  p rxh[ު1*)[ ޯp't)~'X@w4D"Ai  qV  j@: #U q. OI Sm^ ]"qWd7g0 [" N E@y g C8-e(.<'޽R'Xz߯D},;@ژdJnO 2DKM#,Lm2H ;F*W*>eTh8 xRXC}F h\t mJ }y57߹TlA=Nl" X2"BWB&z sfeC[m6B6pψ3mzg43) t c M :W$ez k`#P #;)RE: ! l ]cP5?VMKI=w WWs|( mfR! <3Y:"ge  b+D V2߸ڳS=ި]؄0 HCI&%lwXf%f!&Wԫ)ϔ2GF$EB Q$3' UT mq ˦,Õ`@G=d(fM ,J vD|   s  W"dR ' j60 V\oF 6B|qV|0%8 Fso  9 #%߂o p  mj"]}NJ c?jFRv|| =_EQ=^z   =,E0'ziVۨ] c M+dJPڣ*G(ՇЦawD_i uH lks @G;l xo P  dtD~bqeFsfM\:2"I ["  - s Zi 1H?LRu+;% 4wh%Q ݑu`ۭl~Y*u2sq>P~R 1I s JXL$ek 75Cݹcgl- <o=D<4 TEդB@'xTLBC gܠZ wK`crZU:`!>D>$%j &,  XtrRdA 7f-3@A% s >$ (H|)nJ PjN4-ARlM }G  iof!2 m>&bUVI2 |x j @`R  . D #M!J=.]+"})* @t'yeWZ, !6%),{%KV c U|h1j& =U \8|  Ss?uZ; - ` z"( 8R6  j^u k/t`<(; QE)( 0Q J6C=r L,kS1sު[F)Y#09@(,ڏ6= f0f 9$  #%$R*{'L'N.0*M A @ L @5 }(Y= 3 S7 k DX =OZO*&H]c ?  S V pZ  8&_OT` < @ &@f6x67y   b~%?/v E6~lt@Bz F YC33;z{!  !De=%#Xu(-J!p:t3%{ aH` *%bq~ :?  J  \#)z2)='AV1Z0~^! l' +T\3QR   S VWX%NI0Q a\p]JS RF O +&! oK! l+C Z -Q %w"Q!<$oe` w m_(v3ջ  =` , tiذז J "s"6K/m91/]`-x@S 3Wp~@1 C UpN$JQP i"~1 N , ,%3k\  J nS@ ,d\ "@ *^5_R\?e$! !ct]2 M wulI5K94v 7SEs1 `WpۅC5-b}?uc^ W z&ys4޺~cIG%HROS@&Y6IcIG^A} 6i .s)K'0g K.v% XitO{ O- `1%. _YUUN APrw;o|3( 6% xZ3T] }'jM X@5s g   y ,#. ig:&q G""2 j4 `Z1ٮ2 %m  '~#mu%,;Uyq Gf3v$N' zjo%Sl n EOCT f =C 'J n1 M d@ o߳!koB Da!S#a+? 6K"!T k,j t?v @kZy ) ,85FetQ0!N~$"-"1H&m<J8$$8 j ?gTh-3n ~'3 E. \?2A6*.ץA \Y5KUa, qnR#ߵ p %n!|$)/ W7{Bt#  "v 6t += L>f|,'ouWpn~Fz#s,K  G Kn Q#)m -7K`^? 2!Kp n|3E# +F 2 ^*v&"`%B! W< v? ##] } K R ! :orr4zj: i ]3[DzF |'V. WMbO.R(7J͇fބWSnO؄&׏tLِKC3)#KcIE;!ߣsr 轅$p)5*Rޑlt ݂ʧ 9 A]Ԛ(sVrPxҽO¶l({#>S܇!-W`{xlY\GZ zډWW2eSp78IV,Ko<\֏d<= ^k i)ȟ=mv1i@۾5^޲&p1'ƾˇ TǑ0 eZb`ڽJRC G83U:c7A F0L ZWywݭ54Jf.1sS(9DsaԘM~lyC!; _X Q R^r4 QI:rgx; \[ki-f/sQLv2jM/vPVNH jJԀk?<" DŽ)רܬi٘+ Iȶ؈a Ƥ%ܔ$ե pǩR uYhb:06Hf*GS6L'pئޘ' Kb ^y  / e@w ۱ g%B / <ͮɏpĈ ݿP ĂT?UPaؔ04 s64icU1Ǣ '׺ʡٺ=ާiOm' ޙ` ΉZ&A8%ӕz kgg؅T/h۠>ٟӨ_fo-#,?݁$pYܐQޓfq`ר  KUZ6Fexs&?Kk\ɯԿjʉmŵt8ڝi6M nC_ڶ8nsq p٭ 8T$  (܍!`@M n8o  /:.55PߐWj'*6L ~(\> R qI;OI97>P HIN0 ] ^$r Yq(a,`jh +=o֑fWpF 8Y %Ո ֑PcՅyP4" c fqf ! - Y%]td2pH2 ;= c@qNFדjʀ̓ My~Ș2Hf*SGB!>J hdgQk ɕ0 XϴԷH-@w g`sm̷ <&F S׵]"qwJy / C\GI2'7xZ0"2b R}zatZ*0}d ?dТ r ͑ie݁Yeň6MbӷO[V&˅AVRP$@Qߙu]ϿaXջ lf* QS \_βVb?֢>΢>)>ύ-ݖլ.~ۇ kz⎼a +-tnr޷N} C:׫D=m[c  iˀ3ƆJJtݫ zk;N͗/t<Fqy5bNV# #en &7cVws\Y ۮ[ [-HnQaM܁%, (f X6΋=~-Asn G[  %;g =AU it_j1;>NXVAt  Eu$رnԤ ʘ_h'7Mfz֪|'ͦա mYHե?L M=/ыKP aL|Kްo,1!bGc ,~]@ R4ٿ%שC}ܳҗ_1eR1A) ͉\& ֖3}W!-ԣdo5p4ք)iZ֏Oҟf)d5$Ass@#1хϛօ?0#GI\T` ,@pЩvحBԃ Ն9YjiR(WEU`Nքڎ|3޼eoU/@͹c֘& 2:Kދvܘ V5ߡ&Pj1,(5_f_I ޒF )f@}4' @ H  %m g05-63$ E z\  $ < 8M6#,"\2K1&ӦA# cg H 6 ڼޤNc(߫Q%)k{>K'9d^ B@Thϳ#bԭcF17b^ն- ~ t S;ٝi; Q9XE;K@1ޚϑwR HW(| QpuxGݟ/қ^}C<߃-P-B;nqGKLشhWɒ<CBM A<0S''h }z͵u{ښw߿,Eidk1נXB=M .ӫɮfԾH)هԤ޽өX!˽ X)aޕ%ʤ<՜ 1yF^WEzc#οDwΉG'轁ǽ1 ׮e} ݾݖH3ѓ׈|D$î"6*{Yͬr;IUgǢ 竳2Ps&]阿⸷Ky_`U@Ԩo& I"CY^[[< ׷מ74~\OtײBPV֮CEkuܧ?ֈyδFk:p*_̓ҟ.֬e~#BWDz1?;w8,߽6) <gU $EJ ]ڹz}Η|!ܐ8՟<TM%ևh'\p- $] c 6j`$J9M rT +d%!<Y i%g<,BO]haQY{ g }= Ҡ ۡNX<a= G  ( kRڛ]B` e(M&KS3JLwn:?t-u#̤Ta`/CR % H0CEs~|ٞ:jYwQߠ,X # 3 =a S  ELB7+hz 6gFw v 5.10SW"&"tڏJ#ԟ<>Rٙ,N̩uqlc^ F.qAJކ^^ߡn?q ? Jj0IQ mI0{ܿM>* ;:e}cj1i;#4ihy ڞ tt3T6 A19θ+77B0W݆Xv tݠ u EHN@-3a&(^CBP۔7KO>S 8*B P lw ^ ;cDh# =o kKg5` ]7\ & ZGIZ  ; I A |RK<@#c b 96 "4 1IF~<K u;mu3|l I). h ! Q uXiv4t+~ <D/z.h: Z 6 %dY,r4 T[\-2# k:M 6b|F +U|IM~XO W[7Sa } 68-!_ " ߫3X )Ieqv9.qC_)gc dn8]?qvCmeϑ^ܥ! y7x sop c% F`#H &!njkJ<8Cc-d\e@PDm9Cs   <)(Tj Yc^0 R A0. !H1 _4 d &*$w4!#I $^gAk [0|Z^g $vn X$y&+s[*$b["w.`W  l   Pu-@S Pr = UONIA  by N$Z޲;1.LC`; S1!j++5J(\/.@U9Y%&5$G%gB(x) K ,3k$e  (42euO_Jsl/M^; ZW /^bg{L:iJj | = v    <." :`&ۭ Պ!MKLme;0߂p֑=eT }'3  8 Y߯G  uU- {0>D}P p' Xzp _k 8M'5F=t)s*D^&swzl*:iU\v p[ܪ^݃X+՟}GNw|i !-[m^\ݹҺ-SZ|ܿ\BG |zfQ+cx Y uq 0q$0J P %Xbh o! W V=^ Q~\{JzD^$[Dx^&Ww nLnD t 3*}@SC E(Pc DJ9#U**U6Ρ${C*Н,ϊ"̼+h6 =KW5=$Wf_#|r /UjY* v&%U$?!g%%%) Uj' ,J ,-:4{#c:=SI6}i3 b Bl sk /B ML d&]V\)!@'DޡU9ԏ-:$/ "T ) }T"`bHO b/AIaPs`L>xU"EBp z cޥb 5pX26 &3' a :-K")0_R9Myji`+&{er d>C, ;Ts/ W { /$ATA! {5=!'5 $# eM) 6gZR;7%!NRGVX-qK e D !x5tn 'mw3c2$hs <Nedk ]URm( Om1! @3 CoW;]hSki]"X$ Vݟ^>{WWj 0 $R#u$.g]/ S #sg7!_w܁eݚ# Zmgl0u1ԢjlYH! ROg@MaN{`X'܈/Ym[, _y7$ث *h*2LNV nf<Fc2 -pe<BJ W ;1*Gb m@r 8] -W2,#}dA wI' 0#u  \)K  8# J%areO  N oUhU~xd|e g\Q,m[ 4 q^ "IS۴)ݧ9V:=Yڻd]UC'W!\ڎy%f 1  @ `r7j"#1py xހCYtj~gY78o]p&(ۈӃ0\ Odp ~%N6xdW.wbfMu U]%^"`b$zh7,QQޭLR Q/~܏r֒&3* % gmxBv R{ 'jP_   oyO SQ "7.  U uY ) {!tB")7_" {M L};| Q3  _ N  Yo *S)J-@ W"0 {TcWݐdD*o@CY q}YKs+zlߝ{p{^[mO88L%>^7 1UN/ % |pD۱DNn"~  yu. u < j+sy C6ʟo;JqԫHsvr96"Xqh HG.Z V- 0_*s7G/ 4 F9Kp7{?~l I:{ ?#~[1#&} Fw"r~ Ka8h{aYU` v }{i&{Ln!1\ 0 DZ9"M>%#SO.7c9(s U^T7S lO     !@B(I02!ݴ1#*6f|-܈/38xڥ.[: 0+8(Eh  lR"=(# %S (9" ^\q#J h)34  &!,c"Ox_' pi @n 9!$Ww)1  ' Z(h)fdq !iN '-P)2Rl cQ9 m`*"3XI|3X \ Vy$.^FQv 0z [% $FQ8 9 $b xE # V,K5}5> @ z3 0e#4r)v H*(6b/$D/߀D'RP/543Z9*?gG?8`+%! [!`I"F#->D<'oYGpD (?*bh*@N[k _eV (- G `Ze* #X+"4+_%rI" W(cQ.I ! +*F53#J  4#- ! $ z2!Bd :.! _" 2)4$u & KlfU'ވ@H :j]\$kh[v$ԟ"l l>TQ 0ry<> -k<!'Q.! "` hys =`iB>C[ ,C)y,i> lT&6M&^D.1a N &XO Qr> !; eu#Y 4_<N'*_ ,a&4 1} +b ?yvF_( F '< >D")Z B+c X   a| 4}e 4lH~ gM #U $s" ct  .)d FOl Nq> w/&ar i=8Dp#, e ;Y"0 !:j l N !#Ve" z0T ^-"2+)48"(c!!$^ w(l$H9+1.V (y w.pi % '' 4p1 C SN/()%  2 $ yO2e.jT`iw-x'$X ogY 3U"F=:&2g+Z ~ Q u hW! & h_&  4 "g i` S q eNg  =jR.I  <t z!>L   k #_ 3.j#,7) '`J`#>SL. @$0 ,,>3,A"0 0 XL,<q  ,E' \'!**7o2|.e:<2 014j4PC.7S+E Z<:%/696*/b&*}D#J'-Y<$1*3>Qx$|2/ A)w!6'c] } c i z#) @v %r*4(g-8&x`-p 6#!);?!y9LH ? *(   >3R0[ 3T 3SR> ~Iv9 K! csTO? ;<o-o*+O J/mCCW '+ @Fv TV 6fW B -_b  j? -"Ez&-}#3T(p"UD.=$yK>!D &Z B+$P! H -:s+ Qe.-(0V`*h F;!'($eZ~$d۸*\"3&187]'(6I-#(9O/>|n's,q6'irg ۥ )td!^_ +$I<Zp]{* j R ! 7V[F($+H5B$L3dZW <+%H 0>C -j 4DY3o  o`p ~5FFޅ B+D,URluX  dYX6 u%}T05[j"9O < B ۛ |ԃf  s\ arǤ_  VG0 {o߲Eh#e[I~O R   ] j# &:.b4fI &&*050= $/R6 #('$,pN(&X"PZ ޙ c! ..+>[y<)r'k v qO$\&r)"+!+$ )[$U"C0?"W) R !Nhv"[\fp-t ( *(8@ 7z#~& 4 +BBCR}DZd\ )w >ry@')k, e0!& S]% T1ia-#k-* %+9>? 7}4K'3 h E E5 ;@ l y^Y  - o'k#=-/Z <ZY/ )!N.+#1v 9= >;$g4"3*'`85'h0. **] `s:.y1 (j5L7 .x/S 4 '#8o 90f1~ %&/ [;5=H@1-^%;S < xV , ' 8,O*/| #$&s0H,*&Q.6. }P3)b$I#s%N"*1#1U$L%2"%" 2"Or +)!5,}8$59?YZCFO>$f<1Q6 %| <70"-KZ$v'>6_-3@-H "L (<01%3*Z,.9L"2#|3 /~ ;6w-87,5IB:(0E/:.o / (P%*%w3m" W- A#J2*4O !2*1Z.!I+j8k8b%(>&vX0 .W(}R0: *A,IX/~#F=,@6.P#=-+ +)&:3|+*g.j#z? jju}^3[ s@$A { ;! C_L%q Zu'k #$-#o k**<B[w}.K(UzV1 #O=5w%{f*" .  !  *DbW yC> Y Q ެ_"i'|jp9 Bg()_KAD* FI;( +J ((H}75 Yo= bP-#(kq2Q/ - OW TZ 7(6($.00*7:{:bBփ34'2%PuGq &>.. 8"B;)$$[zA%#ؤ,1 )&e ( ߒ"(=! R+ 3)  &M(7B p&)932"c4?22#PAՎP&߫"C-C"l 5tV}` Q&O$02%e#E4(9((4#1y&9r/T/S$#c*> Z]= ?k9 C5! j| UKdu}v hX e+d+ <'y%'^0$G_(u*hv5X'0p H NV;vU q7*ضS`f\1lDe dd!) 4b70;1|#o)"ַc3 g rؿ \s#ݣ'Т%ϖ)3X(_ ) ޢG-2 5>h9+;76* fY dC L(f2| "!Fb*&44)m, ^1:" 00 #!U*#9?: '_ L. |a U7&F"r7&, 9W&/3N"y-(2* >! ,652Y8: :3 '@#!^+&3Tj O/=RxI\)\1h(I*z  W " w# $nL j!hlY?- @] 0/L 9z  /W|r^N:$B1O5bX|+yl.k '7a7/~e i3g: ! &$ B X \N+ *z1 .#m)T4>UU{Y  VDE mvnc9=)W} EY'=jD Tߊ $A= $ ~P| PzjRTR 2 r~  Q gLsv F&u߽ ؠX9 ohp=f 1B*=.e =byD} A25I *Y%+R+ TD N\ YSiij de#= M,0v#b~,z'S ?uc_ @fdZQ* DS &? &Lhq j  |rE%( &Op&  o% &QHA  )7)\ (66#>iq ] #  I vo + (P% x  {h vG  mH>5c@X!*' 1Oo f]:x!> s'HC7 w4q $x**N  :c {!I,E(E11y,(&F߇+,O6*+"'0 H *VXm, 6w#pz"Q9@ >p yb&  tONLM2=!h*)` . c&%47R*'&%  U(wh 4 )&2k  V!``sS)QTh"y(B!!$%-):( ( 2 6 $C sk T" k! k&  ! { ~&ulC  {FR|% PU02 5پ#)J3Hpy*tJH /YuS!BIt1`NG,,X8 Q1tG* (=&$_   m AKMZT$8'lmm)(B 4 *N B%}%+f % /M .4 'eL2I3.%%",Er//- /  ^% Y  !U[ E[ D!V"e'- 1"$l2} &,).4.@&d-7! !8}&kam1[S s"U+7?=@8Dm7Ab"v fq W#{n  mQ&,B(J5w =&"$ i$$57+j 'G@ (}  B*(\gWN 1Y'ܭߍLF {[kP_^~g8x- Qz +S {Xy Q:s(} #p_?ny5T > {p %b xuY u9$0@ zd 5$;= +DTvE )FQ m kT* L @* _ [-3_&h-u=$h  (T  a#6!H} d#LD)5*A; 2"D!y^q&f  l;o@ ;(wUmW e$(T ![1 < 21 }h5- * INf7 o QH W=} p6Pi>H [ R*`f]"e c{3q6 9xEimc 7y}%   l 7r/9n : 7R"_b!:j8^PU)Z C *p$[U [ ` b,P;z  `|_h;dFu"G{ I  ]j7)rH &4 o 3 P ?  `&|@ %u~+ hS3~Uu&%6+$[U. 3 O7C y nc!S ?&i =!Pv/{]x2Ex!!)u_: 4"'$ O05-pb-@<*MN,f%*V1&QM& M(@ `=4 3'Ll+ Jr"\  {F" 1M8m F(F3*& l)8It`Y5#0#!lׄ qR!T/V_tXF #i _N m#("%z(# T&"$bA ' ^ x)$&,cu#4 C i,H8?*?&]6hp0 4YX K B{DHth6 QzlO%U#&&37a@#5!ow/5A&Y'F KgWH r \.D(M#U`n :ZB1$*[%_21c,*wd!]IZ]K t."3RA E . qk![Ofd gbN?K X *'Vi0RP '.% Rl!/}.D' {f&1/#q|281! P $)- 3=@+A 6 .38 {%z (''71 '! #~)f!# gG!r)h Fll!dB) 'b;\u(O@'9_,8 -*9z#"# ,1FMF(@9, fCzJBt*6(t^|?'I)4+E> D/i0*=(z  7~& 7V$|H"'i*S )G:)*'%d-'Bt  e!  D10 n98H 5 v ݗL8s:(FwTv@ $"";<?uNkNDb 7 3;A BC ^ 0Y8=5'F  n  t#@/%$l7IX( 3'c*$u&g2@ $ : # ('Q Jl* #Y (&0d#l-Y%y"&''( I(T;(65&{ +u#;'z0_- &!$+y'/ .Z>O_W2/؆B#ۿ> "vD ($` G8A ) +9Y S &Xz+ 859#&g,.:/02HR/ 134 s1p(- 0S'5  9+|:400+ vC-r| L| s?VLht _֢@0( CV @"’ ,6 R^3ޓ \e,e$Q$D]9h QR$FC.0w@@ #q }M(P __C%_,Ng h++w9 R-V% MNI&  ]  Y G9bR ! *tD#d3*#2 xH Թ.A&Yh-$ۖ2ް$" (-Uhpp6 \b܏Lqtt ` v*s VQY FZ"$Clu 5t n3K  RQ) pS$a!z'('b%Y E  .M (l6 ݍ a4  $zޫ܁(Q0R>crf@!.  ! UTO 3s  UrdY.N;!)P#c.Nka}jz 8yHU |" ykf G2hx G2"`qdjR';SHzlnYhP:> ( rhzMpf~fN31 u S 1d : sQ4 4 'evZ0j4. 4 Xrߙ }f& 1`ޣEMv 0t{F E}"0qxDf. ^םM2#+uѩu^#ր C׻P?XDP gC}̷쥳 QvQSfV^W. Bw y oi +$g%uNj^27!K J Y8a`2?֖ӧaa\+*%ЏbM#̜ݐxyPdA=ӷ@Hj٣7{Ya" B9zN -pQ>IMpi3۸ ?Хl g\:#xbZZI @xMқ^f6mF9a!eJ$%hKɒV & }m-i(96)RԖ0Q- e@~ҁy0XG B G rY2 - Y ^`TAlJ*߳wF  W  [a%# wu #V1!W#-~RE ms֎ެn ڨZMLA%hf  & K #.s )5h ,yuj i O  D;~ VlH I q$)bjc{ 2Wt 1*ۀR %A k o m -` 4a < h' g.B,[`0 aE /i) x-z d,XC qMi [ w2H9 };0ZsMU @ i x '* R /1 D  4Q f}j D"UEpA  q d y5!cu"+H& Q G 'U4!b%6$&G -$G Y_!l;"t?] !%o@ AH :`x ) U#>,q :@+/7t.I`%0pq59[>|#M" +9#ZT ` %3o u6q( n" Lg*V J ) b <$tN;WY !_mNcxu-c8.(O|Ob t/l/? tD1^*Q X !'Zr=ogcl[2FY͞4 -#׿ |6 "'Ug+eoLH&S,W n2+$9%3\Rs*p2E5=Ȩd !wBؑڼyM̛G%hۑM>Z4-K*7޽ Y}%XދQhZH٢<}khʜq. c<;?Y9+ >Z-  u M GЄYÇCj 1KnItIQ ^iG y"!aIO8P7ߛ 0Ҥ fi:FP!x,Mw}c&~nYARNrp2֒޷x@[z|. B qHXO  H )D'\) H0l\D }8ED, - 8 9 UT 0h  5! ~)TPAV#+; ޡVt )t$r 0K Fs Z Kw[  a3LZ0In+z3 %8 %07 ?npI(*ek " zp] P"b1T% F7mD"f^vމK X1!_ l { F%^$[JoW / [ uoZ; #9 KC&Tm q]0X d[C]/ Q J{}dl{ 9U Z'Td9g  | p  y>Ho,q;EU|ijfl -ePGvyB$Kec4CzEm*` 1Fz o! ^ %q 'x ' kV , |)p X!I ! * (   d#7a&n(( |# h! ,20:: c#3@R^e # :" ?# S6Y "V w~&| 9 * *1$)s &b>7Ex=mZo8vBa\alt .~rqPmsrpI  u R* ޖ n݀TB' ӈ  Q |  ye: "# 43 })5xB {  CjNT pf =1u3D+F&6 *8J#r1  ~k,%a 7{"Q]  5 < W Ob7$GBZBVK f\X3^ r4 >|y Xzi:rGB gJ C J (79 nMV" /8$A cru Y ؊bF.Ak (; Oq|B}?@I 4wI[  R݀rؕ Lf ח*7Y#T АMQb1hQw+|YCecH i)Gl5 TZ 5 ^Ip TCo3Rc)Z % T SR`#  }` !S#x < $ +#'Gf2"Sz &k g)j5>{*b V,r-)L +]3d^DyY #$.\%2n>g#Vi(6.5A8 0&1Z'k' .}~9w 8FGKatu? %S ) / %Bb16qU#19C'{! {  #y%  B!2 R  ]Dlo 5 v7%V(n~W Az# Bd, V)HF&7 8$?  |- #p{ Az@ݶg  rJe SJ(^ݦ c@ Y\g S }+NX$'&. g&(@ VWz{R{ K' @$S L)B"w]2smm& ݂l \3  d ~9ax{+ L'%.y-W5k=  + t  m&,+9* 7l+oj# -  q  X 0Y; 6"ZR7s^"!c! T 9$N0 /:# +HP+lT R w- Y d} ; sPGFB ) U: &9 U+ 0N9`Cz{ j+~Ri; t "Qj -^"7 _ * wq C  ~&e+)8*0'.:X4+;a'#T!+L8q1([.--G24-^=o438$  N" #tkTu   )Ef uS-wl  J 2 O '<2 d0  #*4/"DI ,"K|$n%h 1)y*<'$v = 8 ! /+~2?'G2(1P/!8@!r# d E\ P;q d$<'%-1Z)'d d,6 'q#}8KR5*%c/0}< !# 3,~L# A$<5%!R&1z1%]%c'A"- s '&%+=6*"}!' H`l** 3H AH{4n"Z&k6kx1  @L%tLo_ !yH+ *& %'V-wdv.0&8a_"5+)~ N %Dfh=b!,6>9B c,r:S'T"r1&7z*xc$*ynvc$ #!! *d%#oM_&V25#'*V47o20 -`gioEb<Sk('-Ke#$ N $% 9~hfqf}A R^&#Qx([ $X!vjGS K 2-%#>i i<# EFB#-X*G1 R#"l s#h=-OVGH o* o As1 *Ed orcC  f # d _E tLd  pm 7 " |UQ **+$Je| F+0%!t, +^"v- B!#5,E,6'6>] $Q?\J!v/8(./ "$q8$:2;%.+Y:>,E!dC1- O7f$( !.3 8$ -Be 5 (1!Z Nq p !$O03,i ׾^-# 4~+^)8*#R4Fd'm&U1G' $ r > di{0 V%L / ~ { 8G$ c0# 11+80VtR-m 7, hN;=l#w I1c;&> MEC *#C#U&_ r)!)TP/-/}Fg+&M'1Y$./,%@92`_s s<* I 8<*,8X#N Y3O>T} u~P")% % J-' + U'!W !#p, D` 6J $m"+J&?J& Ml)Wv 0.pFint~ gKL mbA d!<}_d 0z# |0t! P]lo Sc-# a8a # #,5P**+3w|$-jM%2'k. u+0LR Q*j I)#U#].|kO#=I _#IxE z5&|~%M 2 u!5v 0{v opi$Y!5 +>% y+1t )3 :Z%$d%t$8'r *$ "X *+ c!$ >$/f:%z9Og*Es +T_2` a;  7a76] S pO s8} c&wd2!u7$$ 3z f JLj)\ !'$(O0I5en<0&"U,+  2P1:. 1I (&&k +O e7 (p+91/ kM"@0SwJ K"3$!d>!kY 0be+HU7bytL{% WD7T +$B$>!%  v5""X -AT<"['n ?0 Gw,D U&.& Z A h!${ '"=$._(G"-# xTcwXO 543߾yb\3Mg3 TJ$}, if\'JE [h6(hhE+vM kSu+$_~agfYa n & \\/,  tk uBtD QG*A gR 7_{ BPpdq$.We;~[9#%M ) Wp0Qh.  c G6/A1fmi [{d-z^ۄ"W". DRmOH{X[P bKa)ULuu> TMABh8y FYx5.N]Z  wi=r*\.!! q] IKy07'e| z i "6P !L]| 8e g ;= %T[>x W-@$0JFMVgn  2_# q)#x)~ 8dOvaa T<""W!#+*$ q@ Q, Oj Z0Cpk}}C#4>z`0BW `# O)tݸ\f* mC_;t n - I hJlEAm "&Je){r`g& Vj 5i\ 3 `8@Wk"s\U;ݧP%<ߨ)K{.C #} 8 } /)d Vj3F8[Yܖf 0Kt6 z ';LQ3Fi ܛj1Mڑ#/vA{w] /   m{}d   ZBFA&   Sa )]@% 9c -q+'QT %ANr" }!Yp OaC+IM yhW B6_QR{ "!n'n!!9)rY.b$I,.+$69%12$: 71m.V|-x %^)vG7>(*!* S!X&_,2 'o v O (o 2* ( Q*'=#dU.i_ 0;+i$e{)ce W. B Y.. w1>'?M.}0CLpA[1_'wU/r#)4o; N!13-,"1=G%v!17y9r-1vvgO/J$#TQsFCxEnSOXD&p'",$2A^!E .;:FB 0(<}V3:D*$:;1*$Vd#`4Ё<a6Aa"3:r.;f,=tDnZ$&_ Qߧ/^%- iuNc K :h- D-b] z  DIW@ d f!-w /% j f &0 _%(&.o3$r^js]V*d ,& 40c߼3=EE @lc,mA# )-d,cu j$ ( $ 47H '0-33![9}'9&M2 . 2 o# *Bm/7"95%0A #, -u 7+81.7+D=^y `61y M"p, O/L&o/}!0Y$+B2*H L^("m"3%#K% -{ :=Y,10kh >"iW u&I3>8gQ9B [6 )lZ8LB=;p*$%}!y,R* T! #w L 4PD;x4+]|/ $#3s( 's,t]k& ) x. #ZUU lI,^=!+$2"37'uDa/ !'<%&"8U g b !  & :0O 8 )!(U(76k`!W i, 6F(C#2/Y ]1^ !1(&~4)-!FSjc#HW@ !o  c"# ,$a ")C<-L#n,f +%g*\,5/ s)U  d !$T/ %k#k 0 !O-[ ~"y "'1 REl -n 7"f; E N2 m'!I$Wx , $" w[#_@7x#H 3 ~$(3"Xc+)i5)~$ m0)K"1'5U+>&J4+C1(9O-"# !Tl+k&$ !v ,4=(65 !i"b$,.&~-+0@b   Y&$3/A 75=Y4,!3+_7 *# } A j)'@ < Km &1v)r- M &@E&F"v&!.1{.1# x-Gi# Y!$gd .nf'Z+`'$ .+meXZ.=)D  -K 8(E :#y"Qr I a ) mT?t> 0L+| (i es B`!7 * "$. . 8 656s/)>Yc-~71w"o52 z>)1u5%>#p,484X!}F|.[$D=O $*~-X1/ )#/$=l] QC Z8= A#x&' P##6!=%A"#/+6|5N>=|,<3''&M mE !aT$ * ".(,"(A0R! a. "|P_4 =$Mv"P)$b< h*l $vM o_"`yOA44! -i z(Z#@Q ) U  Q # M @ @P@}aC r }_ gVi? L/  7A X4$'O,ER& %##f!  SJ%Vq?q18 {3; dBE47o% M'6 oK49I R$d1>n+9l5"? %F1<0  z%0`p/I3&+,i$pt Yh) f8 c|(Cz"%I:n#uG j%m> Uu" P }\_Oe L[* ,mu)#+ /.O< o,'=  &p +W0x ?ku.c As"a{0ݻu߳ uZ. {XH(;1 ?_۲cٱZ$X(Z|E?\ "ݕP,E,pi 'GF}S > 6;\oع>'@npx"-ד `cCTy5/6|1(e# l?#,q)4c# (?-ٿ*'8 p#[qa| 8 `! Tw*@4ZM[nJI"Y!02 S}݉|dmz-ٜ+{3(D6 :]l Bx"e/"m-.hp&!MI&:# uvtr\n z<g &B$z|&+(3,G:>3-<3"1 =zPQl x$X)F*.i#<) *?& 3i$6'a!F m#oxV %07@YLl .Ap c|=Ҵ:!/#2! F7. <D/ (-GX #oRnHjj" #K MSע+< 4ފyshg5#!I HZl9 y1\nB|$t0]4(c'V&Tj9 ~N  x0L  _n#I |) S y\l fR s;uX  b>%/@1 E 1z K b G v OO| MrDhM AO1e R -#6C? Qm M1JPdp 8JR(ܸT-u' Z q_: \!ؓ)׋ z a'OC(JO."| izsAI B 5$I  %e@Z]` 58.O (`k(S )<ϻP qg= rвrvޅ4d޸ޡ)ckQޔW~lV"iwZj][ E XX5|Wծ9 Mܼ,&ءN #(QlI1giۃܙZ@+ [_ڂ#*\\KA~ -v&d8 t PgJz5+/ 8YA+߅ ӈ>4F$ؚ f թb3ѕ )ʅX϶  ~ K#AjQ_ Þ sX Wk% X # _ 7 Z_4 2 ^ۇ Mi ߺb۩ ; ۣh ~q͌v  R ,!!PH| fxM | C\ߜY +E0%"Hg#PCKRa=7[  ,X\^?)k {N {+HM78*3 c24!"H+Pn43>[4e>+AL/ ; _7`&$I,3 +(b ,0xP #$ 6<H)`}9;I%f391=t"q! ="$.52;45DfC;3-!- %g.! $u!CJMTZ8$>Z I\=/jS{z m"9}$z g l3aZ 6c! 'm_X"lk J"AU) vDC g M 'E " m# Ys"h&)j!**8(z/11GZ+ =.+v*"k"&!& !"# d ##2i-*; AC#^5!'%9`!BJ,=E2"\0>-/ ! ](*jS)4 '1. 6'*3##b'a|('| x1 !)' ""'/51(%8!-% Z$%,5!=% l&]ws.#j,0!=)07D3R&<'"&=1*052%}w -1}#:F"81/0''j%y#42 #TGH*J*3A%2 3"l"1Q +08I89L<!x6<-=0G9C/)&=1%5x3:~(h -!4Kj )  / M 2<|i/n ^, % (]@ t[3M  n&,: #y&*#+sH}F Q\E> Q8W x`a#( S;b.r$?xI 3yDI 7.*!!E n9 "e-_ 'o' :+^S $=F  B-p ] U;Vt0rQ =}n m#- +'%, lw %"\k- z"#'VE& 0*@%#+22u86!v`5|6(8= #q*+ x(l7%,%5(vq|D'u2׫f]vӵEC | +@@k+ =ұ a2B ѹӚcOEp,E IՍǤj+SlY8Eց<ϫ Oі;(qTʈpmX!ZmɊӦ3 ܵSܿJv[ ǧ+:o#B" ! do^P5_a} .vKƳtͷC')9S z Ni]Uһ&o76ﷹ߱w; OϬ|yMv(ڌUf,wӰK<l>VL- i(| QQwlٰM<j mIn+,ւQOɃFÙ jNАh؛ >X;ف܃%F}y7O6%t,ԒI>wcQ,Zї+-'sjˠ&zƏ" ,GNO l%Yֶ4IRF8փ\hW![K CB=Z%AF 1$XW v} ~mo  !ׄ6ҁ to!D!)!m(T )O-N? 78 7 0" wQ2K$ R  ^ -zIݗHr+a1 'UfԷ _Z`u'LT8I$1b%1"y "v "CW'c k$-;,D49+`K67ٰ:Iv41AR֝ }ٚ &\.+r%3jr|!,%#-beiz9  L 6_bݱߚn*xZ lrA, Xٍ1MB{ 5rVqA%,/ct0")qv%gN>M"_3 a)G`K4 < H7e$ M>:ܨs7 # ).  x ' (I"0uk$x1 2nk* YI!R<%";*%00U4$)A^%G-H&4 -${!4 3C(-%4%-x^%`fb$# ^./^f0srB9[ XlJ % k9/*0cv-)qi  (GsP&( x%  ޭ, . H'\-tqeY`*XH-m2WTA 5%"W(H ; [m 4 m { F; =l"&Xd_ r _$f KF " s9 w$<w^ : R p<"[ B%%0j#a' %"r&$B8 * Y$OG U c7%Z*'l)>  !BN E *W UoyJL#7 h"y+H4G%i , P iv(O G>5AQ P = 5#leP#٬ jޫ %.*rDӺ9ʍ  U>E" !_g jb t Vu 3-dXB zo( ' | @iF7, cdqC 0E(j+r%#n+)My"c%*!o )1 | ]-# I%&V){&o0'\~#> 9V&*Pv)8(f/t L.l ,zK&N $, '4aYo , QV!L\ U)`}  >>* ?]%W8e^vU;Iў o!9<z v/F$0ZG ]. ߄%Mtר  `ވR sI WoJ m!Ior#( ;AV=KcDv2k QGR=~(q# FnFk9Eqj<D9 r# [= eYa$q@ 5 ?"; ^ x 6bLR_/ R$E k =v7   )zcxGN.r5(gٕaST-A\k;eGy)'Y]VBVjT "@!c7LL ʻRӽ%J?9t\54fx1=n!ݧ.֛۫̅'Yu_ؚ_ޒՓbƳ#"=qGhס׍: oYP{\J Q.3tN 0fAzK }%" 5cx\/=[ !"F*w0= T % P(:db%2yzJg Oe7џ `pcրQܦA >! ]p%pT !o" )'nrS4:W*  & C~1b; >9 7f q=  s| أ R+&?&tI!WJ . {x$R-`m ޤkWҳPgȡ[-qƄѮ u ֛\9~: FT_cFsJ9sLV-d;iPn7 < TKs(jRDD)i5[ 1B\)0}eqgP7 CjO n5F!_ݸlڴWՅmM-ԇmvL y P}ͥ ;т3Ǎ;T/ q {ʽ(2 xbÙ# 7Ħ$$I&Y#y ٻ  L4 [& h5m8a S% ^ Kd#= e% ] L!. m +n> T:8 ם "bo )$i,'+ 5 7d% ' u: & 4S S*- #Re#gBte1WB SkM lS y$im L7 qAPT^ 'M %n5 w,e 1y  [ dT#I&!T{   fAxLj 2 Z; ?f !1'8 %~+t:P 2 y  `R 2}tMD ?w k (Dvo B cqnߔTKf#g&@ Ph9 !e /Wd] XE< lB$!Dbc~ ; .[  j  kk ;I YyR-' ! | H&( NP %  KH-XsS 90k!{/ vC޸%g\ 9'24 b& qwK-+5,1Z21(g2 [\c|3k t P cdo;'h(;1x8[< @'C"?#(# .=@}gG.'!,& ,x' lq '=#G# 85oI]st%& %3|=^PYZ WP "4 .S4N $)BMiXCw2wn B gM "6 (*\h ;ur&.u--(#`B   #! iA\uy   U -MJNk[ Tj׀Ҿ )VS?b_fN *v @m  5 AOzQz56 ) ed In8%"BH gwe{ " Z P  lm:eߪ Ysdd,Q 4R{e3 , mExn 3SgݩfRQIj}D1s8v{!i4 U%OhP+e',7xx7 5 h F Cu7poy/ -$ kf q"s&'Z X,! <PjR{kVNvC *&>': =7ry:w<  5WI %w}؉ N5ѻt[Mp͢ ԴR Jқw$g!cص z h&I"7מ/!״Bѩm- ΒX2Ԕ8q- MOZJ\:=ca - Қ^ ԡ%^P+(ONi"j# HkPۥhʷ,&% r/A]]I7{  cd CFطq_)y]*ErކԄ"ڧ)&5ITk#_"] lVX\eD&WhFyV5l1d* %޼$ٞ*\dEoFaV]$a  nmw& /&^bd q8`) Nnq{MSkHLk _e,CSU_E=wf,--#[܈NEsl4y,C( sG6, fF!g z ~_0b_ $4 os= xwX: gN#n. #ߦ )m  -PK1<7B UZ57hmE$  kuQ \4] ^ ;96b ,"\to R~ !>oB-`E@k 'KW=J: N 7 XjT r!D";/e + j#Pk  = ) N3 [ M%n', #FXZp ]_A _%'#zj \zDmd޲o ݱuޕ#My O&  ]7O q  {o ltQR"6 C J+J [ Hs D]u! 1! BY} 5>@ b"&hdvH#9b) }Fs m+8:#T  VZBPb(1A`+  z߽DQNn O,5}CcX9#= ܋i }V8ntJ$sD4T;F0!~K'7bF)'!; Xڳ$pֱ%v$Ռ!B8HAy %n 85 #Gsa cj:?xKS~asN8C= w=SL[) #8`w(sk E\o ?w\C* ?|5 /e_h ?7),~)&ָoM|]}pN\AvGATxyt1e)+f9|z(88V=޶o^3Rs>I[<^װ[T||]%?Yp.cٔV 9x|9rOy)/5ZkWTC# ާ>|  p Ku @n ! o=, { @qR K v#B'Fg 6d & :  @aOx4R1qzj!$H` )  N*  X ;WD.\?(h KpM|e:B -kw-߰(;7,A݌j\}o{ [5 ;RrU ?-eBSx!W %-P .9T:^  &<#SvޞQ `-~    np Y^<JdlM I]1hS#) NN` 'WEܔ֡-0) 3H”/Ϲ Qgٵ!<  d!] AEڶާˮm#H {~HfZ-Ĉ؇֦Ί uRukVS9. gThgx'ԆV 5f] "i&.95T*0V/ w3=d3uq #{6 ;eFb~?){XMZrSzo7 &4h/ܡ)< ;gib7q r/'T[hޙ)F ^ ]WIO6 V/ X /@ A B"~ "]ޘ* eG\Jn!DvS;!}BF41WR M `qpZ9 s`b { ]qKx 2rZp 38; W_Q( 9~eJ6q8 Z޳ Uڼx u& 05 %X kE#V U0*d!&Q,9# ,F+6gD( zC?ORB)sx~"Cv@ q٫ X$/}$R[7ݍGB;- z}|=,n 5; hp׭ ;[W WP !nɱI [M&@"_Y J ?˸  ׁu|XBn4)}e7g  тcF. eb ȸ}!qs[ h4 fq0zP}\QC1vg, '٣,Z3KT9|-؞>ٍ >$qsrK.ͯ o1K 3>,&iխܽOC=eݤ )zO  P1 =Ԛ]{Pi7e?) E) 7-a[I^[ @ J7 zq ҈V|?0g ߐ@ ~k AU9 ѣtG9@ 'gY]v$aWxw *Aa m<11jf ڜ! iHq96pJFۄJB-{Uۦdݏ _+e^MFЁ ,4 1 LےÆ Q՜d ,\ڍر[Ko-  M_$Ze!8M pNΩD[҃תۅԅt qGig&6bst4xlK /t՗rܔGւw@;Kj<X5"ܜ5 rعڕЗ F Nɞ>M_ڻڴ8Ώ*+&s.ْ ;x-!^7`z6X$&-)Kf= pL 4s VphP[w#d=jTނ~"Y))b*%$gD5*@ƍ=&  "?o& KE c! ; G ed Cl^" N b]: + VEGP 9  i' :: m~ & S U F^ Z" L T#"`2s'!6!(@4e*-* !2_p cp dWy >w%"s  p \T q8 5ݺ%>g(K!Dߵ$*G 6&J'7E5~ iDX{Sc ) :$k)'ew > ryni==~m6,[* ,El0,  duj  ! r.- m8 Eq!` 6>x ;" IiO J @ .Au\ d kk:fjM a ,?  7 zb..,t+JRh}M!"!q W1D# } ;9 wT0A:"9 pa;c AW{F6T1Sl= .1f9 8 6 hN # Z90' #{ "N +2i%j ng[#C"~|v n C" [8Zv kX  G+ Z+.%&d, #/; $&*tA5i@I!G$c yHY@dg9N C P, Ax Px2ݾQY4{$~QH!% m MVb8 'O 6H0F K l)G 6 M4Y!gq -u A Y"017$ D#g d@" W H$k_ a+ A'v!*u85?~q(~:~.2 8%-,(0HF,~(m}K L" a$9%O N=$U" \ 0M%$'"p w g#%( A/?#2 a% /!{J$a07h#` -^  $uMz&? qV(*  4 h$ FE T2%  x yA #;#$ b6& %#| :b!t ]ޕ"8 M WuG*wt1:  O( . J)A>~$_9 +e U&t+#gQEZ )r [ۨ@mqƠNY+m΄^<9 #m;n6QV "+&rr-.1<82'1ל'^L߁$F2tQy#7  yhNEg_"% itf6  !I m jn-R3%"6 :&G (YA F&(OQ# &%# | I"0\.$_{^eD 7$)y&*)B(2$ !) / .|1D"$5A r ;4( E 3.F$ 5v~%'$I,O(w'$=1 &Q2QZ&R#.- 3()sѨ##P+؟&HU  !4&0'c)k mO$ U8a^,d(3G}i78:' \,DSFS +6t O Z iaLI G"+ϸi5`"yl@ S p\ލ+J< k]K'"0*!jv![=1+$`* E$<h( '$B3i&.\#c Q{lEH U'A,! E" U۝5% ھ'T+'n6zش,$/̀$ҥ-]k =lP1 hV gP(jj%rV=mS U~܏>!Q+[  L! ^ =Og( @o+jx]0%O I p'ݑ '_8{ ua _8 Q ea{lMXF:Ԍ  sUYi֦ՏI|+4b<dG=XT`W " (6DZ ߠj $jgJ I  : Q @El (X n Q 2AJK&!} Cva PF O 7m +!R~"QXW)$40BTW_ &-* "a$ d &1>nv) yK 0 Z;z'bqF}epy  "'&"D(hYN,4/w&K0l+e ,>K+ ? m$e (9$", ?JV# /@ ~ 7  O,HCrB~8YVqkr>F@ C U '4m&Yts Sm F' aYM&P: ;$ (gtC5y `%}c TVPu 5e'I_"h zn a7p-TG m ;$Z$`W A " bF g4!4$ #*QP\| !B  "'c  i! \UE~ O t> e(r c FPgpD}[ #8&3 ["j& ox8h!   qKg >5w ;!)$*O'f /+"! ij2)`!u#  2A r k O}0RFQ ot ev&!/+ .&&q(y'vl! mw:c&S @m Rm c^>E 0+xL< A`*\?"ZY ~|0   c'/8  )(!. *p W e@& e#  R z k Tdh[!4%=89\r u #o |#{ H| ;"#f# B6bd ^> u# J / !%0 #DH"O+_ Ax/ %+#*y!= ? a~ /# .  el-<&T?P'p 6 j]*+X]N( w<[e  [ *% e   #F t  i %gYDU~ A5! 89 Zp  )6 - Y>7(`t#\", :v$CYm!2()g! ,,_)| ++ 8?&v y6;5!) THdo$ zG)# ()  !-9k Bv)]S) .!!k L%$T+  x1wk ""& V$!U11$:T!','#[2soundconverter-4.0.5/tests/test data/audio/b/000077500000000000000000000000001460501237000211335ustar00rootroot00000000000000soundconverter-4.0.5/tests/test data/audio/b/c.mp3000066400000000000000000000145001460501237000217760ustar00rootroot00000000000000ID3aTPE1 test_artistTALB test_albumXing( %%%++00077<<˟dQ;&r?N-ijPPP֍PX!d L284{%ۣo_Z,:FeYsɂꮄw=/OOWoW1y1Cq̠܈EPeGnќ$3$ tl`ϓ8W(TH f!r9s&`k^H0OR[ܯb`$XQlAY5 !=@< x+yV^n;Ϳ_y$k1]&m**pXU#}f|j$>i2N_-/sa - M ƍ@"wƚBPb})ݪ$ALbݕRr%LHCr!̥ s0 Dk%0<@T %$IG M < ^;SZ/_N^i$7fEyG5DTʚ#(?&~ZY>a}E @B]@ȳ9L F96##w6 NM (7/mh:Q  d6QF=Nʓ Ɖ@Q<ք֨ѹC;L;cu˙q3G =99 M+9oO\ Ю+:ת<U;n%YJ3*mx Ɓ@QݼD`z*?Ը =B?Dus*_C%2mw"KFE#{8u-L"W0"R;{ɼ, @QȞe ??5t쪨fZlJ dcW꠻\A..r{\g5|o TdHwN8!c2ݠ!@#HVdPɷdM5Dd+RVcJw,7ŬR#Pd \8+d 9Cтe/ªrh@$/7\@KRD WUdDAb?l&\)d źɑ-b(X깒i@$ !@:c 9K>Ŧ%y؆1}P}{dvS(8P*?n}kˣ)bVS1OLs t<-#f^e4-(`~` <ьn!-ya)QpuAI)w]sqF ?j- eiT`U慈]~/P\,*` Ĺ# 9m4( N.z Cg#j 0lpD}q`Q3jS%h6/CU@2*. @4d@ >!@WjɅT+h? !f1hS/2tD_Ǔ)F2dgllq9HK,JmӞ| "DerNS܎#&` ͢O ^QQ0,hJ0]DOљ{3"d 1 :ؙ5P&` $H ?@BCDEGHIJLMNOQRSTUWXYZ\]^_abcdfghiklmnoqrstvwxy{|}~    "#%&()+-.0134689;<>@ACEFHJKMOPRTUWYZ\^`aceghjlnoqsuvxz|~   !#%(*,.1358:<>ACEHJLOQSVXZ]_adfikmpruwy|~   #&),.147:=?BEHKNQTVY\_behknqtwz} "%),/369=@CGJMQTW[^behlosvy} "%)-148<@CGKORVZ^bfimquy} !%)-159>BFJNSW[_chlpty}  $(-16:?CHMQVZ_chmqv{  !&+/49>CHMRW\afkpuz      " ' , 1 7 < A F L Q V [ a f k q v {      $ ) / 4 : ? E J P V [ a f l r w }      $ * / 5 ; A G M S Y _ d j p v |     & , 2 8 > E K Q W ] d j p v }      ! ( . 5 ; B H O U \ b i o v | ")/6=DJQX_flsz  '.5<CJQX_fmt{  '/6=DLSZbipx #*29AHPW_gnv}'.6>FNU]emu} #+3;DLT\dlt| (08AIQZbjs{ #,4=ENW_hpy &/7@IRZclu~ &/8AJS\enw $.7@IR\enw )2;ENXakt~  *3=FPZcmw '0:DNXblu )3=GQ[epz'1;EPZdoy *4>IS^hs}'2<GR\gr|    ) 4 ? J T _ j u !!!!%!0!;!F!Q!\!g!r!~!!!!!!!!!!!""""%"0"<"G"R"^"i"t""""""""""""####*#5#A#L#X#c#o#z###########$$$$($3$?$K$V$b$n$y$$$$$$$$$$$%%%%)%5%A%M%Y%e%p%|%%%%%%%%%%%& &&#&/&;&G&S&_&k&w&&&&&&&&&&&' ''!'-'9'F'R'^'j'v'''''''''''( ((#(/(;(H(T(`(m(y(((((((((())))()4)A)M)Z)g)s)))))))))))* **$*1*>*J*W*d*q*}**********+ ++$+1+>+K+X+e+r++++++++++,,,,(,5,B,O,\,i,v,,,,,,,,,,---!-/-<-I-V-d-q-~---------....,.9.G.T.a.o.|.........////,/:/G/U/b/p/~/////////000"0/0=0K0Y0g0t00000000001 11(161D1R1`1n1|111111111222$222@2N2\2j2y222222222333#313?3M3\3j3x333333333444$434A4O4^4l4{4444444445 55)575F5T5c5r555555555666!606?6N6\6k6z666666666777,7;7I7X7g7v7777777778 88*898H8W8f8u8888888889 99+9:9I9X9g9w99999999::::.:=:M:\:k:{::::::::;;;%;4;D;S;c;r;;;;;;;;;<<<-<=>>'>7>G>W>g>w>>>>>>>>???'?7?G?W?g?x????????@ @@*@:@J@Z@k@{@@@@@@@@AAA/A?AOA`ApAAAAAAAABBB&B6BGBWBhBxBBBBBBBBCCC/C@CQCaCrCCCCCCCCD DD+D;DLD]DnDDDDDDDDEEE(E9EJE[ElE}EEEEEEEFFF(F9FJF[FlF}FFFFFFFGGG)G;GLG]GnGGGGGGGGH HH-H?HPHaHsHHHHHHHHII"I3IEIVIhIzIIIIIIIJJJ*J;JMJ_JqJJJJJJJJKK"K4KFKXKiK{KKKKKKKL LL.L@LRLdLvLLLLLLLMMM+M=MOMaMsMMMMMMMNNN)N;NMN_NrNNNNNNNOOO)O;ONO`OrOOOOOOOPPP+P=PPPbPuPPPPPPPQ QQ/QAQTQgQyQQQQQQQRR"R4RGRZRmRRRRRRRSSS)SUQUeUxUUUUUUUVV%V8VKV_VrVVVVVVVW W W4WGW[WnWWWWWWWX XX1XEXXXlXXXXXXXY YY0YDYXYkYYYYYYYZ ZZ1ZEZYZlZZZZZZZ[ [[3[G[[[o[[[[[[[\\#\7\K\`\t\\\\\\]]])]=]Q]e]z]]]]]]^^^0^D^Y^m^^^^^^^__%_9_N_b_w______```/`D`X`m```````aa'a;aPaeazaaaaaab b b5bIb^bsbbbbbbccc/cDcYcnccccccddd+d@dUdjdddddddee)e>eSehe}eeeeeeff'f=fRfgf}ffffffgg(g=gSghg~gggggghh*h?hUhjhhhhhhiii-iCiXiniiiiiijjj2jHj]jsjjjjjjk k"k8kNkdkzkkkkkkll*l@lVllllllllmmm3mIm_mummmmmmnn'n=nSnjnnnnnnooo3oIo`ovoooooopp*p@pWpmppppppq q"q8qOqfq|qqqqqrrr2rHr_rvrrrrrrss,sCsZsqsssssstt(t?tVtmttttttuu&u=uTukuuuuuuv v$v;vRvjvvvvvvw w$w;wRwjwwwwwwx x%xyVynyyyyyyzz*zBzZzqzzzzz{{{/{G{_{v{{{{{|||5|M|e|}|||||} }$}<}T}l}}}}}}~~-~E~]~u~~~~~7Og)AZrԀ5Nfȁ*C[tւ 9Qj̓0HazĄ݄(AZrօ!:SlІ4Mgˇ0Ib{Lj,F_xĉމ*C]vŠ܊(B[u‹ۋ(B[uŒ܌)B\vÍݍ+D^xƎ-Ga{ɏ1Keΐ6Pkӑ"\{4Sr ,Kj‰¨$CbÁà<[{ĚĹ6UuŔų0PoƏƮ ,KkNJǪ(GgȆȦ$DdɃɣ"Aaʁʡ @_˟˿?^~̞̾>^~͞;?_Οο @`πϠ!BbЂТ$Deхѥ'Gh҈ҩ +LlӍӭ0PqԒԲ5Vw՗ո;\}ֿ֞!Bcׄץ)Jk،ح1Rsٔٵ:[|ڞڿ"Deۆۨ -Noܑܲ8Y{ݜݾ"Deއި /Prߔߵ<^(Jl7Yz$Fh4Vx#Eg4Vy$Fi7Y{(Jm<^ .Qs!Df7Z}+Nq Cf8[~ .Qt$Hk?b6Z} /Rv'Ko!Dh>b9]4X| 0Tx,Pu)Mr'Ko%ImchrmT|L&g\CC"  ?soundconverter-4.0.5/tests/test data/no tags/000077500000000000000000000000001460501237000211445ustar00rootroot00000000000000soundconverter-4.0.5/tests/test data/no tags/no-tags.flac000066400000000000000000004025071460501237000233530ustar00rootroot00000000000000fLaC"6 ApDen0ԓ!F܂R!( reference libFLAC 1.3.3 20190804Y hV [ҡ˶?QTTC N;V xN Bs|' 4OHU0ڕ `Dxd~ ׃z@=xI* Izq=ڀ_ jA5 `Bs <ªV=/eWļ xŽ;BS^|NuRNgEۈ8 g(kŘYm9}:qiژ$e^;,BrBH34nFW'0Kt] =!kAyd\NsRLM:`G2$'U{V z4 2u?[o@|3"g̺Iw%?t*l ɣ"F@,nEL^Fg}jX DJ6NbA5(@V+fS&un9}f H#UĿb6.@0WnrfD A0L"J(,쵼|8]+O{{k5;agX( YIeQuA3T9; ͔ j#a':= І*h?#kXv[dݩn2+t!iv㰟Ⳓa(SPsڊzӀh5jo^G]<5.>ی}5]dC:M V"d|Tq"oڌĢˬG+ H[HLTu2iit%0qIeK9-WK%X3;{?FI^tE3-11m'^ܣ%jĵ 57=zgsc9[=U к j^C$yaP?s;zvbۢe{㈬@;ذbw̓Yĺ]Pz#|l]_i:b=b5d/!A8Mf1k {]x_ihˇO ;=Ѓ%? SZ:ZF Q-Xvا8&߁v,"—aBF~HƤPL qdz2xGJT4ߍx9C @v F=^}a!hۙ1-xw츦;J Ev/P^saL`|*VG'm($(Ɔ#1V=,Rȓ7sb X/j\7iY)AdevlƷ}]#1e|%n1./9&1I!d'rEPVjy^ױ_#L~g]hJݧg/ Aʦ6v*w69Cy ɰ*_f2ц ]Vv"E*ڈGJgʄ(k>skȒ;mR%< 'vS VH2glqۃ HΪzRR9ֱ^jc,{|sF"S#kck!ɫJ8Љ#vK/6=B;?[a9gKY?#D BU},ZKʅo|ĊkKI'EW޺z6Ưfe;ldh2;'c!Ep}?nG8V?JsyM"aN7*54p-j9A.׃Ӓ:%n3)WKvVI.L(sYPk(ZHd9i>u?vziLl8xP-uJ=&/l(I;l'hˍW&cn˙MtΐYI­u'vN? ]#mZAw2B 3@B I;yF{C& ~"ev F% Ga?rE\WJ0ea@O3k(]Cbt2'SBj,EI,PUZn/9=cf:`sv>&kBmv oalt2᢮2ՎnQq!ߓloz/EVOyCK"aP6!LZ_$\ Q514|T%1v3A] J( [pp'MƑG-Ǿ-v(Zej=M۞.7kTR}ZRNO;Txg'CaL(jR [ZtIOޱοJ@[,[(!-W/6 -_5{,C8v&<6DzrԳsm㹱zf )5`l]#0S禕<54+ 8"BA'͸=-ukHSKrR"Y=Ogоk bR0^枺mFl2D`>Ht(*]VrF:ȗN8s(}v +1egWt֮1ѯę $HR7nu0Ҳ3#s۰}۩Mme+x1AH)%*] %ϔaJ3[:ŠJ8Q{[U'`-eQ[fF=SZAszuH8!rTRr:KdR<۵dy6Bk~5e&/ jӌu5B? Y 1?Mqz?]"1R0kh ޠYM*珿 1$"2YKcԼX՛I籆bNDpYf25ZF9 Wh2{Aw~Cur鋸W_$&B}U%n458RCMy*b]VSuF?;F54|<\(;exGM.P< -G:J-Ƹ]p@d׋uz=jxȪYE mM H9OA? hm% ^O⛱~Z9HzoےI<2X \Yut!CuGnn @+UӮnqc_{R /$(q*0/e/%51uv. e ZȊh&4=oXcG4]g5--^?.Cb'tEID, O }o SLկ˅'+2]E%m;, MȲsoo3DWnF2hFrea%b+n"}0z~} $rq]^VV嗼хYֽX^ _Ϋ!DjXtJ̛~4uI?t>u&Ȏ FHYuwy #VʊM̓ vVN)L1'c~^ 7zޥc򚣤g_V[/h.cKܗ6|.xß)|J8Nh$N A3Q*nF9!l$MJiynW@t~gUP kP:D6-3&+\\>[DGj22M6VqT2;]y-e'aEY쑲@*!a:/nA`ĺ̫,DRHk~t;hH*T,hX7m5<-1²CUS9&ovќHvF 'Xg8Y}eY7x@hc>jP\&>=孅 A͋1gN~@ zMO1dT^XtO~Q65I1x~cqG T,Bjq2NZPaxGG3J+=_+=Y ʃ؉7rLE5:xK2"w|[ Pe"G0"S!&FxL"`zqK޻b )`z'_ b+l [u4UnG 3D,+ֺ ʮ Tt,z?t)^:2&Cւac\jPLĹ)G ];|}&eNgYܥP-1!]LmLՂJ]=;.A 6.4Hpr_T]f#q;Lq-eflR]S&%)yeidtRGu7\Y "M#mYtMOPH ?Ia 4wPFຏ7h&Ͷ,823f3^ 6^2enw#hͳ}r(KaޒR{htYMqYXF&us=0 ̔Zr =UdP M,NtكK "u B'Y7Sؒ!.$+ .,Aͷ4vF9>A=48R/tSOH*Q{o#F#kgHܬͫ +(6&OŖ)lMsv2p8g;u)ʠ'ƆQwnzUK<5eQ#/Y&”KYѭ3?Do6Mq ٽ?k=pcnjdCy(N,!N Z~4]Y ?h'~`ZapBl}횪k ؼ"yX8F7Oe:WaSSSnƇ{ *2$pb~ Yńxa8T\~EBS(DߒV'Q@2 os&>PHATlrRXL7Xi*%Hޫj.8{ Kب]$QT*"b\cy$v fȉ f]̿i#>D 򊅯myNv+A jٜZ@W_ 2yPsWWRg~˜,r6 Î;Ky f,I8m"&ɶ, L3/Rh0KS@*Biջ(HoKX?{+ExJ [%3["sX5q:$7ܕѭxSG =3{m?) ! sˆOR49XX;h7śZ$Wq۪OtAm%iH=}"r{(IDl:"=uƶ"; ۋ R9J@[*[J 2Ѫ28KؙJ]:X˄m$eT >(f/\IREcgb"] B(pRQirF}Rۗhw@.us%d=ӯb -%qSI>`x\X>|pÕo Z]e@m*FYunI!.vXL=BXnhI[0UEi C?)yTȅ34ţ~wbI %DM–+Y ጓ9~ !J;0gnai`;VJr)sfĢ;Q7Ĵ'X `y>[Y\?0 rJ.yҜDp|:[j +}b`/VF,uEmG'#̣,^[\m1_SCY\ ۋKpҚb@ 㪷|5;!^3EY@/fA$_"Z޸2p& [ÝSۆë * Ggr(v~7١0f6<18J1Q$bRAaN>fy4'm43E;c~Bj9jb1M*$/'4zTҶ.BylNĨ9viJu^) 4eՙ Tӥ66fV:p Ӧkky8XHsȳi֑ȇ#P\Q [lZfq ! &to7Dq2i"=,H20Iy׽H7O۔݆)fb> x|psP^ێ䊿<{q![h6x]tNed^j_s`W䬪vѩb (9a="6Far"-L2CQᡍDZTbjx!cꄡr:1Ӹ? *!CN [0 a>XRbd[e|)qrPl}+hIަf0q"5Q=}r>!_ad;` *QZ8594d=*Ucaj_-M.c )vg?Mq}!fۧ7v8 &tdTlR$ǪVӧ1"U$S?D[֯)# Z߉2켶'oe~V] ˲%RaѰ] %rhQ+J +Yф֤O Uު6j9cT6򺿚7e$(p&FpFĢccb8d,Z؟407RɩIUq( F+6'⑋YhւPYu K!v)Ҋ; HߡTe-$:/q9=XOJdR۱(6YسK S7'V{*<4C3;Ѓ_E.YZq'f:*ȡʺm*OøȚ L1/u7%]m[V!&K4ԮMqPھU+5d-m-Ai%b`U+WEd e43pO?\۠,8yZӽۋCRή8-_ po%H-:!:'J2D/{alr<ߨc:)VL_L4v&*AL=!!"+{8s ޟ3["^7qJi#zAFy$VMeWK4ȱaД,JHϨFG>kyRBu= %ě#4&Q4 a<7n'QsU>eM,ruhMёs8K0ۇ /(>eFc%6KTv*Uۂ 7+:e \ ˇNtoi%^u P?BU- )P<0eJnQ3)v=>2$>#ekQ*zPD΄dcXQED8G9I[VX'odFFKjF*O˰)RM #rR974kleĐp>IjqXKuz Z3 ;*#]odb<@J{FkL8$dPa1Q9X"oxnTg{ ჱ!SXr S.U#/32~4S6dL,6՗:ub KOhHr2~p<͵@lh=4u|[-9Σ(=~h>hZ|%l% (jK*!IzASU&@9(La!aL]˸3tdD[۵~#`5ZCnQ8fODV?C \Nf{\n_t/.TM}/XfU ڱY!53A1Z6WHĕ}Z.W7Q;!O:`oto~t4ty-jڢ2գ5\;$+nD )gaCP=KOGr,kdѿ$_3&b}z!&1LyGq;/AeI u֋x0~ UcyyXB,P'&lw:0+b^T削!۰j*K_@@MU@K}.tr%kܗuEWb"1E eS6y,ʹ̥ٺls-J]2/QacpJ{T~YmIdXeEu5oiGEh] m;GޘėK TTe~Dw-j;;,oԯ DHjD lxD#vvמpVv˜CK9Z86Y#Ziװ+HwԔEr 7[/GViTDp.Bl%_WV* i]x@JpϺȶ~ڦ"׊ؒM L.GZhNIrܢ ¿#0kIR;qUDD-|.^m.\6ȗAJqG@ӳ pO(d &O*jӛeD~U|i,xi9K+Q#u K5IAL7\BÐ2ڞZA(g}(-X8“ݐ+̳a%Z+x5J̝C#c*hE+c½zPq xy|T.JDR!%1܅/85!~/,r1)~ڔmSPLRd~%*@x-]J.0?_V"TڤS<Yl/4y"!Ƹ/|3gz ~Oʆr.p b1CV Ƅ)5ȓTg \2̧7wfyQqqB{tԞ j"k;϶0"jjH iHm}eeMpfS_-wv*NKͦZ=FeA2 $Sf }/h|WkdZ0n)5 8sO{ΗIPn;WQ*)N5.ơ1T<31 k G'pO63QJrCHF=[:sQ`Sky3oq֕{nIUu!Ndfx/?/ BCCC^R6hlG16pltvK%?O7zոp|[pA5~jI`oTȃ{lЪq&ܤ}E֭1/0tdf-[0oHۻ ri˲cas3Zz'qlo5n5#uP*aZkܐ[ A=мk 9^1*4!6/:DenB6M̓ E٨+,OU:CIVE]t8ĝn6 YˣU%򆽲մq!hۭv]X"OapEvLH7_ "}pf0do bG$zԉJF-(=b(2{|gbf\D X`x'@s>-T=@Gkx٦Q=5>yژ|P_5B̮xpre^k +拍AE6Xa]D=JITȕ $$ksҌ@.B=Ğ4aD[aC@K x(@҃#Xf-Nϝ(~6 0CrҮ/ }QaNV ;u{o<փ[ t4 //OT_  >8`ֺ}O(*XD/$Q5K|Ůa.V^5St ?;w>[=H`j B5^ۣ ,P³]Pt8nvsRCjUR2 q0AX)mQΓ YK^\GPf+ڤ9K$l5qyuXGN!/uu׊$tw{[`D8E]"P +}Hss447vR#=19sf/Uw}@$1U БdM6%@Ez-6 d *>ɶ,)&^ʚq1rPH ]I`3\T ?]ebcIyk:6rpyM`ŹPp9I#]U43ѼzEI$ U<515?Obo~U+H~9aDξ;&۫)NVt9jn;(H;*sڋ+Ytyv^[,t\\ A\hxT`FSPD1jv+hF Eb}ܱZt/10vEU[08_q?e!t; ?"q a#AR~ [ܿ2 sRb7Ļp`ỎcDlHfQUS*KhTPIaoL2 )".Fft%| S(6 P,fW#\砒Mil}mkʘxʻ]nq.^pw̾4xBn~dmE:Z& !L^1|5?kfW `&#?~o5@z5uwXt[֘yqtH,rw)xBX sbbyQΩv XRU[$hi*1K Z⮀Ie]XzK;b*qgq6R .R Q0\w=p!^k}@`qgr%b@ t8T?`c"㺱:څ >!ߏ.|ޜ vZ2D&:.7RqDQsBFj}ajkbȴo ;(U7z͊ tQC$TKNg>6+- 'j*V .E'H欈J(w+8]{GhL40b^ \WBwv?tC*JC;5~.EK @31ezs R$ J9xuSUdzW+P|ڕ61*%*xZԿc#oM'y`&пG'5QS2*FvAS;UhcT̸Y'dͻJYƗQf`zX8OyKa)1"0EJ1Ȕ1J( zx a+.k JeʑzilBl*qC4=mJ$"{k*PYxT}3/c>H&pzwO,>gM".~~ɱ*qt2cFfG!S4~@KAȥsW4={ɳ"܎B~]!I0 (\u~O|I2E[tŗ9!9s=i eLV joYk?\X7ԸOD$S@ţC9I`tYv+V﯒L. Ve6GwSyֲ"i~6IfwDڇvp@Հ6u{ < Ν^}„ܙE*˕#~S,o|7|e}us VsvqAN_Ia /FvV@tw/|tQ&NxT9PCړ|]CQhS;6Dũg9 #ujr1VCK\D\(OsY#Ayp߻7 Z_ae<]aXcs%%jXQʢ=+ӕV#éO%vl?NsF$e5(۟Q~0XFt(.Ky-~kFWfCq E#\o-Ղhuo dz$a#X귥MIMc7PQaTe” Я`c/jgc1쎊f͒!KMWt/I hÑ%"6S esxu n`Pd\^.uXա1h}g#C.I:)lL7&^>iNEN1qѶmS1y=4既Ԉp : Cz=@}QRL?PDm.9,`N”lZUQPJRtI^-1q̈́IR=t&$^wÓvWŲQIve 䐪Q3=)͢I}AܼxZvcGU֫ht_)FB׬OY)sҩwzрg >':5Q5o%XcLxCwEs \Fb`Hja+rV9TTzMf-$u,)ߪJ a %\2BE[Ztb/nBitP~hI\cc.HK_GJ| sY"o=0X';! ,Tg*~%VTL/Uv`a!s#.,&Ff&9A31ҹ i #bIufRA7yj+38cD%1ċ^*OIFt@߹!_Q9H[~A@eQYiԿNQ$,2V2Z9 q^nW̵M_r}fM.%Qkmkؔߞ2[VPoWhR"~r0zޣ\+ C,26Ω;NX٪h=E}hUH j|o2YH! \WD#'P;Nڶ_U_'7!f I5[ϥEUE):F{}^`;hcq0^>:$1>nY6%7n\~x_NAofLö;i|m:ȍkS|qvE#\2m!ZO|K5gwRBdiv?TH\Il+6qz&3MFRʣl&0!qrNotODDWXZ]|]kF S @MRuMO;5/ۖ lr)1@ "ie=w|>.Sp-{MGO>gRD 6NRӂl&ln3!pmWQJhVy!C2D"9fl[*bbKcȧ&9$wg3tKca(_c E߈ v(-ٞ'3qXCh8m]Δ''nH ށn6S MO$ܭZ+f- "p? hI&Ͼ)lqG& ۼU%%?Lu> c^Eˇ.t#R1EtN bKG,D2L).I]{&5hf-+fN=*Uq_CUSB7<~n =٘"ģiA1vT5oT]O۞dAsu,"AOGE׈HL,7oJ2B!cI!uJ4vfٟ*3Nb,ۚ8Ga'7砫 Rn aɛ1:^GWtt L,$ cN*0 @>Dۅa4A2Ry`DGa#6ipj5)CaT7ؖ&?~9B)9dsc.r8B#Ofr9TUN S_Ek9 lsX;lG@܄p[Šu`@$MNhWO,LLRI?J0ITm#lPCG8)_bp ElCB Az`"eA੃K)@@=]R*CLb| WXzjC'WuXʀ:&^J6h3y#S9n;aXN6kqϱs1ƗvZI[L)q3Mẓ1⧵ø\1bcl-bN\pԩc1 k*JoSu!Ł\ă Nv-`~3jp)$)PJyOwC@EKt3idO*r9LMF6H]˕̯'O!$H+2ښѬZg‹glt0NZ`ޔ*␁9vxT G*y d /5ULbʷ_-26cD39|F1%YGSE (NTFEqHɵxmS8 H # pR+d}ВcL@.&!P8Ai0z~z@>Ъv;eNiC.5I͑#Vs&))ͷE|ZlyR^vvd?+硽>1]U3?"%{?1_$⎩Ƶˣb#KK%*F+oȒer zP r|%eice_U c|KijyD]ɴğ,~4F LfS-m3g{Wʟ&R6_# ]7ܩ@+Q>QŜlVl饢7vni\XEϟUJs|H54mc();Pv=Q{@I A%)|NQ^.ɲA39^ =onM3L1삣Աkn >Y>AՆ& =\ҥ3,tDX]jɠ`ˏPF5yļN$!*.Rbs._abԙ߲;zOD\ 2_A aqJgJS{~ixŸcF؜}=%[)O۱^G0BDӽ"k9 8)H_ , Ɵ>nS[ڤ/$]0V&eHG{eV.J`>q+Qn<,54T}bo hi!\rZO|6tZ^zrh1w>T/sQ`43Y &T%W>'f6Dٿi3; eH\@D(>}X5cEw:=%bF6^z r%o3C`2fWi~y_]I"AHakp{\"Zu@Z]FU_+Ư?&!.u04e y-^1MH(v0&p@zd'LY§R3 YE߂./pnp-6dm|Tvb&&OC5:}^3:´, uн*B&xnMƐv%qg; ^c=8*+,;ֆl֘'N(N>{r1B*hDF> ){fxTJp@AYؖ4~*~nTiD^I)j'>n*2, : QO#O@:\M_ZgSGRbF]5RpALxm;m ;_3˖IF==aiͿͻ'ye ĕ͘c5\Dʮ毄}_s o^_KTbhWң 9&a;A0Xă%`Ck\NP+0T3Y! lkPlAEJ\Rtx{v7E(cKQ#@HZLf6`D&C7]ʨSkdC P\9ťK.'"4{,ӈh qJ ʗ2};`(&{'³g b'mo b54~E-'ȏ?{*T.tRU0}^o̝|7ee⍂\+Rd{@@Ew"MnuiU_Q uX^c@|$ؓWDj"$[2L,܄Fxvk ~ (k2D=4{ҋ?UC%ֻl̻VcԴqa̠s N!pTʳSM2 T4Y fV9n%:pi&@_!x,)獚M+9-e>ˠEEըh8_>$6%}[ Rp>. )ͻ/+`ij-)]I]eI#)F;2.٥LE %upHŷى82Kc:ugލTHV~aւ0A,4Q̴&bؕs0lXX +P5 2V9i~&A"g2rX%ˤJ7m:F‡( ~qBA,ޝTW$kvYfZ=Xz5M&wڄdPe !>FEHl.j6F7X^A2 \B= yJ77Cd5/d 29?J#D$>o!7 D'4L3&@ %:>sk)V;gC 2L7呛ϞHDwV _k?­3T Vb?퉺ah+}{$ݔLIz2>,Gґh׻5 N9o~qiǛ5gp:<{GGdZ@Q3׷f;4 gݦCD$;S19Asb!H|,|Ch2ŭf-Fn-' c%A~U[}nPOnӱ=I"}mudƇ#\`j;e0LQmSK"\LP48"3Ӟo!;ߢR.k@`bo 08>!y ^R<~0b797{xo'*p,xzTc̵yfqĬ3![dlXĿ35 `ᴞ^)qqLI50XOLYKTD獬986 t2(&$Rw IɃYXJT/žGzarr$_DOv9wTR cbHYS[bѰm>&A* 4JD3/c)eq!Wg#]Ek4N)끽avHaKLy=O 5KI֦ڗX,(DYC̑M^"o\vnզ)5Wv1l-6F3OA9K2RC.ۭ_P %i8P`)ӗ;l*IY3=tq!|nuZ͛ ! u:q5d "'cx!n9yvj"͆! ŒB ,׾}2hԤ`hk$%+h=cb}˓WU6Kf.d4Vf]~\0A4bʦEA ,6sȑh&ҋB~'dh{*E8qe r_R#j%dqSMXV\](Sum-Tb<]1.j$d\ω%|eڴD]I=V_ma.g:sY׽!^V)n H8!d3p:/XߦӡL.PrrjrkbH2;6 _f(nKL-U24Rr4>tk0 (rX7!vK"%O?IV6 p׳C"Sc6|ag"^u>>!@A 0.6bVxLe2P>cmW$W# ? Uy.' lñ~ڑk[I=j_ż0Wj1:{oΆ,O\_L~pT=zȠ`NwP&@\[*ο)m3I0g$2@ ;wS$l"&#uGqqK;Fep $eHĦjL+'W;IB&~hc2{6s{$ɝywr&uHַ?EU,p(ߔe~`)2w4&05kQzB/za.y.%.(vrʪ?~ CUq.^)>gMy4F4x(%Fv&pd3⫴eJ3fbCYhY~p_SqJ:phwZB"4 ʭGL'ne̵ -p- gM7 =k@@KFj^ I:!*ŠQ[bҴ+AH*9z˜ %W9zԢ"c%-5\UƸZ]١wS54n&OIwx! ?s7zߎ_7 0Ix}4j?D}SS&)oujn鄀3hb,/2IS_COS u;+@ ul-uӣt9,_ zXK4$ҟ_5rQ"⟓\}RŽ.Zk (LLQVrhjj, u\5Wï0뱿e5 iْ LBVD9g.ŷԧ==t7wϚ?ۗz+-Op&*ho`KͱҕtN;KNcÔx%*[/>aAs$Wt!f#HIW̎̆^cZH 5K >-vs!$Ky ~|Ժ%X(yqQԜܖTdثt@c,SuqKP']vMm|ؑD*(dN2D .O$#+ ' 3C1dmp ANbAUv WNaV'c.?|;DT$[XQ@ʿ~|ӅU ?MJ"̈́my>.i^3dXVJ5\rޫ@U~ܒ>[;[M̂j"e?8 ͓Br$IB]ŵ dNhޑ^6pUEn9w\842 AтZ nIHa:XƁFK4!θg--5.1~kJc;&%fk jQD,$/I~cTbx74"+F.Sy ;'* {#Y8iJwH t=]$b)6k\Ei.+] ( I{O$.~^Ґ W7vɢX [| ӥ ɟ!572G&Ch [ku3!Sζ|0=OY:uK&Aqβ.ۑItT9H j+ڛM OɔYI\hW( mp#jv>xS£'<5yDy:圶g޹1K#: QVQ]FN?%|ض*7F|ZE 4?Ƃ-'%l?مTIiH B74J4(֭y6JKO7 ;+}(j g_NddKC:k㙶 ¥҄%3:U +ܶWSeti ;\uҎ`b/;@;uxr'M dY,͝U0!W^ ;B { GPc> g c\%vQtƟrba!2wJPhQ}W1;}!< >LZǓ)F3gn5|kaDzn ~,{gy } Z'HuZq$]fBAg)`uB֓}[׮a Թ%+N4S!7{+`a큆-A!`C ڠBj|D麕v9ͻA$gP632g9kB[+(͔l;<ص{Dהo9"!T'l#HY:}v1p2MR\Ʀ4zeKkLTU#YXFڵP Iq:߯ +bm~B:X11xr+IijIrr^VYQSXYF"Rl"'VO)c#'S϶w`\Kճ.J5C=L΂s]&zO07# [ֽY>5?kؒkE"xEm9TҪkVK:1ʊ^Q?[fgtc_Y/ Gӊ]OWϰzR$9kAqUc?lkƷҥ?ּ4Dmh̞eC(ƅr3mgwEд^\4ZiJzODNjگ0/t*&Zh3řFCX$ƕ/7MB[_vq`Ϧcu >`Jd^jZz0H31"^ 1#.:)!rw9Nl޾R6նCgOzÑs!O1=&NZ J^[$$Bif\af̹ znVME׃nO>qEfXńl$b-q TFSާ.NSK gJZ#_JJMJ#p"G@i!.)m7hCP08d0A뒴Yҧ+3նя&b>wp<#K^sSXY>C bYrːW+E\+F܍Ea:zk\1a0rƉ&HiCtv7ђ'8o*tB8Rś̔${a)l4}#C~2=;‹t\zIаc'mM;G#B8o8|n>[8Rg3и4$$@.KmQK1CBď?G6 )D͏1YKhg;$fW9|wB&Qq"pn,$kbбn}v&{ 0KZBCU8+,]E%W&zQ"UZkS2D2rx_Vρ(S\aǭF̎$>u؟[eiBRvr1ͭ<@0.ᓻZRC_Tr`$% KZŊC/zhp$S\Y/od+dh|)iޞ\|:qHWN8=R{_|VœL!k(fs)]ߔtD/ vJ4&k2v$/G:(DetQ--{fV.0pIiɝ)3H`WՇ:0Jtj(J]dbbv$0|//͑Tf? .9h .aK>j2NRosHKM)2I!4”ufqfL~Ӎf= ǭ/|ͦC@CNDhb*[nWIE)Te㼡zwN$ E!4omt~ "WZ3$SvcUcN4֐SbEdb@m~ɸ/t_U^2?Uy{Cvo />U폆HhcZaJ[XlVfYF 5" r z u$,+w?>sb#`t!HbQ?.v*^ *)J%g Z:M!$xЙD4"A < إrb:_Cwi<辣PFB|:t؍L1hvWʔ2 %܁Mn37C٨$K#>QfA+ԚO2_je71}Ry\kʠ 'nKq: DyXyӱi=[6ۡRML@l*p]qO%$ N{`~%+㥵Kˢ nlWǤvO<%)[ӄr`H|jҤuVy4&41> &7|Sڒ(m)xq ]j X$Fʕ3"]Dy @j+C\$4*,oNjOR"#*T7Pn^ I7Iw^PjT-@:Xw Ԩylyօ1C ңZ8Kj1A)ǣud#"\ _13uix‘;=B14zEOl Hfu& @?̶NJՈ@DS*9* 8&V2s᲋Я&˪:H͋*gp=--*l:Ag nkZ f3pAUoLDnqs5awПڤ֭ Ѳi}nEg%?ꐵ`8Ʉ}u`1FZͥqOB9gc@j,;Dpa;{D__#U<+J&ZA@9R 1F_4ܲ1d=0HQXФD׬)bF=.,l2 V3?rRR::nu&eDhʢ% OnKP=҈2ہǰ4 /8,w!hPf4& ~\CI[H53S+Yuz .lGg\JG6=|D4F>JUzho Ï_EKU<+ *4:m K&y*YiE)9jƤZxNbh.)b'nHNvi̐D=FNR4|iת8%^d'j @xL+tM-3׵1}91*o嫤&nҼG))#YK<(wX<,t''oʦ7BZr?uZ=!v99jhi L!7M졯]@JbrU %Q &#6 [_4AG++srMcpc˚Wc4Q@(奨։̙ؗ՟E6҇ӦEjK/q5xc5+tbs}i^,{Kʹ&.MbB;G9`ʨ /M/`9ᇪ=KJOHң<%ܔN} =]h hS~\snxi_H> ݒEWb^Bo_$ O (B"zo.$ ' vI~qI[v!J%6 fԉcZ4 ~GXANJ/+/~6I1Jf$]}*o'+yƧ穲Mbb=D4pԅ9b?N ##14KB!9[r?Sk4{;.ARne&O`S&+ڹh E,W6j$[u#cx@eK[r T\K"̔-[hc(4 NPe[鮠 ;oKw ))i'"Ϲ^3Eӭ7 FKiQy}54ezCJ],TR AƸ'-!:A7[Q0Xbҋ2fsU|"N[z&`&5{;&m!V_Ǣ:5(GsMNXL% Dxe3od={N/Z=Ɗ~kOm CpXMppKBuD9#w]ѧn~޸ltH觖O),Ͳ?aUYثK4 z}y(%pLG.2U/4"3J^Fg&LD2ZoʅT]*tsv1ٸQD4V OD>kxYQɄjLLui4w> i,)FI^?ފarc͎a<']s9l^r=U&߲ {ghgr@VKb]؋uB^F﷥OTINUT A6~I5ȇF9/瘛:qj |xWi׋󑡗\ysߚy,7DTEOs+y1q"qÆyd~~:VѸ}r X%1̦8<8WykS6N-s|wJFv]>EtW<⊏run+}E 9yBڴDg|`-*a؂#w NjC9rjlt)ɆW mH~}L܂iH`bݢF۬;SJOa6k&('!eB#Z i6nI*8I V*@;)o͎[D[ˣnNydِiYiV)!d'_2&sPV2r:0&E)GzDA%61*':ɟM> *([p&GoD=<Jg5K0yA.F?N KR2׎Wi)ST, B5.c, Żd]L#7$Ifѱ$N懃]F~:(yk|P @IH@5ˊ`7 8vA CSA6 X}SB:\; js ͵*u6"ReDDNоH ~O,U/\ 5^@>ҷa-g"/pq2!-<8:40Ē!8PS _YCհI]l"s O(%@H2zelUZ_]wl MŅTpB:YojWMe0C.ǡJnʼnzViԐܲd1CG#aUbV3 :z2_R-Kr k`IQC_ <k(F,gܛPBH.^2#sYL| ؋}'|6T}~2`f_3 0XB@ª5:mm^UnPy H|\mB`HM쪺h}d6XHɅA}{C:vm1ٞwKHAZњ1RzFf kmۤg DCIsx3 ?No`Y6'!*9;h9y=r2m3e CcӫU녓؎J; Mۆ$cZXsLҡYy3y$2tL-(D1m;@|YO0;f?f?様d-8 4D}"C=im"ʲ3e*/Y+] +=ى-a8q, tHI !w)dH!!1q|Ep:Ǡ])ՔCjC9NgIuEkAh Eeeb `IuP~S`[}$Mkl4AXõA[H}i:WKk l\lw,p̗g 4b{PQ2;DSccb,QFKي~oD-ԛ)n&%tP/]yuH$@bma[/3F}2zl8 SBʔI8j8k&'6ZwEPaLtbu4#)Pذ&@쥹 k*]J)|ޑ4>rbnJGpMfhH8@aĆy1`_RHwd70!6~ӀI6WCㄶF-q+6}W™lq!g{O96 xc @8)mJ7(3NM!P"oܿՏ;ї裿sBR@I:Xr,X=0ۧ.XJФ(i`{LMجŰMv`vH`Py[1mz-o1(Srcٮxd8LlIeSiKZShΊ{`nzhK=ƥqF?WzR6%N7 Smtǰv YU1`GǪʩwO?e/3A|$H(I^l,HeP;"bR;ݿXJ{HN69ڻ4)][9b#YQU TЩƶPa' RĚ"F"ַ kЯ`ʍB:Loi4~;Ik @MF5wf޹~ IOݚt',SL3:A_:Q*6/xMI&QPհ <Pp ڎᐞ>~!Å<W*) LڥZI5~ QK&Lw{vDZh,"L 8[%t b&B ('GW~;=u*mĆA(Bb]i%@e^ʞVl+"b!1t'no؝(#MΎqrhrXڽSMuK>#zǔmmlkG6|/ 1PEdII5G%! E?u[xR1{b';u^i䲲ݿneZN_RK#:}ʗSpPM71,$Hz^Hi"C'+d4+$Ͼo0@{_[B[Ul!{6\fV`XZ0Xxb$RJq9?k_TEnK,.Shiʨ=^߷j2IGImWة knj]Azr tr6ٓNw5;'c<(P C$;2Kqyf"Kk;r} 2im%õ H`%kJ;3&w;#uJ[!np!\_6ʐFV*D?KqM݆s|4(Sdu^郆r1P|=&NrLAT݀o4T AѠ? LDY 3g,oT ɞ= a<b9IƈӺh,T5#(6!Y@ʡ`ZP\l\߯# >3?@̫jOMoELJӋDE]n|tA(nEsH/Z@ņq͢dnf<(ٞK ZSa. .;*WfYkj=-;3fUK5@3rkhԴ"*Wpw]7F's+ H=:lPeʥ!!vf8CBr3hԥJL&̋KKyRh_# s-6KIyı' }:cT]Y7>өLgTP]Lqwgf P^C{ay~iUp?_?-1D}U1ȮDv-DN >PLբpRQ!!fn^B/g+%^o'<Ԇ`T#;9QUؗ`h:*ޭKC@.Iɬh U+o1 6XS|L`f҅,2ݚP& I⦎hڧ]5݉m,};QR) $]l̗eSpRʃ ۗ`ӡV^L[<!v B "?` Ϭ{ny7q2ݓKy&, K~xSgs0KKD{*Tb? TdJbk=iϗkBs-Hx!c%9Odr = Hے@ߝ].;# XX|ߝRTpt21$6I xybw\ފ(v@N:r O&JYu?|Y.m1P`me ripZBq?5Gv<'d+zѫ>e5); zd1y3U?a[*eoG?oTп2pj(<2LGY,uFޫǯ/j1W)hseEw/= (*"}+wkmRRŇRu:8EQ8x{]x0dֆtY, C;Q%ܮ6Dm"X"S73qgfx֢!SIQG&~Z9H?*?Fqm=s&">Z3 .>tޓV>%Nגhil=}"i5ôXHc~ ߳D1LL^ sJtjvKl JLsHөq,'@bBx?FI۳k)[ ׽0 vb=X/JmFT& @yiS(ƨ OG_vtv\H|.Gf-/hDyR|õ>q]{Z7颠;5{㣰K7|:'d>Phуbo6`Sj"rtL<$^觊cL$ty!5:rT 0sQ2#UvzF?@BTiYF&[F'_l3?,x, ~`6yzp9J "פq%e(FIiѦ%*,a`Uh 2I8߯[ӨCm~}}tH_<ݶ]>:bڔ]Q&IqG H+FDjJ\]9 ZiIˠm^-:w*.j,w'4՗;g@LOrَt,?S2-ǹ;*: j87m x8L=ou3xB|XWMq,&@)>y*օbC{|O0K]'*?3ijR9Q 3@"ѳO'joH% +jFh6&^8}v m$Gj(~V^'Lf7:,2qoiԺdNORarjp =,(I瓶:,1Q.m# Q.2$&YWmm&RdG#9uKM&បZb/?:g8ƨW-$fu먧\+O]JemL|ጻ x&U~cwX4-Sgˁ@9PŒ^9{Bt*. Ziݡ17ˠ+['5O+k YܮntRk6&[16 &R1A>4|o*&D;D,cr:  =W:g_9^kTkaNdwd 9ksٳMѺ!rKZa̭r;w@4*7ee,BF͛ēH,p =_-,Cx. OO*E.wDy$˸9a+%&twoy3bUjdU-/<0( Y'weߖ?$Q Sy,h?,Шe,0Ӧz&W= Sd< ڨ(!X Ppr %r"ѷN:>vkC2҂13)0AU+\MviӉ#$̎aB/XgKcV3 b>0Bx 0ɮаB[K$u0EVkؽA]&}qa|*f-X8䨭^0Ĝ^[m#5w8]-L 5UEP`K%YC@1\0D aԑxMClxY(+h?؊-e&FFut} E%d3oJ>΄k=3yF*d2񎸈Ski+F>W-%Vu-4ؽ;y-]YCbBDfq0հ̒jryT4u|M=XP]ku¹>Y=m93EgLG(6ahޭNf/(Z]zH#6 LFEZDE\NEotZ*)|/ȭ}dmbX\ZB^z!Ύ!N 7M;N)#dtFڅCқq;DE77l ْOKN1hV}[}^nE Qօ[o ! uJSgiR*TS-}9%WڎuruYY/).O=v}hg-f>^.Q43tF(Ƥ7屸G lwC Qr=wUjNE:ԄQMT re7+ iBMs(W;q\#TbnmcKZ\8H<@Ya X/, r7F+<6r]*q 4TaWH&XDg&roA>l+F҂!!$m8PfYW-M"AKu,6p>+)^}dQׯ`j;UF~z4˸gK"wR# }b)k ~c#nyTuXgt@b#D;_HlzJ_Rݘa$|GZ`֓ˉR I"а{MwųiV+*Du8F؂.mY$y5zh \ !6Vfo2jI'@,1v [SՒy2.u}mntH&'rPApjz<-Cz~8ù& 6}n˹b. Mp!$DlV~1E-)2H$ʽ~?wgZkn #.'s.,iNV:fjfHwH q} Z#2?'yL^z:WYՑGk٪Iwy易1Dn2؏L)^"ǝvTZ#茚L }b."G$M3%\\DQjƜkyE'w_2/$yyE@R9IPL*RBT닮b^7=-hP'܀x]ڂ1tOJc*Ⲿ DX..Ho5R>"Qw{hg$8H^E [>bL(gt4DP #<^wTwyL H(Z;R`2om"4Z%u< ě#H'tvQ^mvAv|q S.D4lލB؟|k>훘GݥQR9C.XM(N骝}yHR/ַ#]HıX \o8Vqɥɬ9x j۝8(!u^_%yR4Ŀ㲊A$uU$5PS=/cApP$*'K&PBI"I1{}qHP|B4ݺԛ4 p2VnMxu@qvgWԔΘ9o_6"3 ''樈`[r׾T65˲ᳯ\ z&+gu$R5xʀQ҇SƎҔ/7+0Wo^/C+0<66yc Ft UUtnAŇ[8uVj|I%)m^ xk=ɅC3 8Vӷj ˬnDs~WPdD62g+W#oW6_Z-YV,,4J3˵~N1^,"W*2.o RP99gEM*!uX9ZedǡbדDJ@jwI-7lӮ:`+ VX\%z dFE]Ur_¶yX+4N.9}DǍ̅:I3w)Y*D԰BZ?'⹠qE /vӻQ3?R76;¤ߺ-Ϧ4.B[ĤE|b%^Hp"l#GȸY09s)Hdagv;%9p Cڎjm";'ɡ P V0 sV*=߈xܾ$EjUO%.k6gEkLvÕaYCh?y&J<94͠+hT#7o7G8wRLHPf-St5NUg_Ԋd&_ *W!b"{N'.S< BrTeTfG$]^$ƞ!4 r:) ny@ 9 .2rL`ҧdlaL2(MLnk NQ*DKej$y^tcQF AH.g@F 9EEe-_k>f>t!0- .cݖC"DP|y 2e&Y{ r^R\ӥqs.RC#Ii@CA{MZ乸aq y>hw{˖̶ S(^}aLC[AReAK<ՆXx 50},NuO )bT j&]M"h*dKq(ҿDh‘e+LW\>gϘc&<&8 <296խ́2&}{Z~} Ή;C),]3Pi.6ў_iьlB ($+1= V0$Eв46Sqkd DѴRwV=V{^GhGy1FD ;3R(}=b@[{ڥot\7uke;c\B+QBbwf`VDViT^[&{-~-ks|9YȲ67\" Ll>ꦛ'{K^ɼ-  †b;6&g5lq7wR;2DbѤ\D -O\vZ2Cp0Z}M}裇`B3%dWXi")baU%g#:hé7)3nU%H7/H(n{w~1᫅LYǭJb1*j >ziBڌL^MvaõTyuEGS :I<5B-a֫V:?<~''kf;:4 jQP+? HV|ZMBN3= [AȱEo[rXOj밢,~eU s8g]13:h~c].^,A#cE!#Gf2&.>44;fhQul>+\+$b$6ta?dZ'd %ٯUMNVi?"s^9#p)u #렽Aɢk";ʽB4O?LYE}pP{h nXvM0򩞎uBE¡/\Q4އٻy+);{ Q47}ɂW]>N3K-<7Q 9+e/8ZWޙNh(IT$Zn{[5݈075mq\:HRfP~s/6Vɇ9sawL''H@.DS.hzR™X_ ?YnlSnA%IH9D~}yvcT1he ;W} j"*Id5!j"~O`/jY|۩i!ٞc4efKqUJn,KnLOrUb'%ވfg.QMeOZ_6dV:7nKNaqR #I G;1J_)405cEb^̀2.TfɥO:4NFJ&c͝$m>O@2۔g CTP.t70`Z=}cH? Yt3:d<[[eGD{%Uk{CtJ>Z }]-t v#Nk 6$9%k$b[o+fvّ̙;+)dqݥ#A(>LhM$wr%):uRq';IjyǾ~7ˉ! D2L0҉_Pˁ# KR8Nr6ha?cQj5;<˯ JfNi֌2(:V_sy乇 oޚo×Lnb^e~/N 0C #|g_qM8ޔ̅nA7^8+ۛI):: L:"q);YF[#|jg|iw&A.n!@Lj\*懌7$X/{3"Eb[[OonN2~6݊pS\b̹4ҕ+БiRi)^ -#_BB,MByY+"7Yo{ৗtV^vF7jtɄACSG[m,)5NȘs,-(]?C#bFgBtbq,b|J%Mq+H(L8O8x ܊T{)!=JOf:HpH~{BN \iK0˴Mܢc…T25As;׮2$UWh2(*C\m갤|w㯨 ReaBcz!wxj7FFSqmT\:M?MeKłz)9$2F31ZY oa8bWCJk Y*/ۄ3M @:jFXum/9I v'ms5LP' |o&h#鐄 8ׄMYSUgN^cct} T30 _DxGRHFӶKW]rTӖY.AAf;н)D'tܗ*a"p:H yr>/&NeKH)awLW[KoyYa`A'팣BEkQ$o_4R  #ƌY#HE`P>K=_:U!R"֝tVD0A=$1*x-H4Ms@Y tV qI<J~"J~,/I&m.#X/~sqM'1/YZLyw$mVW|q_WNDQP6*t<q[Ӭ,:JKcuʞيK+W0rrb.Z.gtWcHabʇr wT+rbD|*DtD9Øy(UPoGP9o){ +XҜhYɡC}/Gx4DC:wYVNm! RMQbPo[m1u7gMo[\Z>*û#BD'3*Zu^ZUcIaw09~+Ǔt f.n-Xm /Zigpv4eVCS;Men0DP-cR-vxۣDRV{,g<^w=b4mb4pr9G,-+ɕ{8E&K {[Bb~a0+l8P^W=^rWZJ%W8h--棽6I6*g%RNqLR Oc xOKmPZat΂mHrӤGaՈ7VQܱ}~:$?6H4/>ΨS͑ďTy#N2/JSe<cu:`j@V0r7()WM'P>ܙZǴ~/q zN=ku|jJ1Mʗ^4Ay7En4>/8r嵙 {ډޓzZ l6b62o`+ܳcpj ^-Q.7'v %j5L+6U!ɀdSS)41@( ~ s vJ.7ѹCcOPpRJ<q+I3tre9j I`^AwsY,Mp =YMk#kS+ߓB;Ӽ9|͖]B]:*.<Ȱ or\e?lgT/#{HW쁴oq0𤘀0_4^@HVV7+jo6,E7?r%s LELtno55 ƳPaQPLR/ҎZ VkXk@`1zVbIB S)OoA߻b [nuS[l3H]CyD PnQ86>tBfqHo7~ʿ8;ut[5t5J-YL)o;<֤*P]yg=1RAzJ 1)@bVMAf5T1SrNb~(ShRdaf|pU,B'KV@c/")8CH_ fRwTo]]H%EEv|_F&,?¦ (}KGRg!԰Ҧf]u$ Kvی6g*yZȐ;ЀBƓK1>٩֜-}PvX,\iʾNB@Z"a#Vw*iɬql jrj4xbN҄~ IC# 4Qg*7M^겤y cyO li^*. v> JK삃MXo >b}?'P~r<-(K*Pq~ - ORx% Փ P{%qqTFχŧ^Цڇ[7<ͣ8Rch&눇};!33~ Ǵ["}2~V!0bln5ilS02KF%n}U6@Z1ޤ4q,0rMw&qbG]·#:65@G,Xh]INa: [WS> H#|BҸ T .W=4U4G +N(zѣbk z%³T㰩MG],iĶD\BGm"ig~@!sEea 4b֥B$f)?0::p_jNNivw~dWְ5Y9˚ǥ** }.-\-Ff87u^@V`yrhDKgkr"Fر t#W>]n*|F }HCzR8 U|4?FAI%~$$j0Z}ðFU yQ`OlԬVɣi, CiWG¡Ֆ"X)9IHǼv:(eVRy{ShZA",RXt'y19Φe]t[7,dg4+kp#{EjgXIӬ+-_7_`X˾w^ :*._UFwqˇ!͙AOM_,#hVeQQZ;sha ]77C V"X6dlF˖h N9$(lPEk*SO;"3h:DϿG]PIdQ[req]f'>cNSRW#_6oKDj5*m:#PFGnfɺ*b74ɱR(xgEE=Db-RCy|!LU[3([N:ڟ 6wWFQ}kęaͪQ~B9HpUs c=WƮ "dВ\I![dIZ3p[}-{Ԝ\Y;}Vҧ;=eTv~G^L$~NE?t.Xsu#_++dEEP:K\~.zٹ'兎;Mԡ=-/-? npF)s:9[$D](VSĎ`\FY꽉m:xYeI6+&̈I c_Aܶ!D\TFw%\4eO ]RLK +$I{جY̕i/&̤lw'G%_Γ9#[rOjR,I#5lrf4-HlC_ T;/9$X Bnmq$%D\]@QƏ;njrnp{pgrm5_{z4_]l-Bihhh(K"y[/.L88qbQ ²'_we D&{!lqP5%!~#i8 S{bXNc'^6&;MǚƦ.^b$"o ׆ݖ@h:\M~Yk|^y#04$mm4Ϙ(fװ^HO4*&fJ .&R^ob?mpy\Я J ILCoA$hpSp@g"|yt<'?+R4Y͒U[& Ҷk,$5 f. \ ڭ )' %]#-8GcÂ[Oj*z}NcBx%T#ݔ.QS6DXvcϑ|[hr7}aߜL愶.0VC/"xY3CasLqDRsbT^0FxurbI6Lf[RJFinD;e\XtٓeN\ wF:Jl BԂÅ=ȵ1dz'j[𷇜%w.c1/bb筈 ƼH_wD]: {8&2>6 4ž"38T+>__U;)]!&?/`!%jPl(t-99c =n4S*Ȍs)6XTid)o27R ů㉭*@L_~Kw72ʙLcWA~SD˜u&-(-ȷ =^R@9SDNe{*(tVw_,Y!&{,z6r.'Pߔ >?$tu,oA |uvgU,_N*5B5y3yW4kC&e^aZ3ׇ ןHS`mn#(c; 1j6/)G r{߅lڲ(Lwgkv؋ &Oxv޳@L+ՉeB@aeu}˩i 8DzM Y_6!j*QO:[N1s/C 3ste7*ia}* 0b ̐NnOKdIG+k썶UX=O BR'wۯ].$*8 J |>qχ7M(c꣬ƼN!^㏄9MmT(yկ K 9Qe\|k l_B taMwVY)^lf#ђBPEU8c Vi3"Sx\```ӯZnozuY1QTnU0F/PۘS冮w'YLRF@9X~<ʨg'FKTɐ84'n%~Wd%9-W&6[1]S,4c-U*PX޷ôH@%d X ; 81x+"v˱4]tU|Sf!҇뭀dۼ|+&m3\oۤr[j.2~):S6BNk^{hns%ɂ-ȦeKS[JJrfO"kqߡQH4@rES螲ld&F Y} "Da:# Ds yCUyɽa-'QoIGmR.h&Է6ݤ# niDF)3ƃ+3̊$J;\fLj'jx-"MEf'grFx۔vr!݊Cg|[9vorpt5:`n4]e1_<k9LgL̽m#*OJu"߅+5E ; VdAN8ƱYmJN3T~ Qh!r{p_f7J,ih$LHkuDR1P2:/8Nl3j2FyBM05u^xSw+=],جqPU%P848\Cz7Jh8h͔7E:@Gxlj;=@@ft϶!kgs?7?Î B3j4&gA@۪kX&Ңdl4`cCu|3N XƗjʤ&HdFQ_̻ş愝)FuWsf5@:jh,D3}hCFh>a&|:jWP;%\ozyA\ǪX0%"+"`{ú84n>?Jh_jecF5^k6Dagp289N]y*"s樔V`$5d{k{eD%Pý#o~NئxC^y{VrN[ǧf![vZxh>fpoPtܒ]tH.r*7 ֺlT "H*DJly&s) g4#Xm}, 2]g ^BÇH3$Td%{8bsX{@@ &/vk۬.n Dۘw4miF;M ɛ O& Q @{%Iy  ҫ_V%i´:+Z>wks*l%Uu)VАvv%8#t]س}{eI@k^PS_JGse {'@ecЀ`l L3Sp0(*-ntkغoΧ^XxlX#O)&+10nKb1':|~}He]0aro qV}o0KX_o`^5yT:2B8n!KfLds{?]O)#0:ι JU.y |^'>"`ֵأ=? Z(AX/wl[3E @ >)e<O ]. Ġ:UK`?o`]se$,Wm3m>&@k~  P䬂;;=R(*]\̙%杘+`w3,Ȟx+nϐ s5-&&[>v9=0UN?hcG֪|cH`De"{0/5-‶/!ZZ3=%{{܅ǚqFOH+_-?>n|56;ius: 99rEIv/c,bՐ?%QRU z2q2 җ ?8I!S}ZO瑷N5pLR$ 6oYn? nƣėZlwz|U Dm)($Yp~Iƅ=WJ6:`P` Fkذp)/\#Zե+6#d +Ig+9bm8qnN㱃+!9gNoP`y{Ā4VDMqT%(A=eq5u4[KOٳ ga;Ci h<ޓ|ٍQy'"-xMy3M3^.8/@0Ϯͺhl ۯ/YIr!oqF_rRhRE\T +\d<.|@DS0)+gJN5ab] Npaa]@ \ 798c.n&΅=IڢLV$_e GtNm[d,y2@6KC1u)8Q0ArzX|•1G5pƉHu(RdOE<ɚ d$Qh2i GC`']^g^4)Q/͒1DY׵%ytݎCxkɒ 4Ìj6Tt&bw'2DŽXK -Lpe4ki5'gx;4& R!T1]>#Ȏ S,N,)Q` .*]Z`m5WZi"uŀ>,F  v[ث0Z(a DnG[X%b\(f| ?3f3(xn.VH7kCvq)Kk*$-cOy4R;|>. }wr*a# a_ߑ \72;R5MJ1 CVG(2ٞK,C`tF}bfAGgoF}"|őNa]?ƒW6Pτ @yyq).ǃ|4I(kRSFoLxurJhhV&ԍԀ.AUPsjB+G =fޒڑa~1|^6_pL~]M1GPɫH-WH/* [{imOIN}*eT|tHV]WW6gZ3J7@O$bJ&KӼ9eO֒ε).ܞ(\ش%XLJMTYLyd 6xԪ%$CRZq ܾݤ8Uch ŕh=QLôuϊkb@_L #,YO ׇ_ $M,G7 ri;K5U SGNR4 20 7im\DI@@JazҶJ"td.w,/#Q!UJJJQqrjf^\j\ma0 ؍Q;Cs{>!3dFl8p<^UFp'aҶĹYGb9HdHNNmr;Nq+/k];v7cp;g"*B69])*E+mFt‹VtNtHCl07v]!o_?B . jN IE Z|ΜqyW)Di^׽[XdF/pZڤcȢ=-3 6.:v(.'*`*5wgovTvetҊ2.5ɢbK8UHWF0k3͊#/"t]R ,CjUKWhYexA0*qjP_G[<!G#5XJz~'kĺ;Yo5gE6$^32D6T'藄栥vp<v"x ~tfQ R]Gѓ{ܽuĩkc*YQrMwU6>(LX5" YT Z5淘 a(.UϘ-wh~xbC+U;/!"^CD@J7$E Z%5J.g4`Y 1] tP]wp7H{ժyi"GI dMVBh![e'N;钥Ef$Fuǘ a{u2bǚE >c*\d>\DARbW4&:0k\x:!")oVPdD @{DY sT yU_z4ܽt:HH kڰQovy,:.0 @wTpCA2VS+gµ۷h+R%x 吹nwN}] ݵV$Ba9-'+Ah!k=4ϡEva$!tql[¬ģ!Ky^=f_4$8CPmƕ>DEv>՝Ƞj w= h]s9vg\o+yD^6u|yLL2ý>ZqB"Z዆IŁoR+.JY6lMp! 4o U{쨯dI xt@(|σca!m 8S/WYd1)xR4BOVM,KL{7ݬ̿Uΰm)j)Kp#BmHy4'ŵ2T8Ai_,H b{܋}/k& H,n P:`dinmM [R"K(AB|XA %yX|7Hە=φ4&Ĩt/ .1f`6Lp~-H'w8+lPO)j2$ :'v< KNŠA^28'RVr[NJzW$iƢEЫ%#Bl ] P5Mj=j?ؐmkvd]3}T[ K֣}PQ>!s &{j2+iZ5m}zRki&feY j0cioB!ף/ea$SPIu&Y-2x׺ Q_9^!o O<עhSŻ Xm?N[2GT %Ԃ ,\[viqhxE&CxqK/$z5׮Wy"=1 |B׍YE01Gb͹C"ߦ3麗Rq/޻/$v#]c diM#*NEL,5{3&\"p?p“ Qv2:֞\asc!pp¸ sR#@Z/Zr.-:6E#yʟFʚeBWQkZrRSsծ(Q3hAjNء;BMz~:>sQ_1OMRvϲb*R6[F2d<_ n&l%&ȦHVߍ&R<$Vk|ʠة5HFQ.xX+ccLoΎr^>*jub R_ȋNWL\P̼2hHƕm]WI>*U[!Mtefxrf3?ڲv,:g5w( rzߣ;J Jr+R!br$}=ӭM(,"'Scܨ^im7E2\ZA X8O yqdٵ +mzE&➱:f񖷆c7*+u=(6 Їca?r]̩֬𺐯;zc3Πzȩ j\7RwPeJ9\ja[AV?% ^RR(8#zgFwB`[ضӛ0O#JXzIVHVpqJt!KJ 1ޒ `k ؖOwuÏ4+ ʸ3'H~ҽA㈁lޗY<ʳ &3d*^2씞n4i#]bj>stG%OU6ord/aόM+-4|- %GiH~X=,$~yFi ȉ]9`-.)jLĿ0B8[ y+[!+.1 KȡB;p,L]8v=–Ji*~o5!\A}AxQFpDJ'"/}`7 nN#ޤ˂s6Rv3eT{pm͊*eh:mK`7^<\!Z'RS[()|3rari$ ӿ?RiBjTE?M\r=8o΁G6qfʊHF)OTGx(xY: CXꤝ<$(uHW%K:vk'[6|6ܨ [=3KܝJΰ:fMƉiCyQSh0E)U`M.p,#`* ]n5,PXYmg=$okHz֫ld`ߑk>f4&%1ܡlz>hpSzs<, ޥ>J I|@)5('FQT{V-ԉ+`b:=S~D7]ɨc䟯$q%W:̅2P;eD zEFB8H: Fy(4sVy& (f~4xpqݰSФk`/H (hhYiEe2e/V IM1%x U4CeP΋d3,Dd[8-Z=SYl(_T+歘@J@ByK>廾A"Gڝ$\)xSpGٮf҂1}Z 4gh,uE80M@oTG ".tw]Ifnäirp!>:&ǿigI->gD\j^Ci)Џ!<,mjKr@=pSI/#E[Ut.zd0N 1199)"l5AON?^_MÎP5@ZżNTI0"l+r +6|.F:y+-^^RDC  47; NUbo܎LZ l8U<C8KLy;(L8ePMx-xc HQi3!vΘnȝ)wR*0BK~^:Z ^*n b-] "p\$Yz,ZŸrFe&㈨ESs$@HP!S9<5(ԫ؂7("  Px '拵j|fMYԘSr[e2hɥǺE⬂dx2u.Nmbݲ$ȒA Y5ɽa q (qI6tueFM?U1l،rn&#SUL4) 1I}&78 fDsNs9pnJ0aG1iԧEhN<Ζh U=1ee\ Nvtc--$~Pwqg9>R.JȜ[Vxu{ndGtHj 酜Y}I%Yd0c{lvCc9&xR{7qb~ UY9PQ?N)"P_?t.<2#1( R00"ʟ%$ WOPJ4Iamw*=ᡄj=z (7:3(ֈS]4 #l"Q݁Ck]"褴J)h[Jdk4dvDULki3h4 яUdˢRc^NGR؛07ZΈaG)4n4-li2{ eϫr P >Q2Qef˕bлe#@;)RU%2v46RijKRKCXۄs o20} PY9qK'u@"P%YM[5ȕX]7+Wa ލ-;,)<Zc' '@Yҭ(p9@]Tc\j+n224~43o|=+ʯ(;s VJM,q`o~ȺE?܂Zv@\D&@"Q<2L7i0sa6$Ҙ)mVLD.uCJGnk%{Đ'!PF剴IJ",[nB9 *H[֣Ac 3n$<|:LX]ڗh8)O?LW9}V>%ZB.d#9.GeZã%΂Ȑw=Yz rqL+Q|IC4XA-XE!vb4VHf/c/}|"lpȊ%1#))3Fr: :[e"Fۗly,Mkp#I-Ni J.aGD=W&!}o G9ȸW\ z(:W(Qۏ5٥3f?7<B[YS, -2!lcb"52 wk&V̠bQYA9|ͻ]׎L&Ѣ"zYPjp<0oYe;K)Eˤ!u5';|(fBR{-)jB崚ӅiskvrEEa5u0<8 e,`3Sߴ;1]/2bե ijy~ c_ٻm9OXw5z%Ts<9RHbJĪ $u =H¡=G[6ű]ؙbOA벏쑤Rgݐ_Os2 q^>T"f#$3_b=E4˥jbP" a>-̌Q>#{jJ [6MܾMME1 4tH.u1`״p'~Q֘ȹ90K#G)%q!"9]b(hpQh0qQA:JAt9oRVO1 +,֥ L>w0zMeR#]HC G}!S$K `*Qy w2ˑ@o#0c_̓5P5nV0 ~Fϼ!s>"vnw?e )5 ǣyMrރc0t2j"hbNˀYZ2]%+tL 4n BYB~6j$t [#z l/f}fpt,,rY йO^Zci$Vs=ő;Y7}xj9 \ku׹*ح+~ra}Nq:W ؟ #8:1aם4uGP .æUa -Ԛ6{xը`dtqf+ߤHN&# 56,:)zr1(ڌL|5ҽu2$&JgQfG91c8bE d(۩r8iYSY#B+PFߵGz[\l|smoWwRގ=@1o'`53 jƬB6v|uZ劲А5 o 1-o0H ҕmsZKb^$4VL/P2JJsjJ#4BL3*ʑL FSd\.v2ɾ|)1e,rU:X6o6Z3GbN)(Uܖ$ȵѱ?vĜ &,N·&>&$~P0·FO2Mھrƽisjf$ruc!^cRΎz%ZA$vr_6L*DPk'+\纘"4/[e[e`yAxL&:15֊/{ٜة]gf@ew;g&d<ܿp:cqqK.k-nMĎgL؟AC:8=o?& +-ѨE׍U:I40#;>IuƈX1byO/X9\r&(Œpu +0\g8wZKcNRܾЮQPJ_~^Xa(| XhTS*qVÑt-X0p2>v:;I+q:Y@?H]ǣ>-,ǒ[Uw̢>G<=0 ]DgFVC<}p}CJd*g+Nw9q , =0RqEDZL#\5t~ࠂrk$Ybא${Nagk#+-{V-vmoRmxtqZ(!Rl \ְlܴM+6Ö Beש^jLWh6 􈷞ϕlÈߡpjJ֐ɦB`3"iWlsP"mbB&wuNJDP`.׎x~mZ+NVm.z`ڈeqb.ǟ.v7"R08<gԤ\Ng1^9@!4Ŋ QfbǭbmPT7)?D˾-Ryߐ ; VcdKaٚu3Gi L2> J'l䈗dT+OGT9sW/^[slc+0NoM;((J$|RGFH_$Rܚ8p4=c];%ahG>Jk!^3$:<"]—A sf R# \b/?Љ@TB33J"ZW0h*DPL_W_o>YfV|&*"]704?K!Ai-,)S‘|!s \s3|Jo .ͰvG" W~E>̂#j[MoъBǗwϥU& w11x*Sl&h9R!v)׌>5bu!ϽQ-Ydq2VXgB\ ~@΍Pj\ɧսj'ޝZfX&,^4em[h䢢?eԮ ?k1CEWW}g݅P͒duM! ~]+'tyCPb xyOOIL 3Gn}?Mk"#SHId@0$ٙdZG-_ &1b+"\{OJJ4Z9 gf[HiDX7{m \E/(%% *!)]ʓVI*ѨŹ11Mg$1MV6-QDg=AMN ) Wp+νK_ɧgG7HY 3j70C\.$0lNϵH ἢ^Nx2PM>*0X_KK --AwGr 1MVŅ^MeӅ=K5 #q7%e^V{ f$Cm H$Sp~\3($)žĜo^,CefHCfiWP# 6X}+92V/adJg"bSλwN3M ny0dml Kd;uyM$Wrf(ٺ~w.o&8HC1׶K.m'Zu,\듽Z :#,#&h"?5j- @:nI/VF| ԫ9s먨RE-&ǹ(\i_L;׊/"qɉ 8M(xTiıARr85oΛD~&ENr25SzuvTpXZo0يH7&+(ջ#xMS"cO%MV.p RIIGŖ3_B@{WHHC#y{jl c!7KX r0q-LrMb#[*`sJ?3fbvno8{JU;%Ѽ?*L}᭫MJN&74y,ok+_) ʒx1[7U?QL"LJ@fkp`#/U?̂y ꧲~(0}e ՞:߾PEIx ,])pLe\a h[%#UT=: {l歾yA({9-|_u] dT*41|A MQ&jWdQ_:/Ugy=SxT؀9[Ú5P@pf0תʽy"lKNq*y3NS`|ߖOpwf4@B%!ptwiȢ޾gY 3ex6菱ԄNۄvqSO<0ėcA?nKY/ `p1Ne.ֆy|è=erDxdlӑOFg͵o^yQ5IJ?2k$<};CwE @etl GtMl~i?;^MxJ(0Cݠu/?^_Pʝ X {iHc851]x Pϩ,c rwHؽ).,w,K\.fX0ˊl[̬;}Ι3(s.KFs{X]cAx.@RƻBtؐZr=h&:@h9Q`g}3 6G @q@=u?sh5NtQcHKF~L5B;A0N|C帹ZpqrܶLJ<(8UOc.4:LPU.G+./Ӯ‹"ј1^*] -ȺX4wo2v_>80ЩdѫTd3.5\N?;,m%~\",ͥg34> тMrdb ߤ-jkp5NV=Wu7.W=-d ¥W\wuU+∤sd2U}L#ɦU,du +.{=،W8R[$VrxZfa ؂ֳrw۩qXQWզ_y%jDu뤥:5v2r*c<1\H0l26둉! R*BTΘ\] 㷞{w>qo%喯?tN#>&X~c4v;Gld[,ElBX-  (KI _DAW&@j+tL(m'VrIJ>*@Y zV8~=^ԺtR+&/22v@& x(%pN]@ݚ܎*"'Oڴȗt{'v@ne5 leǗYES[ "vO#axY=D߸@m>L2(R}%ZEųxp'V-e.'BUEW[' އ+F Rfy/`|wNy+Zlw_9"\{C PR" wGúy,Q$F9H^@G4hЯ2<В綃$΢;f48MC/U:Sk Z~Dx*J<`hǝ rLvԪN_"fgkU_i"hp$DbTpn,uC24 EC'r[wL<łC,oŤp,$Wl6p =d:#v>3FS[;>uU.)Z *C1 /]tЮ қxWFoEb0EVx=IA_)ن3op ̈́4`g""5h B2gJ3.;vk#EocIssj!I;ú]i\tԇ>D3'Jy!@DRɂƤ)'HL C_ Du[V`P{`  1s+_ϱÅ .F O^{11 A-EO+D RjbY'ކsWe?ub8ۉiŊl`dW[$EaB<SM(puG-qՏq ľ<NW1"&ÈTJB2gA,ڎ S3"m^1_P|JA8#31xj9S16AN W:^G_qDᰭX\%#'k=oC0F潽|!;KZ-+Hua%e`e9|QRR/A 3\QrkUbrB 0nNxᏢ=b)Fn?䒭,#9~TG2v!9o)5k jڎ[j! m|Lj|>Z]YMD</*ةSZMHD5JG"/lCKiȣ E$-Q=SĆ$di+; F]J7s觔^x d?AૡGx:65'=m1Iqӣc#x4͟8zW:,,HGcWr_B)9;58+|de6r7&IK*0EhL)UbG~DH^+꼰W]uŵZ V@LK)%ݔTpaH3!V!X6V<fAbZ~.zfz .zwג%sd=sw8+%T06 1y&F񔧋*-vzC^ۙPd\U0-_` &~5-d@L&,0m'oV-}ZS!(r8!>^ojx֭>GI%^"PPþׅ"ғ#aKhˏ/AC" ]Jߏrfc4iotpUMiG$ EB _W|I#JK}x@n sHKҙn_8/_QXM-Ss$ ] ;Ϳg$BhQ#ܪGԣm"hb>LIysU7jgk|8QC{|JIcZ(PKLR9;JqT7zv#I3JrwdA:G`E)-3hZ}I/jrWLK& $J-w눴dS![<ټur -iSI(R[<ձ,$ĉ.\:5bK۽' $΄?ՏBpl\?|cާvbпӓ=}s_.M*4Yb pgJ #^by A!*)k2$481m,Ə5$lZ.Ê7#:0&I@yQ$%ϲCh'vL3I@<Db\RJ*=yV. 4+1Fh*t8RNS;k[)ڤV~087U6&j>է-@/P;z_$)O~Gj"$[SR$ɦ n^ej^C$K'' U&mKŤ2部싦[e @WĞ36l:6-)kم@B r3ݩAu ǴAt x+햱);ƮO$0ydP9JʎhHW+u |"BXB&pj +ݑK.pUxY FKoDb%=0FW }lYXI%gJf_bJ,^&>Uo.{kw-րnVzW#mqe]ĸzH[M5!%ДmM9"S$A`=q~Ǣu"NT7=-Y,匡ߚiJk4!Q8u ۟'*O;K+ۤ2J<=+u9t]l/xKE 0S9HǾF{#F{9)Hg dM^۵.D[ l*ɄB[C'c ԫ+1rToa>En|ЙdUAg͂0coSC>„/5ͰqEQ,zlhb5 w.$1]DhHXd O:I- 3ךP?mHCcX7.e&Rjn:td'SkQ$&>\ lx<KaM𓰧k60/WS~G艸5q"G@NtʷeorB*zg0$UvרjСؼpbӸ`mo7[]?c;a\%LKdwd-[Ò"| S wO^Kp\hpKi$~eFH>ޕ ==j53)o 0oX:oIog8 m#U\r ǻz bC&s*xr 47緺>hNFEQ3sd&e,xދ9ǞN=M\!jݱ`{-6] $\7#8G*H^@ڔ2V,8ZPwCmu8C|2enX=Ps{Ƽ𑿩D,[ŇI;Y|cGù%D0m(Q9NkNoJ'>&)Щs}nVQI8|7薊FvvT׵-iŢM Ֆ٘}r߾$O~Kك% Rgd) ?k[fw+z#y]LEcB%*Ad|%9#Ź`e! &L;R3%֘HS3B^sr`6IuzFu'zָ~^K Y^{ŕWJw5wvX>ivn\mMqD!SX,ÿ =r'f7p8M gKt*luXVH5rZr dAUNb}}_mAF6+xzz^3qOФXa"m觟HR8Bhf}VR|~Xo 7C%'bJ9ӮÃ#TX"{nJ&YF/p j{eR642I4 ~#0I6NMHIbt %[9 79zlUp랡19 ~Cי_N7t kpJk,T30djtiZܸujlY'tD:9 r[=lL*%%JOw5I ,^cD\CR*""b$^uaR5=mxM>3pWŔ Aha`y_g1O O=aA9=ԱÄJø_`qbD~Q֗z&cSs4ݨcISR%ev ~6cc`I99+ I Hxp\ej}JQ}ȸU/]̉ة pf/9s:(jB<]-Dm g$;.y .hW1ӯd`lU<ߤ7ޓ:Itw# >, Xzpj& ?> c' wtCa Z>΃K~Sȣ56 LeW{3Gl?_oD?tWx]L=p& .#YY*{:E6J(+bzKXqTkt25  'Yq`6s<[TEF_q"`IP[Uw[|Ri-4 m̈6(}X "X{# J&-q8P#|d{̤l1?nE B=4UJW9ޓþ b_\ )q{_ 8ؙOYpcJi]jO$k42pe[.&ᔹ_b]*/1/N|`j\>odE2-x1%9 戹S%%$D(H U\jҵ`IwVY$:tO- G᥁Tig'i{_TM4N5a*:\$% Vl^*ɸI㔀A'%ZP?_v-%e`o0s5 mZu^v z + rF/WxY ΰ"w+ ۖ:kf9ieBF4|{} m; S,UrIfM|AqmnivMJfxܔkv],4^ 2#dD#zZ,.k$&sI>. `׹(f{a"#Hr/Ut5JR{u_C_ىga=Y ޔ, P礴zwE>{Xgc%7\)q5׀*G^s6;DK!?u54~i`fQB=nYmQH=i):쉑 :P?PT8. R8OJ8kc} P;f6E1J<f<̉ưYqƖ'5'dٗ5k$;kȶ4f<);L0̙\ѥ> _Fa[D=Vp8տeqW CV&,(Fxs@iWV,5bc"𓀠Bހ|}v.dw(pªzڥH>-:zR RwY:%Āfoٴ,8;t]7G4) sb{#l.x^ ۂu~yCWAM^l]]Ɣ~ ?A(O0qxnʌ~0^YIJ]a+=tQ}^xuk{4M绳25Q3' Y8]5<1B<4%EoAPTT%N|Xi8YRMMgQSz0Ԛȳ jBW D 6F,A-мJ-O!؊W^A<)06fz|?ʻi03~Wq}FlO(^6C؁LpRj邺R':oVZ^Y*ZbH[<}l&I*aE'L7Z_%`tj\(@0-7+([=e d:yw;Cĥuf%q6h^^)"Һ]gmQc nx &fƛ,*Z'j(%V vg%AbLpW^Nu\#h'vfU`$l$<bO̊U " c6n4Gg|zA)ՌH`iH? 2Oֳ]Q6xx'4_MBH!^_XOU4v+M;9gIJ|c\zQ|!/笵o&OBW:uId!\s*ţE/5^ȉ-dIB2]N#2Vf]Dnai4] `L*56+$Z"0b-.,;ElmS1w$Iz䮫4YZ"ڧӴuyfekQٻD)P `r_zV+-U~ir:6?tƈB&?1[dUlK2ޣMog!Iu?a8p"',-|KLtRbr&VHA)fAQ;ݦ=rf)uQbX9I̷kS+?U0 XՌFib_R:sa$b!:BɇV ԘxI 2eut-Ȗ炁\"X// ʔ@`ZO W,WN- ͤ/K~JD'R3dwcK#k$b"ef$y#XFVY}ߖS>[ Pv˖N,js-Z|Ush kyȉ~ FZ|q#11wY珜 c:f7eE"0)rayLSjq8Q)?hVɠؚJ'_ћi( ؎"6Q"U:|Eη&F^.^Xpyp[#QJ9`%$@U: Ą”Ngr,ػy;ic$g|H4xIƩ gtSsHX> *QW6~C"(^az^nSZ =6܋b,bg9BX >S{D3d>^;g  g7VE P +>#Q8? >eC"Er7GdLY({h d{!kt}gɆ3~3nեK:Sp3S"eXoZR5mGc]-\mjpF> W;:.&Fxi$; r˙*fk??^-0ĵt7%|9L$ADtb! 5AS'MݫQ#@|Y;T\6oFr+zFN]Qq%w m3b'MB3iC9 IvLy3O 5$LF n.쫺wnȟ#Iz|<ʠpqLsY@h90]WIHI-G3~͸pфI(!ե㠼!xֺ!LD7.1,_D' a%vr_PN\p# f|O$V1kɆ8 ~%*Evx0]kVń;gt=S|!!d@+$. Ȕt(;JC{7H PPsm#|;%M=m'6Ȥde>Doww&VfDSy5~a`NC霈BCoXixC]uݢ*eN#ײD8\+^yH(5CwyJFZ52};s^LkM8$[[p”@ET{&߿펙M{e0ry҇rqтV9b^xǁ-ؖE M(,+p' (~ ~XA+kp5{S8]\t?z==_R4썯#uֵ2wBoEx[m+My9vլ/*Ea īJg߂_#7le>l$;)H7PtBp9;0 Ɉ<`Zԥdo{DbՑ7b4>l/#3a?9Ut7SS\OˤD #*͆AjK1qӫ#ܕu6*$&j𒍙䙺Dsh7Čt3u<&9~ f7|zǟ(IE)DDb* d'Wif,MLdB3cGۄ3H^s,lj86ЄD@"ܐdvHoO,aN4fa!Re-V|YQQ3J2a7˷Ԕ6R\▏Y0狚C1x{cWy$Z0=sTmY2;p )@~]=g{.]E!!h?<٪iFo?+*OsGVC["Mp~ԓ=feTaqqRJ.56v[g΂N.ZDk36CPt?k.ESC1yf~y\{"|pi(c0𿦬:zaҭ8^x9%@Y }V ;0A#w˒8eL9E(=x6Gz^Rr n6àvZWNK+LeVøc0m&vP =Q(7.t;^Xaa& ;|c5f}zM 3&|X 0&,B()Ĵs5<8~Jj&%+AT*L }mXXg h|6Пnw̜@ Byv}(>-5B"3‡Wa TMaDeP;r/GuzOa{p %{~xԓ\8OPՀݰ)\+/_av5`eyĈs/TRӎi[h%C~f'; Bs^>#~Ldd߬q4ezKc?ô2ٕG& (LbJkn&hf0 SLtvoX($e%|] 9qFlz|kJge‰ q|~߅[xWHzNŬbr$mPlI g?cf@X'A.֙q *$_MHqV_J[ r?עɤ󿔤WkO{ji/4\L!yHD>Iu΄% $:tSnMru茱d.V Ja%-3 U˸Nb>3%:$F&_wU\C+ҽ0n~.U;N'@#!9e,/R-…Z0Wxr`ܽ7cZEis, hʥ(QbMv- _#dM-!>3SłP%거_9r8pU:7\DPdcd!/ч!oMuP~æ='Q y(*ֈ7=$3Q "D"'כfxۇ"mcSܣ[Wv=q$|[-)% \C Qu^1W-_$Zjű?U&1 Z?˅@29UAfO;+Oi:0*K'~L {^1Km}񄞙&xjGqĒΫ0]e n~-v v2r?-&-" DLpcd-}e؜JPd jhk6&BzzQ&kfN"~w*@ͮNRJ8Bjq RɁCXiNt*u΋r| o%x%]0b01'&ÉΒjSQ`_@՟)5#'Qd#2FN~Y%#Bq^.o rySIуRy7i$\}QVmc ԙ)Fvh}{B(Ć<{#7:ڧb唔'D~p>2A1QP2/$&}$DŜVWkTQl F=<`ۉA,V*̡pOrZ_s|8/'tr<2'=X9dv<I?Qoo{LkQĺ 䍐Mn:*"a@i1T">%Ia6 rѪhM9,K7Ի2r?ɟ[>I#`qx,zP1߯!J ƚr$ * W 6ُ RϟTl)r 1pvWFr`ML3 EN5y~%T,`!EbuFl0B]@.OMeV f杻t[?tژ7!*8ϘN>='MZʋ0 5:u7y WUa+Lmi;H ܺR8T% TPtqaV%};%b5ٛԘA[bl4{.o&3H.9M:o0g<,k_T잲w }ȃ!XYKoHJ,3R?FW;XO1Ւ'nF$zvuN S0  `WYJiP ĤԉAWR`=tݫvn1b@U)G@+ur1KaM>Ip|cF0bew66p6r֩!j'VpfY{!]`ኈiɳB̻}MyA`.4EɇeK L_k()a8y-E+3#VoLJl&D4vnh(5]/sBg7W)(ځR,."+^2n@Mb<;@؛ЪĺK`X9R+ 3jO$>፴[?p#6$ڞ\{$ |]+Ky5!qޘ^L+m-o]8+!Ҵ Z*\@)/'9`m%;U xN7~|pm:`C-(u L厥ȡ~Mv] A%ze<=߿PZJ}r;Nن̨!-"P>ǯq l0D|~ze+A:-)a/Dj0c(?wܕ+aFzta?XCG9rvZeT>ZZkzk)wdӎXfqHYrJ g[dn^2~b#r٢y'JUA) ުA$ "~b\G|bĀ[8KƐ 9>WIN+r}9-<1́ 1E&<8~p`9ٹE)eeL4[ aXEk!W왅QXU;9ͼ C gWIH{ *]A/$ú J4<2l"}g"$݇#{?*6I74I~RFn6G,LKN޺V%vO#ۿ P݀;[n[aTޣeGy9DOE<FJ cR/EV/Ǫ݊ LBNAer&= *jP490݊gT,0T`Z{+B$eY26"tIX9v3<~2*6wo y[0U#o^qJ$ a)g(+h,?o!G~㺭XquP g 0&z~`"0䖖J/ZǤ yeLceL# \Aq1ٌ5ԁp23pr)}w{RT.Js L˯_섧Zs3nk?P(bM3n5<S3Aߦ璂Tyq$BAada ~S62c3'YV77=M hth,WTx<],$y Ylrmo)'c :cw u}0R΃n5^" v0le)Ǒ[ƒMq.a0B$G(»m0hnN4ѾEO7TyU0`mXlSX XCGpntB*]  )sY?a F9JRQCGHE"-tD~x3֨vՕ*߱<jYIg.Јw-)Pq"$9͋k'{Hn$֎6+bGlC6TZl70guT*Qk^1xUmeȻ^&Ȕ2@ hFs.hU"Wn~l(5$Fy89[Xxדoϟ9Nv/ MјVF:.*&FHxxqCVHigtsӛaDž7K=:O^}VOZiΒ-ʛIMT& 7:s{R)hvЛzXP$)~R&q'증C!$؅u9|#i}pΩo؅k Wwف|D7Cu[[Wy\'#LABO;#5_cp4BP0^h5G=& Nm&AH8Wz\~8iBZmŔ@tBU*7H-t4ܮS7ıS$H|q{-Vsey.>f/hݒ7v9"ϤYkLSJ<*ѫPR[,lב>oaC[z!핡Em" >"R-=դ1'NR6d&}G7NZK,"}`aQ:%k)O[By+ O-} dPvdbObVT8|Tj}i73:>0>o  CrNOE|rT&YgSt 3B PTIۣ% JiN,Qfc3}>/!"6@7}_\kmҝ'&3ZmrxIYh+7 QKwE]xgd: s'z\7H jDC3J( kRugIBr۵gm߅*Z˙6i?40j]9 Z]#vמܒ֛)OL`1Z.5DOpas9\Qu\-L -n8?4#;KLXmDك]כ+iqa̿I#:ot Օ*#S]pd"r59 ck8ӫ[w,U|ݾkJƾO4y& -Bc.-, Q`0fH3UvvŪ~cՏ~yZ'eYV>ģ!Q JSG5s9PW T'_\t&\:,;6~^*[Ty ^dY~iPXfi^f \uA8O{`Q/1m ݵ(b~H 7 j)7iT}/tHFg$a:g@`om,@u tcČ$]=*'Jݨ5wZ) >c1"IpiQ}KR)#NS 78IVg 8KT/Iej%TnP.#ɓP+mMYx a62I a>I2"\ #H}9ih! " 򩲭K Rb*pU@2R+Q cd_7 x*Fmje}~c6M[8[ gU6jrbpf\eV PqG][iݗ#TFd|/: PFQoT&AB:G%vR"R!EO„cZt7x !Ci/qKO6Lijwf'QȈZP/u{7Aԓ InײvBn8SObk:m %P),K=>KE,j4=9'/p^K{n?+>2"r*B^%[rW9q[YlJd`:u0iN4II{}Ԙ@cŅj²' mÖ4D*}[+,M>9.9;hX-0?1>!ݐ'|a)''bY$z:`^BtP.hy\a`G,]e(Yk fa.;HX՞B:O:S9) 0Er*aFF[5z@.e#xͥԄ^B5Q@䴽cmϲn HTCCOwa{DZno^z\{i /b<һp+Ѽ#KWd6F?A>tߓ|1AiɓUlH{i.48YԖSA-BN#p uCBDLǞ^5P(as%3q5GӅ kS JP_k[K앇H @&u=8@32N%O@]Ը~SRX `IhHb*gݕԮ*7!DM@<*W-QE'FE-!ʣ/5BLwbgWT ,j4$]"R8BeVJ>5b.…ttUI`47VQlT$!MJ1F>s̮C"3bPY,NZGt6tak?Xi %%`v5e@(b vInc}NA&JSE SbrcoTA1O.3T֨6ϮywZD"J?0𔦷]\Js%=աۘhvwMb޼{Y0<`v w92nF"#³]N$tRǜ,(7ͷطHdިtw{xi2\\@S(PgMM?SO|4(9d+Ks'ڏXa^|-F5W2^{nIU9, P 2]WE25 @AHYu'Eu[{onFW^RF)H?KG]CAU̮Sq9sŴ+ ]7oM?S6 ,?W6Ӑ{]ʉ9B B#QI呞ڂMX]CXP2FL- QV }׫jv3|3u3LtHqG䡡u}n^b~p8NwBi9 {uw%n"ml=ЅiS] !4d̢CWY[C0p,/^EBIr(0n{dckE*Q>h D{E/-+`Tx܅6mY^?}}u]5fz - x%#b-Tr(U`j+:\h緖Śμt3Ζ\]q, Ӽ3͚Q2u8a$ƭ;*/Q b[L4(AePHMnu}䢇'~WILsFB uPRmD Wy6PC<:+!C]j(@(pY:Zc~f#]Ӹk<7"WcJ,NsuB#?ΧX2|>+|zxQXrϬi}FI'ͥH#‚AhUi.B"P6Zdζ*z?IǧYk }Ld&S~hv&ۉHIUt.F:ļ&zIFaS; ꖵ۶>Fc|{ANIR$Fڲ-`Yj\g6ӐR'r6"jUJrM@C,:(dC]˥N#%|+n(h{+ ?V,i?!M:kCwkCuf"|A⦏-Q nwD; q86 ,6naF{/Ε 5 n &_vFMJJȲo%CtOa/bGMK.\ekG+k˛;O\s)Hwrkx$$RI Y%FP?2c)zʯ4ʰصKʍՎό6c50J4jd! ֪IBeeyȓWt?^I{GEa ±"%Ro,ؔJ1UO^&Z:h 5øPz.|FEoĝjeӏn9y&?*q֢ <OD77=RRu.f8SA4-aclDHwthN}9b*aeNt1e0i0zImVsywl}t;Fg:>xTo&1>(M^ڰrp7RCtqByrAtÑ?XM' Q6K%a˙|r+,8s(G{6$dk'AeZ>;'[,v'c)ẗO%i1\|wf?.Eqs捐-2?,AEzFaCD|$kpX&rfٱ(H*O#;Ϩ梲sN]!D%`Nk=j'#aLSMH5k*%.GK F~Q 9kse'Z/œ 0- R%3UncAlfćD"|2aFrhIe"j)ͲM]m3 #/}\h $UaZp'm/+Fpk@:=3wD'ow$WFu.™Y i*X&\S@%6a$4TdfiOYpD/H1KF'_IFx m#؃9M=2Թ"Ts̢B:qǸX}69u '^sSJf6B ++?:0U&k.jE@ލ=׵?7˰O 9 7&c}O &Y PV\c 3UN\{:*zܰKv79Ww:"t=*?RȖ!RuvuKx =\KaWR=x"7*b`:SI;r9,W xu4hКQ'2Luæu"fZ23nz_ݟ(3Pÿq_aXDNH^֕$| ]҉WUyiٵ,:XwK%7IVB'bIedP9 [Uq p3+(KtBQGutQL~zZFb'$i:N._ d:\V>p~J\c"P͙Fj3cd8d 2a'n! l(sIر۾oM޹iݱOo-naA&1/dX_zotj#ȊٔF j"-cl%Iepȑ'̴JǷ Bޠwt8p]G=:k%|3\_7-JULDDXJڮOīӲ!E9ac#:_lO ׅOb*QG s3j]d ڥk;N-", - #EI&`,<8~?co~#e5_Xxމfq9af40A}2RlOx Œt5vf<=2߬/JK|5׾Ng:=]q¤SP6Ro*#j&݁2Q$ep{¬*+D}+=ʛ5!{ͤ]*S GiJoUB){֋-w!l!=a:PL ߄ Ϯ("%I v,\S!)k4 0{w4OQ Ԯ]mĔiSHck A%w+yDQd@:"P `d"ī6]8`]$掓@AW;8 xf&)bc+&]G2 |[bgm5Ey;2XʿO/"=qmqxZ)92Pb{'MLɤQSr5;YvlOŀ&[vVS\;VXۛt yn/U_c5ӂX]+m1$zTM OGeBɟhG)/MHhcQ;Y ~93IR 6+P|vYcJ*^O/=E ko CSezc*4U,3ُv;(%HcLߖlgFM"S_ }^/jsc `wQEdn3TƯ7Z#E^&]aF1РƈI9h~DBP}I1):M HFF]yh5LEMzo:@ZGNZP!:S mJx.A. ऋe\3~Ӳ’TMe<66 d ?E;N j,tH|}s* 80zQ,b/fU%~ġAjS9ZJ5By4j7ߑz-DcPc( Y H,؍/PL5([`uXi "{jA)vt|- r.zvKb',f7`W88"SvO6e~cס8W})#AT ݢ姖ifM$ G?|ShFjU|}@Y$(K*ܴRݝ.oI5ɠ뗠mf:3lPDG&j^=3Fmj& o/ЪD43^G\;JDicxEw)!=sdN7ӮPlxp*wH=-|^ 'ӔϣkwtꨱScȝIˊ1+8^4]PK:4RnJ&b5‚W_"~0 '6*{t`}zHhF^hN^](aYS ?tu!FZ총?[FZhq*Kqd@ط::WW{ŊdA ءĴk[N\o´4  d[u U V-f51_Q6o9E> ! E_+Oua5x:`>)_l rRVGnX/BPp+FW9L>UT<&j2?~@S *p(6e8cóپ7Gmb4- ؤႮɋ) ĻU2]ofjET E?;,[V=B<IegM̄J[fůzqAIR*wJ:YI_4Wc-XtrA߽d#pMU'JK08&@ըɨ\t#W컠 :tH 00BH74OHN!|)ʚ^haG$L^dC'5)'R)ϡLr-^+T,=C#lGR>,,)g(ڑTVz͠qM(m8?Ȅ JES,WhNf^q~1~(XtAPй7p'H`" hkqK2+\3הc JM{fLJ@l`3a0npY(\HjY(*ǘԵs 1i:- յ@6f/ӏT+X]Xħzj kI'+Qs!h+I)xqw>A,H\I:j!qzAMvBD,ZWC·GY8,c%)]IZ1"MH1fi=f-{ Y`䦻bSڱɽۈ'̈́clmsx#X+[1^9O/͕BYtD `٬g#\ !mbྲZ H ]ZE-~td`T7Wkkq3m!1LV)(D~Q~ďa63LvvpD΂nT Mn{ٷIƅʙ p$Dj$<-Y&5[۱$ TT?䭜ҫ! {˦Rv3 & “0$ O'F( |,/Zi?ӖҮTܦ%s>ϪXtF՚21c+TB~x, %_fR|==kIFd)+̴jgre4h)M*5^#5j9-5s-q>rA_XG qo^U9ɍ%z( 5j@ED,N8%*bʤ{)`z|g^5\:m"U<= 5?30u崉oc3afqW7Dp%}#ˈtnZ=Ї(TM{NWsf6bɅf2τ`b^(V5Wo  {`DRݝmF~ՍUOq{XZbxT9K0U :Ğ]Un~nQyEIf,Q)$H1M@jl"<oWؚÜ>|l߲pc 9܎ uw3?-Tci+}%]';pKgB | C ̞=9=a/IlȄ[e?sթE fRx 7N򙂄auGiipP %z/'*Rτ|q ^+O| PEᒪBN=E .8\.ۀ'^A~7?K+)zZ_$4(PvuuD8#<{k*h+Gw潧tц0M[>3&iU QHnW\ k(YJ5]EM8lq_ʾsW#Ip4m`ōJ~B`~ɇE۾vUg|W"`iÏY1R"f"H9 :/8L"kcݣm.URz]@/l$N|Rf%c罭-C>1Lbw ykl)Rs /Ja7 ϙB&@ _b>I-b4w۷Bww9bw_oHH#>ޝs C =qHҿǢ؝8!-.d(_X_ d\F6 k]R"W[x̂@PC)~6iJ9Uަ,c $eI<[XԘ 7 [۞Ka xR6Bu*ï-#9=u'c UrbuɗA(yYlIKѨN(-eW[gV b4']' #MRB$/JFҧn:At%^'G-z-֠kЧz}1X> Cw+18*0QW=aFlZ5JҎ[қ~/Q]qΓ+8 =/ )BYOII * ~xfhcESX'rRdSoD@N>Z9>T/0 =6T.Uz^ D$KDK;}{,]T46U"R3֗oRQiAm"r,ұ~V }TY=/W)7930]>UzT_# =Xz&l\Ӭ%z*zm)ԑS{0hw#HV'>hPì(Ȇ퀫wEB^ּMr*){VkdPMlaslSSBF.7VtӪ%68ŃMj`5Ǟ!pu_+.1lp@c &7PP(&lhmNKkfXOJ]eȋ0AѪ~IgֈmrlvHs՚kix?|Ϛ?HhN]zq4&S * Kg/E~vBW9"DM\=j`DB[nI)i.JwSMwY*BE`@dIvrS2sFUt}f=<Qپ?WnPĈahh#]sŋnA@Qjnz*v(14*<< s{t#y?'NnN$ֆ|17#(!Jck"E67yFɁ鴁@i\E TuP"s{yIh#:bəP(+WFvqznD+)\O(@d;{JoX5&Gx7"U**(SI8}f^Yw$0iH^1%Y1Lk %դ/{fܯJ`87W ]km ;[d7%c RٍrF]uwWs,,i _V_33^D<92.{#z ,#t9 vz/Q5!f]|Pnۙ&eA*HDr**I+?O}f"='ҳ+;ҕ:-RsƮ F}k^F\3/Upf"rʋh&ks "Wce̕Q,Ȇ"$TQzn߰"5'٭]p Y==,O8yl^6u/:62Q>Љ7C/_<8?3WGf&gTG"seZ ֣ H!aQK=' Z=GL:!\rr ܁-|(欓 -6~Y҃{0=>i]e'P.N7W>f'jXJBNg@8LF|f O2CLG, An-it|Iv-R΂@}1C%Ю,-ҋO-/&uQ^s71V2^d*଑jIJ[1-lW)0yk~ku QwΕZY-x_f7 )ZAUuTL:;>twAγ?;~X=e=.cH{I$vkij;6KxqOWƓ'd5Ws[3uݲ;[Q-]&JsBU{JP]u~:7]ً|[K9^浪rN+\YM[6D O5ʽF0[z̔p~2nEtn!B wxOV9WoH,pop@ZԚ(H-<:廣׼TM<>##ۃjoA1eڊ\ѠCaCf,K FI(S7/)-Q$G^d1+{ȱ̳7r%I[d$!mت/sMUװ.R a"̳C?bH^pI#́ȺжdmN6+~D+ [hػArLbyH!։YXН̭%c:~k!7nJ 3~0 [֡7g=:7ĐyIM4iKlM$LBu_U3&.VZW!XPqC4(/Fb]~ԓ'8YFZ?& i٬>ƨ)6If Ĥ7px ,3 Yy[/ؓŸѰA/`pБ>D@, 3B…G{$M'pE7-%UxԸ]U])O; gb2(WTSv?KK܅dž'.b H0 E41iHOŊbnFQ6"@JGWUTXLW90ҊӦUc\6ԙ0'7kK}~0iYrv8HQTSCp!Z 0tĚ9n6iaг|7S#zy hZҰZIð:l>AxHɴlAdn9dSI'} (p7R V 5ʜ@krY7^ٙ[Ay]g2M0,IRdqv_=Oɚ5P,6.p‘bQE30+ɞk\!rQt67ROs-9v HH? l]a~.8vO'ęX. NZ$CWP$U?K/r}\]mX)O祝c y3@C~5df \-WPWV 6\cTepTEAegޞ^ ոJl99~QPHpSR_+܊2 vI}L8aNo6X1krJj괕ؚ)%1"a)I YeSAj(k~ӽ<α[p) MDp7*aY1 `@|lQ(2o1١R K59S]W+ФR\U -;!0*􁍵Y߃ ב M0Xf`RM슃 Mt,9 H%I3Go+MehĴ܄y)QȮS.GYe7(VQOPv5py^(v G-Ƞ#fom T^B~g5}0i56 cߐ2ǝc0y('p=J+;S2xand^/ǵ&pR'cJ ĢO=:j mbT?gH{.[ ;lhB[y8_q,őE#kHTAs0AC:s0Lb?0{"G%"NB#2xZȡG,zE*M-N?U.Jswj4?e =-dSy7ѵz< =d_l\2^!j.^r4k߯SPBP68{}4S C| ^ޮƍm)PPh5tɏUg6" GqȮM)K-x2d/5'-P8)F&M9"r' ɔb5\$[CďvLYӘ]u'j^>1!Q&'m0;TĹnOg"'F}Huͱ 苗8CJ+VZ;ڿʛ˦ x{J)N|3'^yW:=vV^H[e EYo9*!Kzd^:`Cl=(NMDbI&v~ I%DB.%pkMw[9Hj|MoT& ~{XhÖ/84mj=Ke} j/ts=9M!EEFo3鼶oV `ܙܟ].wj."U@4WꃋV0я!c YJ'9$S7!-owZ\;͹X 3ekd gŸҏ3s$mQdfl]sg=wliQi"vջ OCJEB%H|x\%w%lw` "߇Xp"Pɏ KsPT l@o EaDJYo`Du:%MkOWjMNV Rr>8~vDŽ7bqR, ԉX^V?czFدi.SC_LsgU$Kq2 Ic'YjuZ<ȏ̓8BKW=(%Ͳۤ:܇el,1/ߊx63bgL/y"sv[G=1)Y>0 ~\T0h+%PxSq"DŽE`lXfyWȒ߻Jr17фq#2~y/ RsRQWT"~ ˌwY1}z} !YՈ_ z׹n/vv3VNlQ"0%#<-%ȂF2h(r,9Pj#eׂvt Bm`NA=6ށ:k Ǚ.cQUa.Gٺe#G=qi,B=v0ywsKi[K*΂u*sؒHiΪr 3~䯶`^!;=Gl9LF{nt5eHvj 4ҵ(ٻЕ+^J~ׇo]JA1X"Uw]lY.rY?[D?K_{3Ҵ&0S Ԛ1õhZК&Z.\`v3Ǧ!ጝåy{6;$L>tҒ{'xJ p(ۜ%r .BV%ڞOޝRcWVP;Fn;";708սrRꞄu:pčdկIC_#DPK =U;}(dM+A\LrD}>% 1:+׍N=E6=[~yI-)E1[At:n,du>g\Ūg4-6g5rvt AڢZeQ-?fb#]da[ SQGTUBF [tr+]ͦHh? 2!FSu(#=o"V$Yb[[GiAPя)R_#3=G y COOz<ȴ*^$'h$|TIV< Rg$=iiRtA~VK}I~;Q)dQsd&xaQD6vHÛ^hga<Ƈ r=}`)p 2 M+/4gb:=:TVW;w3䎬P A+ʡܠx2QTĶ_H7k\`.ı0<[Oj<!&?43S>~3ʹsÌ kE|*!'fd˜I|68()b)J>ȷ65S UbV(gҳvܧE޷S UTKa ( n*0gF\s6gdFyC5 ͤ&K?JNk7ڴsl4H M0ˏ 8@" FYeb*$gJMzP`v;SpR4#]̲7ʓ-x'ԙ[ JL8!@c^GAP٢aGn@)K>gPE_{>.3ooX5NwWnHo?ҳ׷E3Dr\A;t )P @?#eW2#8[L44Q.@A HćYM).B@zH67g1}[l2$"!rUI+W5/)C2u@EMe>0 U7&B8! 2}7Dp#['*!+}#{S&ݫ'\;o'( GW#=ЙwIx8ب/ ӏR@UṄ K P Y`ʚ~3`lThӆTe8 ևz]64vLi3@=ֲF@Q,t3i[Qkw3.@NhFle!geQ$0gs<N3"V:h{Y#ԣH<2e  !\b礇0lL N?*LQhuGїaDC$-7/k^fifͰA~K;,{{B?pۢ.Z/HMHC8/r3k\=p;S2O:%Ax! +sٌ /CIߪ $Ɗw6$(ÐRXf.0Hz3E%0Vb\S鵘LM3KI֎ja +˲ ؿf#@W͜R4H::,ʆjH3>~}p*a,'0"CG,MI*j'?V5 Fe3\X]t>@TDZ@ !ri^Be FW&%$EUe&}8qO2HA{-#",$ѷ=VO*=8y9M!@G9|>cPOz*k.诘eKrO&G25cK#1|@z:ꩆ L(i*ygX  :Րuଚ䪴h&-b Oqit ,<šIp3=X˔'fν|Tu˭F'R>-%P`!eگ,F90/0 AK[(zWyQhW`0BIů7%Sk$9f_sC G5Ǘ\7-r`<5ǜ@1AĹlVVePR JEpK8ͽc[ɠk]uf)SMDl Gv A>,hCS(`oQAI Zz$eݜA/ӂ9(PwIi k,3aNw*(e)b+¸ '3k[4@,t *ۡAE R^o@@ =Cv"-F Ēz5ޥ[QMd !xC锇· )?&(w? Q*  nX,1C5*0Tln(%]7,Dopw~N3/]T }ɿ7xjv3>*&N-3 mIڼf׷<7b)h,n_'rR* ʐ{`=iϜ^2MR̗<]Z4%B.WS,^]x3[|V~%I݌RF>爕Q~&k&=-\ ??@𑚆Cr`Atԙ ég4c=%j=% ~#|}^$K,~F(<OL3ՁBˑ$kBb٦$Y" Z : ?VlE߹,/) Tb%lw7(~@ Lx(]BZZ,z_^ޢ߸)7("#Gdm02q*i\-ۿY(.q0;%Y[_چdEk6&SeCIBkB%=޹3?mTŽIC,ŢŏQ Z&*zGG~->;;On ^ 56ؠC= F\VL[%.0qϲ߆p)"˧֊ lKy6#n|zW,ٰ2b(|a?M7a߿T!ˎ._ļ)(P{(][zM۠u^_qsͲIGc:P 'n<.!ƙpڄۢ٥E=%ڥiJ"IİDe?!d d\㾯`D%ue3҉*&d"f&aV=ߟԆԞjp 1Y"P!ry a0!磝(Qew Z?Bv.8@-p=S*s >#͂"8^#s06D+d '1rb57ܡ,P]ӶN,jJ a,W)pb-گ: :~H?K?[v.U6P)d"cK#wxF/k em ]"E1K"JZpu7eCVB zA7"? /531 lV%">9$%ߗJ}mpbN.Jt?:s BwjAlD*#./(7T//H24:MϿ.;^syDh#}^~t`iZY@lj/zvQ-[CVN1rC|޶n%@OgbHL2:?Du\= &t qjb׼Z2)D ηk ՘edu#(3tϱ[梈QwS` xZբoHB#'{rM>KDS9GWŒPJ8 2!l&N,qybNl/D-+a' JC[b*> U4QXE;U_d$\ :Hp% ;&J)\_,[P1G3KgNЁs!Pp\ 09)2oMSkMJ_xC23CE":2HRhOoWy'M)"/xq;e.ѽVfdӳ7TF-N+I5UFp Ӹ Vs 9|g7 ڸSU $p&:UVC:/`DBG&*lܵK)~C ,Zl.='^P)Be@F ɛH@1m (RE1@La CHfeLВ)ɲW691סO`K<:I\ Yt[ i GDwTߨ^M؈y6;~r%D\ ѳ=V 3NiX-w'wH}Hꉥ5&E YW:1)%1nӨT7Hwc7v,X9|RqFT]q:hN'Ȍ Xu|[JPF?Y]Dj')#?[-GڇC h$iq"QE6ȨƸ@ 0%ËP< }(+EF+`8B@?j$Rfl x/D)վ73I >0c5#o?p̳P燅d>)ݸ8ײYv)>4Mrx%o3&M=agp;2ǢYG2ݣdS!7Ļ*ѠΤ×鮕O0.84+6B1dλ#`،T0Y#,Qiڢȩ1s7BGQR:k>>@f& H E.5Ek7:<-w@}\# .ti Mf"F>6"}'%!]Wr3n&Qؤ>Fl&P=E&q̄a֌/:0ld+[C{p~$bS$E'U( +>-]9QQ"=1*+Vr *Uۣ8V 䈥?B)Dį7EJ@AK4k!]ѓ3 qٴfZޏnk[9E([]h" L[+ֱ]f:7M%n9`OF $'..GTp.q8f<$j_RLNiF؛N_ME$POU^Q83>٨SIa6:`9,ṔUⰅ]5IjnBj9$P1(nV,^ܑC)ыi,bP°=?t%ovCOT:ΧǮ4'l!x I x-R#a^E84> 4\ W5z Ow$1٣`k . MÔ")%iؽLr ;ZXqnK[9Sީ׋->:/OъL!f yM|7I@U ɁT >9WO& ݼ1 L#`f.”G8i+ȩzdJ 7[(vh5xK.Kւi+SIW'u 7nC yQhWG*D*<-Kd>ߑOsoundconverter-4.0.5/tests/test data/no tags/no-tags.mp3000066400000000000000000000314471460501237000231460ustar00rootroot00000000000000Xing(3'!!(((..44499@@@FFKKKRRXXX]]dddjjpppuu|||PLAME3.100 $|A3's_{ C010&Lq<!92snvb%]mEL;^ eUv]@Q‘ $+P 'E cHŬ"Lk09m̎Y1CI*_@{ 96*D\!$FQ"I"fŇ ӄ E`Y&MJj58V610/94CE0rMQ')>]<ɖ7,dԚI#j'-3c̳]f慤cr`N{Mӭ 頿Q]˹dHH =aU8Ux4:1+'̎x6RR5|UU}D<"4`AAdHcsTqȨY1Z"M55415C&&2YV@ZI1d MRE`[K N_~$KDq/ 4oH=G 2WTwߺuQاP^(hvWwmYc5hvNªʢkn5y6H:ۺv["I"CRcAY.XyEF f((kޒBD #fntPBI IpmkTĦPR\C@p p XkϬйv,weyfjv:˧fKL p`ڈUP`PKm;<`Tiі(&@t'I+H<ѕYso2yG5&\_/Cs? C'eYw`(+0}Ϯw߫bߝjZe['چe8@:hH"8ud+w=4*Փcy% )(q  . % ) g`:\DYeRS&v"Y=mk_}';^8c;DO"g.+U*1`i%fJm 8g8TfW iaHB0ҨhlXC?◎w/6p$oB0p}V"؇B#dF]*Voyy4׺ov7λ/]krj *MUۚvi,d\-\/<$ :4 Z}|0N-0C ABT ILjE3pHFx(hDx+0aTWRqa$?uN.Y6g|ܕ묪x&I Ds/2Cyc vsj3xkx.8!fnS5DhQĚ+9 wHbPUNyh`xہq09!7%`rk"Φ~ᵥ~}LmI VՍλ˪uMSС,Dh_ ,  c!v dz Oj ɴxL6]xEpsJ1(p}Yd}D{y = P`o/`Z{cm/>nv̩u8REAI@ R? Cddo Vh*2rM6axbX̮Ԡ>/’CsfQT9Zt66G?269MILb»u?q$o_}T:WD 8E.1~QN9H mD)!VAFN 7^xChRFl-%7`Ӄ$qB}>Z{lK?6#,gR^IØ+.}w}Py){Ot4FG@ݭ˫vJHDi!GH6PTԚJY k/4]'z~ӎ4)[9p% SFP Z0qR\ݺ%DWBeY aU:Gƅ%`ApsSI,{PHD>D5*L\yeEөƚ$MS"8J "æJ)YIkOp0kJ,&p}i@( -etɖmr$d5B&|; ϝ0 sb6>DN_س!7]A_z9,dʪ?H!ز0?IQS/$We xP*!8 U]FJ$J9m;%|e@~mN :a~rg#d՛rK[5-ot}Y)A^&ƒ%+҆B 8ȧwLyлiJ-Ca<`D)ngp50p3}ռVr4ቀ명(J V!!CY̕b̪ۚ5./2RL.I!@N|&(̺Tr6 zp ̰6PhyLL&26gP4iEQHUslEKgNNO^-_z`уq(} .?5D!Ʒjg ݘjW>{6rԳf[#d8Xj! cM-W!r18 s XYDEy"X( "~i]m8'6JJU盌;U1 Jt=\jL`t̻7 "`"a!k@.7RC@ZAK˻fWhAAqIZ!RV: @GэoJ 0^O6p1$oB-}1 z?hLz|(cjG %!ȱ5Oneu:3%ϰ*~~eVc|BYϺ[#qR #H8 !He;O)p|Dƈ|P4aD R^I⢽gei|kXGF=V6TB "DW:Q5P_ұWٹY0ή($P:4 pa4頻K5/n"8F伧Ǜ^!SؔJݫp $o'9p} HHgY#S''-dA 9b]$&6|"jޭl&v;1ژV8DD˜S &OJ, ]NjTՌ" X]3QM%[w(lytjv6E?XI#UWݿd ˒ y]/EAjO^p.f!Y›DZTcPՙBrX8.Q*J\J ` H2cQ$uj>3&<5V<*[`$΂!𽄙Ʌ&|=Ĵ2Lkl>{Gy}BnW蛍ز>սxƍ)ժݼ{IV8(8HF"=+ǑtQ l0$6hUU=tHJ:7DpL0<2p='Mo~yJvgǑD./'Ehv-܂L3}Z7s͹eKjDE@ȾB0Td]5֜'GQ5(>~qt\y|ڋY{"] #fP4̋" 9mm \;UWNQ2./pEۺ^~?]fmúm$A.hHpFطB֗iܘstm_֚E"#P%Y8,g%ss™5Xl1p2+'jdJ`s 𽇥a5ܘ3B#!o3s!߭zv>Ib8)ȊvII H`TH JDԶ=f:p<$HVIֽ7z#==#%b&eU5!BѳVCA_@$ Ԉr}5Qg?PdE޵wkm{?:a6aֶ$T X6|Xw@5ɇ$<O)Ӝҏ'1)p{0m20}CPk{6PDŽbG"01D)!q!Kt!۪F r8F|tV\,]!I۳g*vGD8RT-N`3Yk\_:-4Ș4@2UHHrŸ9XCfRKw ǟp?60?xζ [}s1$))OXqO?tSkI'obds3'δ`n #X]|Utjk=Bpis /0}a)4BjO=(}YZ9=tz潏{Zr=~ͼV$U3 YZ [U5XדT;0d+ص57O+2 薙 zPDbb#&L3b3wl+TݫfI B$Ds3 .&ų!"MC}&=ԗI_ULBm$HƺغrnmJrWy`Bѥꮩu i(;V%= ǝ6[P-vgl،| O `|Ńp,})>93-X @#STu2i?Ob&mGoˋTz/J„U7ubh42h=(|u).:JA^ىQ]AF5$B /M4?mL5'>_ټ;ll=p(A47|6aTû$N@4&$ddJl  Dd{&p s (} F&QĕM]NKQԤ;TLw 1LΝnYȑ>CN#,,yR;f$2oNElCP}mN ~*ۼڧe8HXP! /0e\o׭'C1 p/5QFTfON;&RxE+ϔrqL%*کk"IEyE]xV4*E4pr#P%X,gNSLbp0 M2p=wV5HPL`TqQ T>u*ىwlnۙt\a/?lS/!z:[?՝eQ%RzdZ$ NS4BuP4HI)~Ucah3L DjDQűcj7,tRbغ4)yI~׭;ɮ ±C"V&22g6<Ĵ>U8yz9gisME2$.i> @@:f)+'UPC\$TpHkPP.% $EV><ԍ`Os 00}Y`)hQ#w$"#uMd;Kwje-$M2HܛvW"mi0I U&ϗ! a3.du]& є Dlq(&̋:myG'F_dAG&+KfQғ.2LAC8&@GP32ʳNh#Bp]ӥKk-4}ammԖ-Z](dL~o#2Fή 3Rc1^{WsȗPNTZD#TKKp_P%rY?}쁖I'HѥDzg9m٨mjq2#]`G0k0}|؊]WB/]5몫mW0nʮ;A6f?·ռʻtFe(B!_+>Čɦ_0IlЮX+w98!l Sr30EQH*ą 66,ѥUD{~D)7&EoTe甯b׽O;[K웸dHAbݎ"ˀ[d[zc0ʛ⡜ bPMTCppu <0} ᤴmYuew"UrII)m(|Z!xKnZ1 3~ly5Y`/̏"?. ވΝuVlʪuFHHq-"܀J QOf*O$8aٚ"HQ IHz H7Ve1\M-pL\^1SaexPlM3}'-/sf//]/9ʨue *bK!!!H@TI$T d#*kh#f'-TJhlp1;0m:/}ťnyɭBaBυr3ԌSF=!71HJ0I z^ߞC;˷dHe"$!:FR%߶+2t<,B0o( EQ Qic ȪuĦŕ\;Waea^,!@qWw0OxmCtT8Ʊ8A*iIcUZҭ`_1J{oΕ/{'=W[UYrF@|F,nJPLr?ꄽlW.]P­ەk]\8e]mmV ,߰m~.`$o(!}(&PqRr4Hz}cfВ_pg2Y>v"O؊ 79\/S_bV߅U[dM"vU1 -*&2gBY~uyJ[e4V:̤.DФ2#*Reܳ6u!F`P A"2@U*X T1b&bL4Rm91w02I$H(Timp-Հ,|dp]QqW-} 0$6/@tdZ2}fIQZ-)fFmUʝ=__V{e?%m>THu(?z{=Sɡ5K#N˺v5M@E qLTsmv(2;ۛUVR؉:Mݸ%/|ܾc_Vֵ6Kvk;MO WaO1 }t[-DȩLMIieX(,+`QZ7HZ)@tL@D@Ѥ ,$p$qB#} ,ĠL@60`1עXW*i,@TL4e- Kp(L#lp#٧V)nrzKmF#4c' b\`. e@wfC"`dS&af?Do=8]ܤTV^{ wc=U e0GpfQF0`NNBFa|f$Z!la|)f `bN= ᛗ0sήg?Ĉ$%l}2|ĐrF\pz l@(ÄJ -<&Ul@K`kWfXT0"75\_;J5:LAME3.10004soundconverter-4.0.5/tests/test data/no tags/no-tags.ogg000066400000000000000000000360251460501237000232200ustar00rootroot00000000000000OggS N&lVvorbisDwOggS N/a\Dvorbis4Xiph.Org libVorbis I 20200704 (Reducing Environment)vorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s NnD=C =(X`XojVUhX ŨW%P8bA0LjHY b D{|2n =ujRޝ+p1_D*2":)wsI%ZYހ|6,iTcşiMlgwSyGϣRram1unK".FslRac`[φY_"ׯo иt&;ƙ9t|PCĒ8<VHaӟ@.*ɧG_ *R#lB1QZCX 3\lUd\X0Z Jc"3cLg>ry="[vUlG"T\3 DIėϓ"rmNG#/MՅC .7Y*K..A7Bhj_G CneSG$";c`0XZ AL8Mzww9Û~S$%U}罚[Cm׬:9\L#?tNS.)݄Ҝlfy{{乼@d7º w[j\-˼Llq܀- Mmoa1jQ .(fG>#.} ɭ95@k)2'p = "30+>xQaP0lڬ=R:hhj%p* fnqÿ>ZΓ6G3,*3D{b?<ߛeE?Cgmzʌ歃K+YDiy5#Y&iĠ1!+l_,T=\.+*8t9urۛ1W/Åzj2.δJ;.)H;'nn y,9`059*)TZ')sErmRFNcu͒‰8Wśkuw# D\,V(zPZf¼Ob6*=&z㳗wV٩aܩP H$dMRjt1e78$8ѵ8W[Pi}łx8EU:Ep )SɾCKߛZ4fU5w1qpkϔ6^]<ő+U5z$ *ek@G.ٱf1kj~Im7ʤ(>Zp4`ďE,Y{Zs =o[Wm1.j$?)2vE`s{h!Jfz(VtMաS|hr^$Ck37<Rxuv+JE>%H:I/^tF.&06)Tv|Bfʼnm MmCNA=+Ĩ KJa(~+ZJ(i]m_Ӏ_) k8sJ(@ lXc%GWrNVLݗ׿ϱ3?4aKȔl%uӟ|W6`#ڋij3.Nʊ٪(??SVLV9j,r]uX،ĂvL dN~5JO~kLg]?mƹt)|ӵ%X7.qorjg:B,"%\y*Nk`)~o0)tfK$#ƒ!Z}4|6zL]fqs[!s'=+5 2)h+94Wr2eQP&b:#!Z?tm^Fƾc MJX"`-@$ji dD+UiZHK| IB7Y* 9Mx{Bj3hֆK{a/zL/g͚aA6Z85ySZJ{^r{/2lrS7|ߚpo`挭m+(׈/9vؽ.ZF>M޷prL+l[60Ha]FS|_O=P7RHnLG7SoxCXF5 1\F~-87Uo h 7LȌFJK\աt/UG:ZH8 `ۛ|cWbf~qkֽx|4l/zP*hf|l;+mErzAWBwT Lo.RPϒʕ/- J;cOlk,>$"cG^ܓVs|8<jzHD\ҎnE&,~ZpV<&lc_I~{gg}W~v4O™13Y>Ef#΃^ǵ0vHfZݱ[h"壕s-5[GxDB?Gu0d!g.F: ]ɕʎE(|2Io^+k/cR{`bTG8Æ \7B¼BQ>.hn0B/Е˸j⋌E|yNxV4d1q ~B*,{ӱ)&t o_AOggS N?Jt J(3jm[j${~(ʙWߥsg_?qhwA-ޞd}՚+\> 73\>\Bt???RxwvW賃?/qŮŵ^0t"XRtM)9a I)9W8ۃ'M/In- *z9Pp{<^FDȫF2pN q1| ^l` $ªOi+bis-=&>Z(mN&` J|碬/ױ́[8=ϐmz'I#0Lv}xWz"-@Z+!mZjꮟbp&ȏߔ}lQ^d+,ӌ?vV0N/ {g _*E!9.{1IێGGDOԓC~$h6;ĺ ELP{F5sr,rh n>Zp +-W8_)sシ<»f&'OI ]UKsoNS}eE} AIV\Ͳhz몗H\ʳ+{-~ַX Ϳ  jQueɨ#z4a"C-+3JQdP'g\0gl[2VҾI=Lñ5@=hw慯LCwPa5ߡ:#+Tj^Zp"UDk2r3~m7GMvz~W$|`$7ƦS ktه Dqjk#sxWT|xiK̵SR"0oi7h ̚hr-T6_ta0G.[9kI~G,G1Qԋ!0۳8msĹ0%MJPIJV =@o:%~rɖ+y5_X=`wi/Rd*P7Zp <<ͤӹ BqZ$a1E$9Ǎ6*֑!NR chNj\UJ/iGyƢ|Վy!5ͥ<j:W] ?\9=A?'7mZ0̺"|Eo^+L'ާg|3!' bIYa+"J>JB4AJ І۱4[JخY<ʚ>8Lgl-@/ EpFG1%Q uE0 ݝ7u`<D3I|[.TR3e<2h=!heH(աDR!ELbd[{iGVi"fL%/W'Z S%%IϚ6- {Q99œE+?foί:t<3}D-Ei ~Jp=w]*9'[vqƺ{}g?[M5УziI{K:L3PNٗ7z /ۅ`[=+\'XAjcneY`hmsOgM=+2DBkHJeZ|m-Y#qfX,XŎV~DK6"1X9"iDzJ ({6n~r)Qi{IU& ~Zp97,iirULbyZqLJ/]ɟr2;œ^͗d3M)Xu%PKwfEk@j9:qR]ZJ1;7L $`cqO y', QK,X*!ZҒUmF*'';-OAQJ4K2inE0(mLTSM.f]pݷ"aIVTVY^Zp?FNVdY6q⌍ݓdnۃ7'6ZVE1:'1ކfu/uG4'иtD#)~93gEZ0=˦S-ۛHP$/3ц~o.jB8~եqxp %$-F+?k#w 77ǯTZW9N!#Cx!<.)9NaN%$OJLWdƴ7cUV4yq&?}vN-éqޑÎkHIf03H+ZaaT [0GˋF_xoZ&yxo;c;һ"\Qo*ӟ >5ij${(TJ9yQw]v뜽V{ Wi5uV&e0_9V.z%w gܙL\ca_J-mq껫&&oϚ'3'fd]qt\[\,*iRW~gyCIudM G3d}`r_ɛmxZb84\ƪ6d{λoM({l:ɼr3e~YI9d`)D7t`Pe~(\-0Ǣ[KoBEeÚN _)ϳQ+Z~R)QSE 8>v>᫹)dM A$1)XD},i\nDv[W.̉w-߆g9rNr;eKʹ'TP:ԋ]ŷi{)..`[bm ZrmcT%0U~o;3g/gLi/}ܘ3Nd~/q͆n~wƐ!LTnx^cS";jb:(CphDM~#Z2GQy. ]nL %ZBL(9eV/v*#r9|[ o3:z +ӛh tJ$AF=s咘5@lR5;Dz2tOggSD N #>;?=;=go Xz.(CBŧ.wM5̛QG/w'~$;a}&uBHWݷbe{2Iuƌ*d$ |(ȩ],IroGi~ZP+e{+$+.9t$~2rσNl3Z΃qge(27GLh!qx5v;Xddw|Ndiݠ% mpLU0$gWbRH&؅ޮ}EͶJH,py̆"7eszJЇj~$7Vx~ Q4[[{Z_&{^k2RؽqD1pC[)tKBoqG a ԧ.:Zh8D/^&mV.C/\{R>Okqk0n]++Ǻjh 蛔^A-˓]p#mv&kEn̍_<ry53AkQs'A]8bw{*0zSIϧС%ȯ\h# z{D fۻ߰-O^xo ucA[yJT$H2'1=&oͥa𪄱 VY$d ta\1&ā +t171Aߝ[a2adQchMj}歷5}4L)Qp=ZS&x치}<|j2iL3ϝBm8e!8Þ)5HqQwuXtD|_fyh]UBgF$’[jtX^,ܗT hutJLFh/ 9tb J\&~M6;a_+ (h/Ncɀ;L0ADw!@ŠfR6\\L?ꖱhCy_}Le74Brq̙_K`_AUy!uTϰ"K46_zaVlk' Xo bQ;Jd6's+&6?+~Ro_VǚwTQP#T jjGֵCF 5Ŷݙk)C/VI{]8' hC :ݘѶL/E5}ח/z!mԴM,TٗO+ c!y:LkYM3xiu)^ZT{mĬUvdH择3u-;͛?K { "ܲo^Jh/+߯yOsoundconverter-4.0.5/tests/test.py000066400000000000000000000026411460501237000172740ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- """Sets up soundconverter for the tests and runs them.""" import sys import unittest import gi gi.require_version('GstPbutils', '1.0') gi.require_version('Gst', '1.0') gi.require_version('Gtk', '3.0') from gi.repository import Gst, Gio, Gtk args = Gst.init(sys.argv) from soundconverter.util.settings import set_gio_settings from soundconverter.interface.mainloop import gtk_iteration # don't overwrite the users settings during tests backend = Gio.memory_settings_backend_new() gio_settings = Gio.Settings.new_with_backend('org.soundconverter', backend) set_gio_settings(gio_settings) # tests will control gtk main iterations for the ui Gtk.main = gtk_iteration Gtk.main_quit = lambda: None if __name__ == "__main__": modules = args[1:] # discoverer is really convenient, but it can't find a specific test # in all of the available tests like unittest.main() does..., # so provide both options. if len(modules) > 0: # for example `python3 tests/test.py discoverer.DiscovererTest.test_read_tags` testsuite = unittest.defaultTestLoader.loadTestsFromNames( ['testcases.{}'.format(module) for module in modules] ) else: # run all tests by default testsuite = unittest.defaultTestLoader.discover( 'testcases', pattern='*.py' ) testrunner = unittest.TextTestRunner(verbosity=2).run(testsuite) soundconverter-4.0.5/tests/testcases/000077500000000000000000000000001460501237000177365ustar00rootroot00000000000000soundconverter-4.0.5/tests/testcases/__init__.py000066400000000000000000000000001460501237000220350ustar00rootroot00000000000000soundconverter-4.0.5/tests/testcases/batch.py000066400000000000000000000325131460501237000213750ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import os import unittest import urllib.parse from soundconverter.interface.batch import prepare_files_list, \ validate_args, use_memory_gsettings from soundconverter.util.settings import settings, get_gio_settings from soundconverter.util.fileoperations import vfs_exists cwd = os.getcwd() class BatchUtils(unittest.TestCase): def setUp(self): self.maxDiff = None def tearDown(self): # tests may change the cwd os.chdir(cwd) def test_prepare_files_list(self): settings['recursive'] = True parsed_files, subdirectories = prepare_files_list(['tests/test data/audio/b/']) self.assertListEqual( parsed_files, ['file://' + os.path.realpath('tests/test%20data/audio/b/c.mp3')] ) self.assertListEqual( subdirectories, ['b/'] ) def test_prepare_files_list_nonrecursive(self): settings['recursive'] = False parsed_files, subdirectories = prepare_files_list(['tests/test data/audio/b/']) self.assertEqual(len(parsed_files), 0) self.assertEqual(len(subdirectories), 0) def test_prepare_files_list_multiple(self): settings['recursive'] = True parsed_files, subdirectories = prepare_files_list(['tests/test data/audio/']) self.assertEqual(len(parsed_files), 3) self.assertIn('file://' + os.path.realpath('tests/test%20data/audio/b/c.mp3'), parsed_files) self.assertIn('file://' + os.path.realpath('tests/test%20data/audio/a.wav'), parsed_files) self.assertIn('file://' + urllib.parse.quote(os.path.realpath('tests/test data/audio/strângë chàrs фズ.wav')), parsed_files) self.assertEqual(len(subdirectories), 3) self.assertIn('audio/b/', subdirectories) self.assertIn('audio/', subdirectories) self.assertIn('audio/', subdirectories) def test_two_dirs(self): settings['recursive'] = True parsed_files, subdirectories = prepare_files_list([ 'tests/test data/audio/', 'tests/test data/empty/' ]) expected_files = [ 'file://' + os.path.realpath('tests/test%20data/audio/b/c.mp3'), 'file://' + os.path.realpath('tests/test%20data/audio/a.wav'), 'file://' + urllib.parse.quote(os.path.realpath('tests/test data/audio/strângë chàrs фズ.wav')), 'file://' + os.path.realpath('tests/test%20data/empty/a'), 'file://' + os.path.realpath('tests/test%20data/empty/b/c') ] for expected_file in expected_files: # make sure expected_files are correctly written self.assertTrue( vfs_exists(expected_file), 'expected {} to exist'.format(expected_file) ) expected_files.sort() parsed_files.sort() self.assertEqual(parsed_files, expected_files) expected_dirs = [ 'audio/b/', 'audio/', 'audio/', 'empty/', 'empty/b/' ] expected_dirs.sort() subdirectories.sort() self.assertEqual(subdirectories, expected_dirs) def test_single_dir_depth_input(self): settings['recursive'] = True os.chdir('tests') # at some point this did not work, keep this spec even if it doesn't # appear to add value over the other tests parsed_files, subdirectories = prepare_files_list(['test data']) expected_files = [ 'file://' + os.path.realpath('test%20data/audio/b/c.mp3'), 'file://' + os.path.realpath('test%20data/audio/a.wav'), 'file://' + urllib.parse.quote(os.path.realpath('test data/audio/strângë chàrs фズ.wav')), 'file://' + os.path.realpath('test%20data/empty/a'), 'file://' + os.path.realpath('test%20data/empty/b/c'), 'file://' + os.path.realpath('test%20data/image.jpg'), 'file://' + os.path.realpath('test%20data/a.iso'), 'file://' + os.path.realpath('test%20data/no%20tags/no-tags.mp3'), 'file://' + os.path.realpath('test%20data/no%20tags/no-tags.ogg'), 'file://' + os.path.realpath('test%20data/no%20tags/no-tags.flac'), ] for expected_file in expected_files: # make sure expected_files are correctly written self.assertTrue( vfs_exists(expected_file), 'expected {} to exist'.format(expected_file) ) expected_files.sort() parsed_files.sort() self.assertEqual(parsed_files, expected_files) expected_dirs = [ 'test data/audio/b/', 'test data/audio/', 'test data/audio/', # duplicate, because there are two files in there 'test data/empty/', 'test data/empty/b/', 'test data/', 'test data/', 'test data/no tags/', 'test data/no tags/', 'test data/no tags/' ] expected_dirs.sort() subdirectories.sort() self.assertEqual(subdirectories, expected_dirs) def test_absolute(self): settings['recursive'] = True parsed_files, subdirectories = prepare_files_list([os.path.realpath('tests/test data')]) expected_files = [ 'file://' + os.path.realpath('tests/test%20data/audio/b/c.mp3'), 'file://' + os.path.realpath('tests/test%20data/audio/a.wav'), 'file://' + urllib.parse.quote(os.path.realpath('tests/test data/audio/strângë chàrs фズ.wav')), 'file://' + os.path.realpath('tests/test%20data/empty/a'), 'file://' + os.path.realpath('tests/test%20data/empty/b/c'), 'file://' + os.path.realpath('tests/test%20data/image.jpg'), 'file://' + os.path.realpath('tests/test%20data/a.iso'), 'file://' + os.path.realpath('tests/test%20data/no%20tags/no-tags.mp3'), 'file://' + os.path.realpath('tests/test%20data/no%20tags/no-tags.ogg'), 'file://' + os.path.realpath('tests/test%20data/no%20tags/no-tags.flac'), ] expected_files.sort() parsed_files.sort() self.assertEqual(parsed_files, expected_files) expected_dirs = [ 'test data/audio/b/', 'test data/audio/', 'test data/audio/', # duplicate, because there are two files in there 'test data/empty/', 'test data/empty/b/', 'test data/', 'test data/', 'test data/no tags/', 'test data/no tags/', 'test data/no tags/' ] expected_dirs.sort() subdirectories.sort() self.assertEqual(subdirectories, expected_dirs) def test_files(self): settings['recursive'] = True parsed_files, subdirectories = prepare_files_list([ 'tests/test data/audio/b/c.mp3', 'tests/test data/audio/a.wav' ]) self.assertEqual(parsed_files, [ 'file://' + os.path.realpath('tests/test%20data/audio/b/c.mp3'), 'file://' + os.path.realpath('tests/test%20data/audio/a.wav') ]) self.assertEqual(subdirectories, ['', '']) def test_validate_args(self): # working example self.assertTrue(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'mp3', 'quality': 5 })) # input and output self.assertFalse(validate_args({ 'main': 'batch', 'format': 'mp3', 'mode': 'cbr', 'quality': 192 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '', 'format': 'mp3', 'mode': 'cbr', 'quality': 192 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'mp3', 'quality': 5, 'existing': 'abc' })) self.assertTrue(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'mp3', 'quality': 5, 'existing': 'overwrite' })) # formats self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'quality': 5 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'mp3', 'quality': 192 # False because it defaults to vbr })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'mp3', 'mode': 'vbr', 'quality': 192 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'mp3', 'mode': 'abr', 'quality': 3 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'mp3', 'mode': 'cbr', 'quality': 400 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'opus', 'quality': 600 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'wav', 'quality': 13 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'flac', 'quality': 20 })) self.assertFalse(validate_args({ 'main': 'batch', 'output-path': '.', 'format': 'ogg', 'quality': 20 })) self.assertFalse(validate_args({'output-resample': 160})) def test_use_memory_gsettings_cbr(self): use_memory_gsettings({ 'output-path': '.', 'main': 'batch', 'format': 'mp3', 'mode': 'cbr', 'quality': '320' }) gio_settings = get_gio_settings() self.assertEqual( gio_settings.get_string('mp3-mode'), 'cbr' ) self.assertEqual( gio_settings.get_string('output-mime-type'), 'audio/mpeg' ) self.assertEqual( gio_settings.get_int('mp3-cbr-quality'), 320 ) def test_use_memory_gsettings_default_mp3_mode(self): use_memory_gsettings({ 'output-path': '.', 'main': 'batch', 'format': 'mp3', 'quality': '5' }) gio_settings = get_gio_settings() self.assertEqual( gio_settings.get_string('mp3-mode'), 'vbr' ) self.assertEqual( gio_settings.get_string('output-mime-type'), 'audio/mpeg' ) self.assertEqual( gio_settings.get_int('mp3-vbr-quality'), 5 ) def test_use_memory_gsettings_ogg(self): use_memory_gsettings({ 'output-path': '.', 'main': 'batch', 'format': 'ogg', 'quality': '0.5' }) gio_settings = get_gio_settings() self.assertEqual( gio_settings.get_string('output-mime-type'), 'audio/x-vorbis' ) self.assertEqual( gio_settings.get_double('vorbis-quality'), 0.5 ) def test_set_delete_original_false(self): gio_settings = get_gio_settings() gio_settings.set_boolean('delete-original', True) use_memory_gsettings({ 'output-path': '.', 'main': 'batch', 'format': 'ogg', 'quality': '0.5' }) gio_settings = get_gio_settings() self.assertFalse(gio_settings.get_boolean('delete-original')) def test_set_delete_original_true(self): gio_settings = get_gio_settings() gio_settings.set_boolean('delete-original', False) use_memory_gsettings({ 'output-path': '.', 'main': 'batch', 'format': 'ogg', 'quality': '0.5', 'delete-original': True }) gio_settings = get_gio_settings() self.assertTrue(gio_settings.get_boolean('delete-original')) def test_set_output_sample(self): gio_settings = get_gio_settings() self.assertFalse(gio_settings.get_boolean('output-resample')) self.assertEqual(48000, gio_settings.get_int('resample-rate')) use_memory_gsettings({ 'output-path': '.', 'main': 'batch', 'format': 'ogg', 'quality': '0.5', 'output-resample': 44100 }) gio_settings = get_gio_settings() self.assertTrue(gio_settings.get_boolean('output-resample')) self.assertEqual(44100, gio_settings.get_int('resample-rate')) if __name__ == "__main__": unittest.main() soundconverter-4.0.5/tests/testcases/batch_integration.py000066400000000000000000000415071460501237000240030ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA """Tests that start soundconverter and try to convert files.""" import os import shutil import time import unittest import urllib.parse from unittest.mock import patch from util import reset_settings, launch from soundconverter.gstreamer.converter import available_elements from soundconverter.gstreamer.discoverer import Discoverer from soundconverter.interface.batch import cli_convert from soundconverter.interface.mainloop import gtk_iteration from soundconverter.util.fileoperations import filename_to_uri from soundconverter.util.settings import get_gio_settings, settings from soundconverter.util.soundfile import SoundFile original_available_elements = available_elements.copy() cwd = os.getcwd() class BatchIntegration(unittest.TestCase): @classmethod def setUp(cls): os.makedirs('tests/tmp', exist_ok=True) def tearDown(self): # tests may change the cwd os.chdir(cwd) reset_settings() if os.path.isdir('tests/tmp/'): shutil.rmtree('tests/tmp') available_elements.update(original_available_elements) def test_single_file_m4a(self): launch([ '-b', 'tests/test data/audio/a.wav', '-o', 'tests/tmp/64', '-f', 'm4a', '-q', '64' ]) launch([ '-b', 'tests/test data/audio/a.wav', '-o', 'tests/tmp/320', '-f', 'm4a', '-q', '320' ]) self.assertEqual(settings['main'], 'batch') self.assertEqual(settings['debug'], False) self.assertEqual(settings['recursive'], False) self.assertTrue(os.path.isfile('tests/tmp/320/a.m4a')) self.assertTrue(os.path.isfile('tests/tmp/64/a.m4a')) size_320 = os.path.getsize('tests/tmp/320/a.m4a') size_64 = os.path.getsize('tests/tmp/64/a.m4a') self.assertLess(size_64, size_320) def discover(self, path): """Run a Discoverer task on the path and return the sound_file. Get discovered info with `sound_file.info`, `sound_file.tags` and `sound_file.duration`. """ sound_file = SoundFile(filename_to_uri(path)) discoverer = Discoverer([sound_file]) discoverer.run() while discoverer.discovered != 1: gtk_iteration(True) return sound_file def get_bitrate(self, path): """Read the bitrate from a file. Only works with constant bitrates.""" sound_file = self.discover(path) return sound_file.info.get_audio_streams()[0].get_bitrate() / 1000 def test_vbr(self): launch([ '-b', 'tests/test data/audio/a.wav', '-o', 'tests/tmp/8', '-f', 'mp3', '-m', 'vbr', '-q', 8 # smaller ]) launch([ '-b', 'tests/test data/audio/a.wav', '-o', 'tests/tmp/2', '-f', 'mp3', '-m', 'vbr', '-q', 2 ]) self.assertEqual(settings['main'], 'batch') self.assertEqual(settings['debug'], False) self.assertEqual(settings['recursive'], False) self.assertTrue(os.path.isfile('tests/tmp/8/a.mp3')) self.assertTrue(os.path.isfile('tests/tmp/2/a.mp3')) size_8 = os.path.getsize('tests/tmp/8/a.mp3') size_2 = os.path.getsize('tests/tmp/2/a.mp3') # it should be significantly smaller self.assertLess(size_8, size_2 / 2) # fails to read bitrate of vbr: self.assertEqual( self.get_bitrate('tests/tmp/2/a.mp3'), 0 ) def test_abr(self): launch([ '-b', 'tests/test data/audio/a.wav', '-o', 'tests/tmp/320', '-f', 'mp3', '-m', 'abr', '-q', 320 ]) launch([ '-b', 'tests/test data/audio/a.wav', '-o', 'tests/tmp/112', '-f', 'mp3', '-m', 'abr', '-q', 112 ]) self.assertEqual(settings['main'], 'batch') self.assertEqual(settings['debug'], False) self.assertEqual(settings['recursive'], False) self.assertTrue(os.path.isfile('tests/tmp/320/a.mp3')) self.assertTrue(os.path.isfile('tests/tmp/112/a.mp3')) size_320 = os.path.getsize('tests/tmp/320/a.mp3') size_112 = os.path.getsize('tests/tmp/112/a.mp3') self.assertLess(size_112, size_320 / 2) # fails to read bitrate of abr: self.assertEqual( self.get_bitrate('tests/tmp/112/a.mp3'), 0 ) def test_cbr(self): launch([ '-b', 'tests/test data/audio/a.wav', '-o', 'tests/tmp', '-f', 'mp3', '-m', 'cbr', '-q', 256 ]) self.assertEqual(settings['main'], 'batch') self.assertEqual(settings['debug'], False) self.assertEqual(settings['recursive'], False) self.assertTrue(os.path.isfile('tests/tmp/a.mp3')) self.assertEqual( self.get_bitrate('tests/tmp/a.mp3'), 256 ) def test_non_recursive_with_folder(self): # it should exit with code 1, because no files are supplied with self.assertRaises(SystemExit) as ctx: launch([ '-b', 'tests/test data/empty', '-f', 'mp3', '-o', 'tmp' ]) self.assertEqual(settings['main'], 'batch') self.assertEqual(settings['debug'], False) self.assertEqual(settings['recursive'], False) exit_code = ctx.exception.code self.assertEqual(exit_code, 1) def test_recursive_empty(self): # it should exit with code 2, because files are found but they # are not audio files with self.assertRaises(SystemExit) as cm: launch([ '-b', '-r', 'tests/test data/empty', '-f', 'mp3', '-o', 'tmp', '-d' ]) self.assertEqual(settings['main'], 'batch') self.assertEqual(settings['debug'], True) self.assertEqual(settings['recursive'], True) the_exception = cm.exception self.assertEqual(the_exception.code, 2) def test_recursive_audio(self): # it should convert launch([ '-b', 'tests/test data/audio', '-r', '-o', 'tests/tmp', '-f', 'wav', '-q', 24 ]) self.assertEqual(settings['main'], 'batch') self.assertEqual(settings['debug'], False) self.assertEqual(settings['recursive'], True) self.assertTrue(os.path.isdir('tests/tmp/audio/')) self.assertTrue(os.path.isfile('tests/tmp/audio/a.wav')) self.assertTrue(os.path.isfile('tests/tmp/audio/b/c.wav')) # mono bitrate = self.get_bitrate('tests/tmp/audio/b/c.wav') self.assertEqual(bitrate, 44100 * 24 / 1000) # stereo bitrate = self.get_bitrate('tests/tmp/audio/a.wav') self.assertEqual(bitrate, 44100 * 24 / 1000 * 2) def test_multiple_paths(self): # it should convert launch([ '-b', 'tests/test data/audio', 'tests/test data/audio/a.wav', 'tests/test data/empty', '-r', '-o', 'tests/tmp', '-f', 'opus', '-d' ]) self.assertEqual(settings['main'], 'batch') self.assertEqual(settings['debug'], True) self.assertEqual(settings['recursive'], True) # The batch mode behaves like the cp command: # - input is a folder, has to provide -r, output is a folder # - input is a file, output is a file self.assertTrue(os.path.isdir('tests/tmp/audio/')) self.assertTrue(os.path.isfile('tests/tmp/audio/a.opus')) self.assertTrue(os.path.isfile('tests/tmp/audio/b/c.opus')) # a.wav was provided twice, so here is it again but this time without # subfolder, just like the input. self.assertTrue(os.path.isfile('tests/tmp/a.opus')) # since the converison is done, the remaining time should stay # constant conversion_queue = cli_convert[0].conversions remaining_before = conversion_queue.get_remaining() time.sleep(0.01) remaining_after = conversion_queue.get_remaining() self.assertEqual(remaining_before, remaining_after) def test_tags(self): # it should run and not raise exceptions launch([ '-t', 'tests/test data/', '-r' ]) self.assertEqual(settings['main'], 'tags') self.assertEqual(settings['debug'], False) self.assertEqual(settings['recursive'], True) def test_single_subdir_input(self): os.chdir('tests') # at some point this did not work, keep this spec even if it doesn't # appear to add value over test_recursive_audio launch([ '-b', 'test data', '-r', '-f', 'flac', '-o', 'tmp' ], '../bin/soundconverter') # the input directory is part of the output self.assertTrue(os.path.isdir('tmp/test data/audio/')) self.assertTrue(os.path.isfile('tmp/test data/audio/a.flac')) self.assertTrue(os.path.isfile('tmp/test data/audio/b/c.flac')) def test_pattern_1(self): launch([ '-b', 'tests/test data/audio/', '-r', '-o', 'tests/tmp', '-p', '/{artist}/{album}', '-f', 'm4a' ]) # since pattern is used, the "audio" part of the input path # is omitted and not reconstructed. e.g. "audio" might also be an # album name, in which case the old structure should be replaced # with the provided one. self.assertTrue(os.path.isfile( 'tests/tmp/test_artist/test_album.m4a' )) self.assertTrue(os.path.isfile( 'tests/tmp/Unknown Artist/Unknown Album.m4a' )) def test_pattern_2(self): launch([ '-b', 'tests/test data/audio/b/c.mp3', 'tests/test data/audio/a.wav', '-r', '-o', 'tests/tmp', '-p', '{Artist}/{bar}/{filename}', '-f', 'm4a' ]) self.assertTrue(os.path.isfile( 'tests/tmp/test_artist/Unknown Bar/c.m4a' )) self.assertTrue(os.path.isfile( 'tests/tmp/Unknown Artist/Unknown Bar/a.m4a' )) def test_skip_overwrite(self): path = 'tests/tmp/c.m4a' now = time.time() os.system('touch -d "2 hours ago" {}'.format(path)) time_1 = os.path.getmtime(path) size_1 = os.path.getsize(path) # an empty file from 2 hours ago self.assertLess(abs(time_1 - (now - 60 * 60 * 2)), 10) self.assertEqual(size_1, 0) launch([ '-b', 'tests/test data/audio/b/c.mp3', '-o', 'tests/tmp', '-f', 'm4a', '-e', 'skip' ]) time_2 = os.path.getmtime(path) size_2 = os.path.getsize(path) # unchanged self.assertEqual(size_2, size_1) self.assertEqual(time_2, time_1) self.assertTrue(os.path.isfile(path)) launch([ '-b', 'tests/test data/audio/b/c.mp3', '-o', 'tests/tmp', '-f', 'm4a', '-e', 'overwrite' ]) time_3 = os.path.getmtime(path) size_3 = os.path.getsize(path) # larger and newer file self.assertGreater(size_3, size_2) self.assertLess(abs(time_3 - now), 10) def test_increment_1(self): for _ in range(3): launch([ '-b', 'tests/test data/audio/b/c.mp3', '-o', 'tests/tmp', '-f', 'm4a', '-e', 'increment' ]) self.assertTrue(os.path.isfile('tests/tmp/c.m4a')) self.assertTrue(os.path.isfile('tests/tmp/c (1).m4a')) self.assertTrue(os.path.isfile('tests/tmp/c (2).m4a')) def test_increment_2(self): # increments by default for _ in range(3): launch([ '-b', 'tests/test data/audio/b/c.mp3', '-o', 'tests/tmp', '-f', 'm4a' ]) self.assertTrue(os.path.isfile('tests/tmp/c.m4a')) self.assertTrue(os.path.isfile('tests/tmp/c (1).m4a')) self.assertTrue(os.path.isfile('tests/tmp/c (2).m4a')) def test_set_delete_original_false(self): gio_settings = get_gio_settings() gio_settings.set_boolean('delete-original', True) gio_settings = get_gio_settings() self.assertTrue(gio_settings.get_boolean('delete-original')) launch([ '-b', 'tests/test data/audio/b/c.mp3', '-o', 'tests/tmp', '-f', 'm4a' ]) gio_settings = get_gio_settings() self.assertFalse(gio_settings.get_boolean('delete-original')) def test_set_delete_original_true(self): gio_settings = get_gio_settings() gio_settings.set_boolean('delete-original', False) gio_settings = get_gio_settings() self.assertFalse(gio_settings.get_boolean('delete-original')) os.system('cp "tests/test data/audio/a.wav" "tests/tmp/a.wav"') self.assertTrue(os.path.isfile('tests/tmp/a.wav')) launch([ '-b', 'tests/tmp/a.wav', '-o', 'tests/tmp', '-f', 'm4a', '-D', ]) gio_settings = get_gio_settings() self.assertTrue(gio_settings.get_boolean('delete-original')) self.assertFalse(os.path.isfile('tests/tmp/a.wav')) def test_set_output_resample(self): gio_settings = get_gio_settings() self.assertFalse(gio_settings.get_boolean('output-resample')) self.assertEqual(48000, gio_settings.get_int('resample-rate')) os.system('cp "tests/test data/audio//b/c.mp3" "tests/tmp/c.mp3"') self.assertTrue(os.path.isfile('tests/tmp/c.mp3')) sample_rate = 8000 launch([ '-b', 'tests/tmp/c.mp3', '-o', 'tests/tmp', '-f', 'wav', '-R', str(sample_rate) ]) gio_settings = get_gio_settings() self.assertTrue(gio_settings.get_boolean('output-resample')) self.assertEqual(gio_settings.get_int('resample-rate'), sample_rate) self.assertEqual(self.get_bitrate('tests/tmp/c.wav'), sample_rate * 8 / 1000 * 2) def test_conversion_no_tags(self): launch([ '-b', 'tests/test data/no tags', '-r', '-o', 'tests/tmp', '-f', 'm4a', '-d' ]) self.assertTrue(os.path.isdir('tests/tmp/')) self.assertTrue(os.path.isfile('tests/tmp/no tags/no-tags.m4a')) self.assertTrue(os.path.isfile('tests/tmp/no tags/no-tags (1).m4a')) self.assertTrue(os.path.isfile('tests/tmp/no tags/no-tags (2).m4a')) def test_wont_fail_with_recursion_error(self): # converting and skipping files won't cause a super long recursion chain, # like it used to https://bugs.launchpad.net/soundconverter/+bug/1952551 # GLib.idle_add seems to start a new call chain, fixing this issue. path = 'soundconverter.gstreamer.discoverer.DiscovererThread._analyse_file' def _analyse_file(_, sound_file): # to speed the test up sound_file.readable = True with patch(path, _analyse_file): launch([ '-b', 'tests/bulk-test-data', '-r', '-o', 'tests/tmp', '-f', 'mp3', '-q', 8, ]) self.assertTrue(os.path.isdir('tests/tmp/bulk-test-data')) self.assertEqual(len(os.listdir('tests/tmp/bulk-test-data')), 300) # won't raise an exception launch([ '-b', 'tests/bulk-test-data', '-r', '-o', 'tests/tmp', '-f', 'mp3', '-q', 8, '-e', 'skip', '-j', 1 ]) self.assertEqual(len(os.listdir('tests/tmp/bulk-test-data')), 300) if __name__ == '__main__': unittest.main() soundconverter-4.0.5/tests/testcases/discoverer.py000066400000000000000000000160761460501237000224670ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import os import unittest import time from unittest.mock import Mock from gi.repository import GLib from soundconverter.gstreamer.discoverer import Discoverer, is_denylisted, \ add_discoverers from soundconverter.util.taskqueue import TaskQueue from soundconverter.util.soundfile import SoundFile from soundconverter.util.settings import get_gio_settings from soundconverter.interface.mainloop import gtk_iteration class DiscovererQueueTest(unittest.TestCase): def setUp(self): self.gio_settings = get_gio_settings() queue = TaskQueue() parent_dir = 'file://' + os.getcwd() self.sound_files = [ SoundFile(parent_dir + '/tests/test%20data/audio/b/c.mp3'), SoundFile(parent_dir + '/tests/test%20data/audio/a.wav'), SoundFile(parent_dir + '/tests/test%20data/empty/b/c'), # add_discoverers will split it here into two tasks or something. Make sure # each of them gets at least one valid audio file in order to test that they # are doing their stuff in parallel. SoundFile(parent_dir + '/tests/test%20data/audio/strângë chàrs фズ.wav'), SoundFile(parent_dir + '/tests/test%20data/empty/a'), ] self.queue = queue def wait_for_queue(self): while len(self.queue.done) < len(self.queue.all_tasks): # wait for the test to copmlete time.sleep(0.01) gtk_iteration() def tearDown(self): self.wait_for_queue() def test_add_discoverers(self): sound_files = self.sound_files queue = self.queue self.gio_settings.set_boolean('limit-jobs', True) self.gio_settings.set_int('number-of-jobs', 2) add_discoverers(queue, sound_files) self.assertEqual(len(queue.all_tasks), 2) self.assertEqual(len(queue.running), 0) for sound_file in sound_files: self.assertFalse(sound_file.readable) queue.run() # two tasks are running at the same time self.assertEqual(len(queue.running), 2) # add_discoverers creates only one task per job, each task handles # multiple sound_files, as opposed to the converter, which only # works on a single sound_file. self.assertEqual(len(queue.all_tasks), 2) self.wait_for_queue() # correctly figures out which sound_files contain readable information self.assertTrue(sound_files[0].readable) self.assertTrue(sound_files[1].readable) self.assertFalse(sound_files[2].readable) self.assertTrue(sound_files[3].readable) self.assertFalse(sound_files[4].readable) class DiscovererTest(unittest.TestCase): """Checks if async Task class functions are working properly.""" def test_read_tags(self): c_mp3 = 'file://' + os.path.realpath('tests/test%20data/audio/b/c.mp3') discoverer = Discoverer([SoundFile(c_mp3)]) discoverer.connect('done', lambda _: None) discoverer.run() done = Mock() discoverer.connect('done', done) discoverer.run() # needs to iterate the main loop for messages on the bus loop = GLib.MainLoop() while discoverer.running: context = loop.get_context() context.iteration(True) done.assert_called_with(discoverer) sound_file = discoverer.sound_files[0] self.assertTrue(sound_file.readable) self.assertLess(abs(sound_file.duration - 1.04), 0.01) self.assertEqual(sound_file.tags['artist'], 'test_artist') self.assertEqual(sound_file.tags['album'], 'test_album') def test_read_tags_multiple(self): c_mp3 = 'file://' + os.path.realpath('tests/test%20data/audio/b/c.mp3') a_wav = 'file://' + os.path.realpath('tests/test%20data/audio/a.wav') empty_a = 'file://' + os.path.realpath('tests/test%20data/empty/a') sound_files = [ SoundFile(c_mp3), SoundFile(empty_a), SoundFile(a_wav) ] discoverer = Discoverer(sound_files) discoverer.connect('done', lambda _: None) done = Mock() discoverer.connect('done', done) discoverer.run() # needs to iterate the main loop for messages on the bus loop = GLib.MainLoop() while discoverer.running: context = loop.get_context() context.iteration(True) done.assert_called_with(discoverer) self.assertTrue(sound_files[0].readable) self.assertEqual(sound_files[0].tags['artist'], 'test_artist') self.assertEqual(sound_files[0].tags['album'], 'test_album') self.assertLess(abs(sound_files[0].duration - 1.04), 0.01) self.assertFalse(sound_files[1].readable) self.assertEqual(len(sound_files[1].tags), 0) self.assertIsNone(sound_files[1].duration) self.assertTrue(sound_files[2].readable) # 'container-format' happens to be read from wav files, but there is # no special need in having it. can be used for tests though self.assertEqual(sound_files[2].tags['container-format'], 'WAV') self.assertLess(abs(sound_files[2].duration - 1.00), 0.01) def test_not_audio(self): empty = 'file://' + os.path.realpath('tests/test%20data/empty/a') a_iso = 'file://' + os.path.realpath('tests/test%20data/a.iso') image_jpg = 'file://' + os.path.realpath('tests/test%20data/image.jpg') discoverer = Discoverer([ SoundFile(empty), SoundFile(a_iso), SoundFile(image_jpg) ]) discoverer.connect('done', lambda _: None) discoverer.run() done = Mock() discoverer.connect('done', done) discoverer.run() loop = GLib.MainLoop() while discoverer.running: context = loop.get_context() context.iteration(True) done.assert_called_with(discoverer) self.assertEqual(len(discoverer.sound_files), 3) for sound_file in discoverer.sound_files: self.assertFalse(sound_file.readable) self.assertIsNone(sound_file.duration) self.assertEqual(len(sound_file.tags), 0) self.assertEqual(is_denylisted(discoverer.sound_files[1]), '*.iso') if __name__ == "__main__": unittest.main() soundconverter-4.0.5/tests/testcases/fileoperations.py000066400000000000000000000045571460501237000233460ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import unittest from soundconverter.util.fileoperations import split_uri, is_uri class Fileoperations(unittest.TestCase): def test_split_uri(self): scheme, path = split_uri('file:///one/two/three') self.assertEqual(scheme, 'file://') self.assertEqual(path, '/one/two/three') scheme, path = split_uri('file:///three') self.assertEqual(scheme, 'file://') self.assertEqual(path, '/three') scheme, path = split_uri('ftp://foo@bar:1234:/one/two/three') self.assertEqual(scheme, 'ftp://foo@bar:1234:') self.assertEqual(path, '/one/two/three') scheme, path = split_uri('file://hostname/') self.assertEqual(scheme, 'file://hostname') self.assertEqual(path, '/') def test_wrong_type(self): error = None try: split_uri([1, 2, 3]) except Exception as e: error = e self.assertIsNotNone(error) def test_is_uri(self): self.assertTrue(is_uri('file:///one/two/three')) self.assertTrue(is_uri('file://hostname/three')) self.assertTrue(is_uri('ftp://foo@bar:1234:/one/two/three')) self.assertFalse(is_uri('/folder/file')) self.assertFalse(is_uri('./folder/file')) self.assertFalse(is_uri('folder/file')) self.assertFalse(is_uri('file///one/two/three')) self.assertFalse(is_uri('file:/three')) self.assertFalse(is_uri('://foo@bar:1234:/one/two/three')) self.assertFalse(is_uri('file://')) if __name__ == "__main__": unittest.main() soundconverter-4.0.5/tests/testcases/format.py000066400000000000000000000122471460501237000216060ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import unittest from soundconverter.util.formats import get_mime_type, get_quality, \ get_bitrate_from_settings, get_file_extension, get_default_quality from soundconverter.util.settings import get_gio_settings class Format(unittest.TestCase): def test_get_quality(self): self.assertEqual(get_quality('audio/mpeg', 0, 'cbr'), 64) self.assertEqual(get_quality('audio/x-m4a', 1, 'thetgdfgsfd'), 96) self.assertEqual(get_quality('audio/x-m4a', 256, reverse=True), 4) self.assertEqual(get_quality('audio/mpeg', 320, mode='abr', reverse=True), 5) self.assertEqual(get_quality('audio/mpeg', -1, mode='abr', reverse=False), 320) self.assertEqual(get_quality('audio/mpeg', -2, mode='cbr', reverse=False), 256) def test_get_default_quality(self): self.assertEqual(get_default_quality('audio/mpeg'), 0) self.assertEqual(get_default_quality('audio/mpeg', 'vbr'), 0) self.assertEqual(get_default_quality('audio/mpeg', 'cbr'), 320) self.assertEqual(get_default_quality('audio/mpeg', 'abr'), 320) self.assertEqual(get_default_quality('audio/x-m4a'), 400) def test_get_bitrate_from_settings(self): # Use bitrates that are not part of the indexing triggered by the ui, # to ensure the code is flexible for custom bitrates (such as set in # the batch mode) get_gio_settings().set_string('output-mime-type', 'audio/mpeg') get_gio_settings().set_int('mp3-abr-quality', 200) get_gio_settings().set_string('mp3-mode', 'abr') self.assertEqual(get_bitrate_from_settings(), '~200 kbps') get_gio_settings().set_int('mp3-vbr-quality', 200) get_gio_settings().set_string('mp3-mode', 'vbr') self.assertEqual(get_bitrate_from_settings(), 'N/A') get_gio_settings().set_int('mp3-cbr-quality', 200) get_gio_settings().set_string('mp3-mode', 'cbr') self.assertEqual(get_bitrate_from_settings(), '200 kbps') get_gio_settings().set_string('output-mime-type', 'audio/ogg; codecs=opus') get_gio_settings().set_int('opus-bitrate', 123) self.assertEqual(get_bitrate_from_settings(), '~123 kbps') get_gio_settings().set_string('output-mime-type', 'audio/x-m4a') get_gio_settings().set_int('aac-quality', 234) self.assertEqual(get_bitrate_from_settings(), '~234 kbps') get_gio_settings().set_string('output-mime-type', 'audio/x-vorbis') get_gio_settings().set_double('vorbis-quality', 0.99) self.assertEqual(get_bitrate_from_settings(), '~500 kbps') get_gio_settings().set_string('output-mime-type', 'audio/x-vorbis') get_gio_settings().set_double('vorbis-quality', 0.21) self.assertEqual(get_bitrate_from_settings(), '~96 kbps') get_gio_settings().set_string('output-mime-type', 'audio/x-flac') self.assertEqual(get_bitrate_from_settings(), 'N/A') get_gio_settings().set_string('output-mime-type', 'audio/x-wav') get_gio_settings().set_boolean('output-resample', False) rate = 705.6 self.assertEqual( get_bitrate_from_settings(), '{} kbps'.format(rate) ) get_gio_settings().set_boolean('output-resample', True) get_gio_settings().set_int('resample-rate', 44100) get_gio_settings().set_int('wav-sample-width', 16) self.assertEqual( get_bitrate_from_settings(), '{} kbps'.format(rate) ) get_gio_settings().set_int('wav-sample-width', 32) self.assertEqual( get_bitrate_from_settings(), '{} kbps'.format(rate * 2) ) get_gio_settings().set_int('wav-sample-width', 8) get_gio_settings().set_int('resample-rate', 128000) self.assertEqual( get_bitrate_from_settings(), '{} kbps'.format(rate / 44.1 * 128 / 2) ) def test_get_file_extension(self): self.assertEqual(get_file_extension('audio/x-flac'), 'flac') self.assertEqual(get_file_extension('flac'), 'flac') def test_get_mime_type(self): self.assertEqual(get_mime_type('flac'), 'audio/x-flac') self.assertEqual(get_mime_type('audio/x-flac'), 'audio/x-flac') self.assertEqual(get_mime_type('mp3'), 'audio/mpeg') self.assertEqual(get_mime_type('audio/mpeg'), 'audio/mpeg') if __name__ == "__main__": unittest.main() soundconverter-4.0.5/tests/testcases/gui_integration.py000066400000000000000000000567111460501237000235110ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA """Tests that start soundconverter and try to convert files.""" import os import shutil import time import unittest from unittest.mock import patch from gi.repository import Gtk, GLib, Gst, GObject from util import reset_settings, launch from soundconverter.gstreamer.converter import available_elements from soundconverter.interface.mainloop import gtk_iteration from soundconverter.interface.preferences import encoders from soundconverter.interface.ui import win from soundconverter.util.fileoperations import filename_to_uri from soundconverter.util.formats import get_quality from soundconverter.util.settings import get_gio_settings, settings original_available_elements = available_elements.copy() cwd = os.getcwd() class GUIIntegration(unittest.TestCase): def setUp(self): # reset quality settings, since they may be invalid for the ui mode # (e.g. an aribtrary mp3 quality of 200 does not exist for the ui) gio_settings = get_gio_settings() gio_settings.set_int('mp3-abr-quality', get_quality('audio/mpeg', -1, 'abr')) gio_settings.set_int('mp3-vbr-quality', get_quality('audio/mpeg', -1, 'vbr')) gio_settings.set_int('mp3-cbr-quality', get_quality('audio/mpeg', -1, 'cbr')) gio_settings.set_int('opus-bitrate', get_quality('audio/ogg; codecs=opus', -1)) gio_settings.set_int('aac-quality', get_quality('audio/x-m4a', -1)) gio_settings.set_double('vorbis-quality', get_quality('audio/x-vorbis', -1)) gio_settings.set_boolean('delete-original', False) # conversion setup selected_folder = filename_to_uri('tests/tmp') gio_settings.set_string('selected-folder', selected_folder) gio_settings.set_boolean('create-subfolders', False) gio_settings.set_boolean('same-folder-as-input', False) gio_settings.set_int('name-pattern-index', 0) gio_settings.set_boolean('replace-messy-chars', True) gio_settings.set_boolean('delete-original', False) if os.path.isdir('tests/tmp/'): shutil.rmtree('tests/tmp') os.makedirs('tests/tmp', exist_ok=True) def tearDown(self): win[0].close() reset_settings() if os.path.isdir('tests/tmp/'): shutil.rmtree('tests/tmp') available_elements.update(original_available_elements) def _wait_for_conversion_to_finish(self, window): queue = window.converter_queue while not queue.finished: # as Gtk.main is replaced by gtk_iteration, the unittests # are responsible about when soundconverter continues # to work on the conversions and updating the GUI gtk_iteration() def test_conversion_simple(self): gio_settings = get_gio_settings() gio_settings.set_int( 'opus-bitrate', get_quality('audio/ogg; codecs=opus', 3) ) launch([ 'tests/test data/audio/a.wav' ]) self.assertEqual(settings['main'], 'gui') window = win[0] # setup for conversion window.prefs.change_mime_type('audio/ogg; codecs=opus') # start conversion window.on_convert_button_clicked() # wait for the assertions until all files are converted self._wait_for_conversion_to_finish(window) self.assertTrue(os.path.isdir('tests/tmp/')) self.assertTrue(os.path.isfile('tests/tmp/a.opus')) def test_conversion(self): gio_settings = get_gio_settings() gio_settings.set_int( 'opus-bitrate', get_quality('audio/ogg; codecs=opus', 3) ) launch([ 'tests/test data/audio/a.wav', 'tests/test data/audio/strângë chàrs фズ.wav', 'tests/test data/audio/', 'tests/test data/empty' ]) self.assertEqual(settings['main'], 'gui') window = win[0] # check if directory is read correctly expected_filelist = [ 'tests/test data/audio/a.wav', 'tests/test data/audio/strângë chàrs фズ.wav', 'tests/test data/audio/b/c.mp3' ] uris = [filename_to_uri(path) for path in expected_filelist] self.assertCountEqual( uris, win[0].filelist.filelist ) for uri in uris: self.assertIn(uri, win[0].filelist.filelist) window.prefs.change_mime_type('audio/ogg; codecs=opus') window.on_convert_button_clicked() queue = window.converter_queue first_conversion = queue.all_tasks[0] first_bus = first_conversion.pipeline.get_bus() # is listening for messages self.assertTrue(GObject.signal_handler_is_connected( first_bus, first_conversion.watch_id )) pipeline = queue.all_tasks[0].pipeline # wait for the assertions until all files are converted self._wait_for_conversion_to_finish(window) self.assertEqual(len(queue.all_tasks), 3) self.assertTrue(queue.all_tasks[0].done) self.assertTrue(queue.all_tasks[1].done) self.assertTrue(queue.all_tasks[2].done) self.assertEqual(queue.all_tasks[0].get_progress()[0], 1) self.assertEqual(queue.all_tasks[1].get_progress()[0], 1) self.assertEqual(queue.all_tasks[2].get_progress()[0], 1) # (total_progress, [(sound_file, progress), ...]) self.assertEqual(queue.get_progress()[0], 1) self.assertEqual(queue.get_progress()[1][0][1], 1) self.assertEqual(queue.get_progress()[1][1][1], 1) self.assertEqual(queue.get_progress()[1][2][1], 1) self.assertIs(queue.get_progress()[1][0][0], queue.all_tasks[0]) self.assertIs(queue.get_progress()[1][1][0], queue.all_tasks[1]) self.assertIs(queue.get_progress()[1][2][0], queue.all_tasks[2]) self.assertIsNotNone(queue.all_tasks[0].sound_file.duration) self.assertIsNotNone(queue.all_tasks[1].sound_file.duration) self.assertIsNotNone(queue.all_tasks[2].sound_file.duration) duration = queue.get_duration() time.sleep(0.05) # The duration may not increase by 0.05 seconds, because it's finished self.assertLess(abs(queue.get_duration() - duration), 0.001) self.assertEqual(len(queue.done), len(expected_filelist)) # 'tests/test data/empty' causes the commonprefix to be everything # up to 'audio', hence an 'audio' folder is created self.assertTrue(os.path.isdir('tests/tmp/audio/')) self.assertTrue(os.path.isfile('tests/tmp/audio/a.opus')) self.assertTrue(os.path.isfile('tests/tmp/audio/strange_chars_.opus')) self.assertTrue(os.path.isfile('tests/tmp/audio/b/c.opus')) # no duplicates in the GUI: self.assertFalse(os.path.isfile('tests/tmp/a.opus')) errors = sum([1 for task in queue.done if task.error]) self.assertEqual(errors, 0) self.assertNotIn('error', window.statustext.get_text()) self.assertFalse(window.filelist.progress_column.get_visible()) self.assertEqual(len(window.filelist.invalid_files_list), 2) self.assertIn('empty/a', window.filelist.invalid_files_list) self.assertIn('empty/b/c', window.filelist.invalid_files_list) # cleans up at the end. Important because otherwise it will crash # because too many files are open. self.assertEqual(pipeline.get_state(0).state, Gst.State.NULL) self.assertIsNone(queue.all_tasks[0].pipeline) # correctly stops listening for messages to avoid a leakage of # open fds https://bugs.launchpad.net/soundconverter/+bug/1928210 self.assertFalse(GObject.signal_handler_is_connected( first_bus, first_conversion.watch_id )) def test_pause_resume(self): gio_settings = get_gio_settings() gio_settings.set_int( 'opus-bitrate', get_quality('audio/ogg; codecs=opus', 3) ) launch([ 'tests/test data/audio/a.wav' ]) self.assertEqual(settings['main'], 'gui') self.assertEqual(settings['debug'], False) window = win[0] expected_filelist = [ 'tests/test data/audio/a.wav' ] self.assertCountEqual( [filename_to_uri(path) for path in expected_filelist], win[0].filelist.filelist ) window.prefs.change_mime_type('audio/ogg; codecs=opus') window.on_convert_button_clicked() queue = window.converter_queue self.assertEqual(len(queue.running), 1) self.assertEqual(len(queue.done), 0) self.assertEqual(queue.pending.qsize(), 0) Gtk.main_iteration() window.on_button_pause_clicked() # pause duration = queue.get_duration() # my computer needs ~0.03 seconds to convert it. So sleep some # significantly longer time than that to make sure pause actually # pauses the conversion. time.sleep(0.5) gtk_iteration() self.assertTrue(window.filelist.progress_column.get_visible()) self.assertEqual(len(queue.running), 1) self.assertEqual(len(queue.done), 0) self.assertEqual(queue.pending.qsize(), 0) self.assertLess(abs(queue.get_duration() - duration), 0.001) self.assertFalse(os.path.isfile('tests/tmp/a.opus')) window.on_button_pause_clicked() # resume start = time.time() self._wait_for_conversion_to_finish(window) if time.time() - start > 0.4: print( 'The test may not work as intended because the conversion' 'may take longer than the pause duration.' ) self.assertEqual(len(queue.running), 0) self.assertEqual(len(queue.done), 1) self.assertEqual(queue.pending.qsize(), 0) self.assertGreater(queue.get_duration(), duration) self.assertEqual(queue.get_progress()[0], 1) converter_queue = window.converter_queue self.assertEqual(len(converter_queue.done), len(expected_filelist)) self.assertTrue(os.path.isfile('tests/tmp/a.opus')) errors = sum([1 for task in converter_queue.done if task.error]) self.assertEqual(errors, 0) self.assertNotIn('error', window.statustext.get_text()) self.assertFalse(window.filelist.progress_column.get_visible()) self.assertEqual(len(window.filelist.invalid_files_list), 0) def test_cancel(self): gio_settings = get_gio_settings() gio_settings.set_int( 'opus-bitrate', get_quality('audio/ogg; codecs=opus', 3) ) launch([ 'tests/test data/audio/a.wav' ]) self.assertEqual(settings['main'], 'gui') self.assertEqual(settings['debug'], False) window = win[0] window.prefs.change_mime_type('audio/ogg; codecs=opus') window.on_convert_button_clicked() gtk_iteration(True) queue = window.converter_queue pipeline = queue.all_tasks[0].pipeline # quick check if the conversion correctly started self.assertEqual(len(queue.running), 1) pipeline_state = pipeline.get_state(Gst.CLOCK_TIME_NONE).state self.assertEqual(pipeline_state, Gst.State.PLAYING) window.on_button_cancel_clicked() # the task should not be running anymore self.assertEqual(len(queue.running), 0) # the running task is put back into pending self.assertEqual(queue.pending.qsize(), 1) pipeline_state = pipeline.get_state(Gst.CLOCK_TIME_NONE).state self.assertEqual(pipeline_state, Gst.State.NULL) # my computer needs ~0.03 seconds to convert it. So sleep some # significantly longer time than that to make sure cancel actually # cancels the conversion. time.sleep(0.5) gtk_iteration() self.assertFalse(window.filelist.progress_column.get_visible()) self.assertEqual(len(queue.running), 0) self.assertEqual(len(queue.done), 0) self.assertEqual(queue.pending.qsize(), 1) self.assertFalse(os.path.isfile('tests/tmp/a.opus')) pipeline_state = pipeline.get_state(Gst.CLOCK_TIME_NONE).state self.assertEqual(pipeline_state, Gst.State.NULL) window.on_convert_button_clicked() gtk_iteration(True) new_queue = window.converter_queue new_pipeline = new_queue.all_tasks[0].pipeline # the new queue is running now instead self.assertEqual(len(new_queue.running), 1) new_pipeline_state = new_pipeline.get_state(Gst.CLOCK_TIME_NONE).state self.assertEqual(new_pipeline_state, Gst.State.PLAYING) # the old one is not running old_pipeline_state = pipeline.get_state(Gst.CLOCK_TIME_NONE).state self.assertEqual(old_pipeline_state, Gst.State.NULL) self.assertEqual(len(queue.running), 0) self.assertEqual(queue.pending.qsize(), 1) gtk_iteration() self.assertTrue(window.filelist.progress_column.get_visible()) start = time.time() while not new_queue.finished: gtk_iteration() if time.time() - start > 0.4: print( 'The test may not work as intended because the conversion' 'may take longer than the cancel duration.' ) # the old queue object didn't finish anything self.assertEqual(len(queue.done), 0) self.assertEqual(queue.pending.qsize(), 1) # the new queue finished self.assertEqual(len(new_queue.running), 0) self.assertEqual(len(new_queue.done), 1) self.assertEqual(new_queue.pending.qsize(), 0) self.assertEqual(new_queue.get_progress()[0], 1) self.assertEqual(new_pipeline.get_state(0).state, Gst.State.NULL) self.assertTrue(os.path.isfile('tests/tmp/a.opus')) def test_conversion_pattern(self): gio_settings = get_gio_settings() gio_settings.set_int('aac-quality', get_quality('audio/x-m4a', 3)) gio_settings.set_int('name-pattern-index', -1) filename_pattern = '{Title}/f o' gio_settings.set_string('custom-filename-pattern', filename_pattern) gio_settings.set_boolean('create-subfolders', True) gio_settings.set_int('subfolder-pattern-index', 0) gio_settings.set_boolean('replace-messy-chars', False) launch([ 'tests/test data/audio/a.wav', 'tests/test data/audio/strângë chàrs фズ.wav', 'tests/test data/audio/', 'tests/test data/empty', '--debug' ]) self.assertEqual(settings['debug'], True) window = win[0] # setup for conversion. mp4mux was not sending tag messages, so # make sure that tags from the discovery are properly used in the # conversion window.prefs.change_mime_type('audio/x-m4a') window.on_convert_button_clicked() self._wait_for_conversion_to_finish(window) # input files should not have been deleted self.assertTrue(os.path.isfile( 'tests/test data/audio/a.wav' )) self.assertTrue(os.path.isfile( 'tests/test data/audio/strângë chàrs фズ.wav' )) self.assertTrue(os.path.isdir('tests/tmp/')) self.assertTrue(os.path.isfile( 'tests/tmp/Unknown Artist/Unknown Album/a/f o.m4a' )) self.assertTrue(os.path.isfile( 'tests/tmp/Unknown Artist/Unknown Album/strângë chàrs ' 'фズ/f o.m4a' )) self.assertTrue(os.path.isfile( 'tests/tmp/test_artist/test_album/c/f o.m4a' )) def test_non_overwriting(self): gio_settings = get_gio_settings() gio_settings.set_int( 'opus-bitrate', get_quality('audio/ogg; codecs=opus', 3) ) launch([ 'tests/test data/audio/a.wav' ]) self.assertEqual(settings['main'], 'gui') window = win[0] window.prefs.change_mime_type('audio/ogg; codecs=opus') # create a few duplicates for _ in range(3): window.on_convert_button_clicked() self._wait_for_conversion_to_finish(window) self.assertTrue(os.path.isfile('tests/tmp/a.opus')) self.assertTrue(os.path.isfile('tests/tmp/a_(1).opus')) self.assertTrue(os.path.isfile('tests/tmp/a_(2).opus')) def test_delete_original(self): gio_settings = get_gio_settings() gio_settings.set_int( 'opus-bitrate', get_quality('audio/ogg; codecs=opus', 3) ) gio_settings.set_boolean('delete-original', True) os.system('cp "tests/test data/audio/a.wav" "tests/tmp/a.wav"') self.assertTrue(os.path.isfile('tests/tmp/a.wav')) launch([ 'tests/tmp/a.wav' ]) self.assertEqual(settings['main'], 'gui') window = win[0] window.prefs.change_mime_type('audio/ogg; codecs=opus') window.on_convert_button_clicked() self._wait_for_conversion_to_finish(window) self.assertTrue(os.path.isfile('tests/tmp/a.opus')) # should have been deleted self.assertFalse(os.path.isfile('tests/tmp/a.wav')) def test_missing_plugin(self): gio_settings = get_gio_settings() # delete the second element in the list of available encoders, # in order to test how the higher indexes behave. Selecting any # format row on the ui should still properly match to the right # encoder. mime_to_delete, encoder_to_delete, display_name_to_delete = encoders[1] selected_index = 2 mime_to_select = encoders[selected_index][0] # Test doesn't support multiple options like in m4a (faac,avenc_aac) # currently. If needed rewrite this. self.assertNotIn(',', encoder_to_delete) # This should trigger deleting the mp3 element from the dropdown # in set_widget_initial_values: available_elements.remove(encoder_to_delete) launch() window = win[0] self.assertNotIn(mime_to_delete, window.prefs.present_mime_types) for row in window.prefs.liststore8: if display_name_to_delete == row[0]: raise AssertionError( 'Expected "{}" to be missing'.format(display_name_to_delete) ) window.prefs.output_mime_type.set_active_id(encoders[selected_index][2]) # indexes should all map to each other properly without having to # modify `encoders`. self.assertEqual( gio_settings.get_string('output-mime-type'), mime_to_select ) def test_non_audio(self): # launch a window, insert a folder containing empty files, check # list of non-audio files, check conversion output launch() window = win[0] window.filelist.add_uris([ 'file:///' + os.path.realpath('tests/test%20data') ]) while window.filelist.discoverers is None: gtk_iteration() discoverer_queue = window.filelist.discoverers while not discoverer_queue.finished: gtk_iteration() self.assertIn('test data/empty/b/c', window.filelist.invalid_files_list) self.assertIn('test data/empty/a', window.filelist.invalid_files_list) self.assertIn('test data/a.iso', window.filelist.invalid_files_list) # due to the dialog being opened with .run, it would be blocking in # a new main loop until the close button is clicked by hand (see # https://lazka.github.io/pgi-docs/#Gtk-3.0/classes/Dialog.html) # so add closing the dialog to pending events. # Using .show instead of .run would probably work fine as well. GLib.idle_add(lambda: window.showinvalid_dialog_closebutton.clicked()) window.on_showinvalid_activate() text = window.showinvalid_dialog_list.get_buffer().props.text self.assertIn('test data/empty/b/c', text) self.assertIn('test data/empty/a', text) self.assertIn('test data/a.iso', text) window.prefs.change_mime_type('audio/mpeg') window.on_convert_button_clicked() self._wait_for_conversion_to_finish(window) # it uses the commonprefix of all files, not just the valid ones self.assertTrue(os.path.isfile('tests/tmp/test_data/audio/b/c.mp3')) self.assertTrue(os.path.isfile('tests/tmp/test_data/audio/a.mp3')) self.assertTrue(os.path.isfile( 'tests/tmp/test_data/audio/strange_chars_.mp3' )) self.assertFalse(os.path.isfile('tests/tmp/test_data/empty/b/c')) self.assertFalse(os.path.isfile('tests/tmp/test_data/empty/a')) self.assertFalse(os.path.isfile('tests/tmp/test_data/a.iso')) def test_all_m4a_encoders(self): for encoder in ['fdkaacenc', 'faac', 'avenc_aac']: # create one large and one small file to test if the quality # setting is respected for quality_index in [0, 5]: launch([ 'tests/test data/audio/a.wav' ]) window = win[0] window.prefs.change_mime_type('audio/x-m4a') class FakeComboBox: """Act like some quality is selected.""" def get_active(self): return quality_index window.prefs.on_aac_quality_changed(FakeComboBox()) get_gio_settings().set_string( 'selected-folder', 'file://' + os.path.realpath( 'tests/tmp/{}/{}'.format(encoder, quality_index) ) ) available_elements.clear() available_elements.update({encoder, 'mp4mux'}) window.on_convert_button_clicked() self._wait_for_conversion_to_finish(window) win[0].close() path_5 = 'tests/tmp/{}/5/a.m4a'.format(encoder) path_0 = 'tests/tmp/{}/0/a.m4a'.format(encoder) self.assertTrue(path_5) self.assertTrue(path_0) size_5 = os.path.getsize(path_5) size_0 = os.path.getsize(path_0) self.assertLess(size_0, size_5) def test_ignores_example_name_errors(self): # https://bugs.launchpad.net/soundconverter/+bug/1934517 def fail(*args): # make the constructor raise an error raise ValueError() init = 'soundconverter.util.namegenerator.TargetNameGenerator.__init__' with patch(init, fail): # won't crash because an error in update_example is not critical # enough launch() window = win[0] window.prefs.update_example() if __name__ == '__main__': unittest.main() soundconverter-4.0.5/tests/testcases/names.py000066400000000000000000001011701460501237000214130ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA """Test filename handling.""" import unittest import os import urllib.parse import urllib.error from gi.repository import Gio from soundconverter.util.settings import settings, get_gio_settings from soundconverter.util.namegenerator import TargetNameGenerator, \ get_subfolder_pattern, get_basename_pattern, process_custom_pattern, \ custom_patterns from soundconverter.util.soundfile import SoundFile from soundconverter.util.fileoperations import filename_to_uri, \ unquote_filename, beautify_uri from soundconverter.interface.batch import prepare_files_list from util import reset_settings def quote(ss): if isinstance(ss, str): ss = ss.encode('utf-8') return urllib.parse.quote(ss) class FilenameToUriTest(unittest.TestCase): def test(self): for path in ('foo', '/foo', 'foo/bar', '/foo/bar'): uri = filename_to_uri(path) self.assertTrue(uri.startswith('file://')) self.assertTrue(Gio.file_parse_name(path).get_uri() in uri) for path in ('http://example.com/foo', ): uri = filename_to_uri(path) self.assertTrue(uri.startswith('http://')) self.assertTrue(Gio.file_parse_name(path).get_uri() in uri) class PrepareFilesList(unittest.TestCase): def tearDown(self): reset_settings() def test_non_recursive_directory(self): test = ["tests/test data/empty/"] # it should not find anything, as test is a directory expectation = ([], []) self.assertEqual(prepare_files_list(test), expectation) def test_recursive_directory(self): settings["recursive"] = True test = ["tests/test data/empty/", "tests/test data/empty/b"] expectation = ([ filename_to_uri(test[0] + "a"), filename_to_uri(test[0] + "b/c"), filename_to_uri(test[1] + "/c") ], [ "empty/", "empty/b/", "b/" ]) result = prepare_files_list(test) for path in result[0]: self.assertTrue(path.startswith('file://')) self.assertEqual(result, expectation) def test_file(self): test = ["tests/test data/empty/a"] # it should not detect the name of the parent directory as # it's only a single file expectation = ([filename_to_uri(test[0])], [""]) result = prepare_files_list(test) self.assertTrue(result[0][0].startswith('file://')) self.assertEqual(result, expectation) class Patterns(unittest.TestCase): def test_subfolder_pattern(self): gio_settings = get_gio_settings() gio_settings.set_int('subfolder-pattern-index', 1) pattern = get_subfolder_pattern() self.assertEqual(pattern, '{album-artist}-{album}') def test_basename_pattern(self): gio_settings = get_gio_settings() gio_settings.set_int('name-pattern-index', 2) pattern = get_basename_pattern() self.assertEqual(pattern, '{track-number:02}-{title}') generator = TargetNameGenerator() sound_file = SoundFile('file:///foo.bar') sound_file.tags.update({ 'track-number': 3, 'title': 'foo' }) filled = generator.fill_pattern(sound_file, pattern) self.assertEqual(filled, '03-foo') gio_settings.set_int('name-pattern-index', 5) gio_settings.set_string('custom-filename-pattern', 'test') pattern = get_basename_pattern() self.assertEqual(pattern, 'test') def test_process_custom_pattern(self): pattern_in = '{Artist}/{Album} foo/{Track}' pattern_out = process_custom_pattern(pattern_in) self.assertEqual( pattern_out, '{artist}/{album} foo/{track-number:02}' ) def test_custom_patterns_mapping(self): self.assertEqual(custom_patterns['{Artist}'], '{artist}') class TargetNameGeneratorTestCases(unittest.TestCase): def setUp(self): gio_settings = get_gio_settings() gio_settings.set_int('name-pattern-index', 0) gio_settings.set_int('subfolder-pattern-index', 0) gio_settings.set_boolean('same-folder-as-input', False) gio_settings.set_string('selected-folder', 'file:///test/') gio_settings.set_boolean('create-subfolders', True) gio_settings.set_boolean('replace-messy-chars', True) self.g = TargetNameGenerator() self.s = SoundFile("file:///path/to/file.flac") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) def tearDown(self): self.g = None self.s = None def test_unquote_filename(self): self.assertEqual(unquote_filename('file://baz%20qux'), 'file://baz qux') def test_beautify_uri(self): self.assertEqual(beautify_uri('file://hostname/'), '/') self.assertEqual(beautify_uri('file://hostname/foo'), '/foo') self.assertEqual(beautify_uri('file:///baz%20qux'), '/baz qux') self.assertEqual(beautify_uri('foo/bar'), 'foo/bar') def test_safe_uri(self): # the "test data" folder has the space in it on purpose for this spec cwd_uri = 'file://' + os.getcwd() # 1. path doesn't exist at all self.assertEqual( self.g.safe_uri('file:///', '/b äz/quズx/foo.mp3'), 'file:///b_az/qux/foo.mp3' ) self.assertEqual( self.g.safe_uri('file:///test/', '/baズz/qux'), 'file:///test/baz/qux' ) self.assertEqual( self.g.safe_uri('file:///', '/ズfoo.mp3'), 'file:///foo.mp3' ) self.assertEqual( self.g.safe_uri('ftp://hostname/', 'ズblä'), 'ftp://hostname/bla' ) self.assertEqual( self.g.safe_uri('ftp://hostname/foo', '/ズ blä'), 'ftp://hostname/foo/_bla' ) # 2. the outer dir exists self.assertEqual( self.g.safe_uri(cwd_uri, '/home/qфux/foo.mp3'), cwd_uri + '/home/qux/foo.mp3') self.assertEqual( self.g.safe_uri(cwd_uri, 'tests/asdf/fooф.mp3'), cwd_uri + '/tests/asdf/foo.mp3') self.assertEqual( self.g.safe_uri(cwd_uri, '/tests/asdf/fooф.mp3'), cwd_uri + '/tests/asdf/foo.mp3') self.assertEqual( self.g.safe_uri(cwd_uri + '/', 'tests/asdf/fooф.mp3'), cwd_uri + '/tests/asdf/foo.mp3') self.assertEqual( self.g.safe_uri(cwd_uri + '/tests', '/asdf/fooф.mp3'), cwd_uri + '/tests/asdf/foo.mp3') self.assertEqual( self.g.safe_uri(cwd_uri + '/tests/', 'asdf/fooф.mp3'), cwd_uri + '/tests/asdf/foo.mp3') # 3. all dirs exist (space of 'test data' will be kept) original_name = os.getcwd() + '/tests/test data/audio/fâoo.mp3' self.assertEqual( self.g.safe_uri('file:///', original_name), cwd_uri + '/tests/test%20data/audio/faoo.mp3' ) self.assertEqual( self.g.safe_uri(cwd_uri, 'tests/test%20data/fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) self.assertEqual( self.g.safe_uri(cwd_uri, '/tests/test%20data/fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) self.assertEqual( self.g.safe_uri(cwd_uri + '/', 'tests/test%20data/fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) self.assertEqual( self.g.safe_uri(cwd_uri + '/tests', '/test%20data/fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) self.assertEqual( self.g.safe_uri(cwd_uri + '/tests/', 'test%20data/fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) self.assertEqual( self.g.safe_uri(cwd_uri + '/tests/test%20data', '/fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) self.assertEqual( self.g.safe_uri(cwd_uri + '/tests/test data', 'fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) self.assertEqual( self.g.safe_uri(cwd_uri + '/tests/test%20data/', '/fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) self.assertEqual( self.g.safe_uri(cwd_uri + '/tests/test data/', 'fфズ oo.mp3â'), cwd_uri + '/tests/test%20data/f_oo.mp3a' ) # 4. the complete path exists original_name = os.getcwd() + '/tests/test%20data/audio/a.wav' self.assertEqual( self.g.safe_uri('file:///', original_name), cwd_uri + '/tests/test%20data/audio/a.wav' ) self.assertEqual( self.g.safe_uri(cwd_uri, '/tests/test data/'), cwd_uri + '/tests/test%20data/' ) self.assertEqual( self.g.safe_uri(cwd_uri, 'tests/test data/'), cwd_uri + '/tests/test%20data/' ) # 5. paths with special chars can be transformed into existing paths. # Doesn't increment the filename. on_task_finished of gstreamer.py # does that later. To reuse paths that were generated from {artist} # tags with special characters original_name = os.getcwd() + '/tests/test%20data/âuズdio/â.wav' self.assertEqual( self.g.safe_uri('file:///', original_name), cwd_uri + '/tests/test%20data/audio/a.wav' ) # 6. doesn't change %20 spaces in URIs into _20, but rather into _ # and keeps the URI scheme. # test%20data exists (test data), so it keeps the %20, because the # output should be an uri as well, just like the input. original_name = os.getcwd() + '/tests/test%20data/fo%20o.mp3' self.assertEqual( self.g.safe_uri('file:///', original_name), cwd_uri + '/tests/test%20data/fo_o.mp3' ) # 7. any path added as parent is not modified self.assertEqual( self.g.safe_uri('file:///ab cd', 'fo o.mp3'), 'file:///ab%20cd/fo_o.mp3' ) self.assertEqual( self.g.safe_uri('file:///fфズ', 'fo o.mp3'), 'file:///f%D1%84%E3%82%BA/fo_o.mp3' ) self.assertEqual( self.g.safe_uri(cwd_uri + '/tests/test data', 'audio/a.wav'), cwd_uri + '/tests/test%20data/audio/a.wav' ) # 8. some weird URI schema means that 'test data' is probably not our # existing folder in the filesystem. The URI scheme should be file:// # for that. Hence replace the space. original_name = 'tests/test%20data/fo%20o.mp3' self.assertEqual( self.g.safe_uri('foo://' + os.getcwd(), original_name), 'foo://' + os.getcwd() + '/tests/test_data/fo_o.mp3' ) # don't break uri authorities original_name = 'tests/test%20data/fo%20o.mp3' self.assertEqual( self.g.safe_uri('foo://foo@bar:1234/', original_name), 'foo://foo@bar:1234/tests/test_data/fo_o.mp3' ) def test_suffix(self): get_gio_settings().set_string('output-mime-type', 'audio/x-vorbis') # figures out the suffix when created self.g = TargetNameGenerator() self.g.same_folder_as_input = True self.g.create_subfolders = False self.assertEqual( self.g.generate_target_uri(self.s, True), "/path/to/file.ogg" ) def test_no_extension(self): get_gio_settings().set_string('output-mime-type', 'audio/x-m4a') # figures out the suffix when created self.g = TargetNameGenerator() self.s = SoundFile("file:///path/to/file") self.g.same_folder_as_input = True self.g.create_subfolders = False self.assertEqual( self.g.generate_target_uri(self.s, True), "/path/to/file.m4a" ) def test_basename(self): self.g.suffix = "ogg" self.g.basename_pattern = "{track-number:02}-{title}" self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s, True), "/path/to/01-Hi_Ho.ogg" ) def test_location(self): self.g.suffix = "ogg" self.g.selected_folder = "file:///music" self.g.subfolder_pattern = "{artist}/{album}" self.g.basename_pattern = "{track-number:02}-{title}" self.assertEqual( self.g.generate_target_uri(self.s, True), "/music/Foo_Bar/IS__TOO/01-Hi_Ho.ogg" ) def test_location_escape(self): self.s = SoundFile("file:///path/to/file with spaces") self.g.replace_messy_chars = False self.g.suffix = "ogg" self.g.selected_folder = "file:///mu sic" self.g.create_subfolders = False self.assertEqual( self.g.generate_target_uri(self.s), "file:///mu%20sic/file%20with%20spaces.ogg" ) def test_basename_with_spaces(self): uri = 'file:///spa%20ce/sub%20folder/foo.mp3' self.s = SoundFile(uri, 'file:///spa%20ce/') self.g.replace_messy_chars = False self.g.suffix = "ogg" self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s), "file:///spa%20ce/sub%20folder/foo.ogg" ) def test_basename_with_spaces_messy(self): uri = 'file:///spa%20ce/sub%20folder/foo.mp3' self.s = SoundFile(uri, 'file:///spa%20ce/') self.g.replace_messy_chars = True self.g.suffix = "ogg" self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s), "file:///spa%20ce/sub_folder/foo.ogg" ) def test_basename_with_spaces_existing(self): base_path = 'file:///' + os.getcwd() + '/tests/test%20data' uri = base_path + '/audio/a.wav' self.s = SoundFile(uri, base_path) self.g.replace_messy_chars = False self.g.suffix = "ogg" self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s), base_path + '/audio/a.ogg' ) def test_basename_with_spaces_existing_messy(self): base_path = 'file:///' + os.getcwd() + '/tests/test%20data' uri = base_path + '/audio/a.wav' self.s = SoundFile(uri, base_path) self.g.replace_messy_chars = True self.g.suffix = "ogg" self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s), base_path + '/audio/a.ogg' ) def test_uri(self): self.g.suffix = "ogg" self.g.create_subfolders = False self.g.same_folder_as_input = True self.g.replace_messy_chars = False self.s = SoundFile("ssh://user@server:port/path/to/%20file.flac") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.assertEqual( self.g.generate_target_uri(self.s), "ssh://user@server:port/path/to/%20file.ogg" ) def testURILocalDestination(self): self.g.suffix = "ogg" self.g.selected_folder = "file:///music" self.g.create_subfolders = False self.s = SoundFile("ssh://user@server:port/p%25ath/to/file.flac") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.assertEqual( self.g.generate_target_uri(self.s), "file:///music/file.ogg" ) def test_uri_distant_destination(self): self.g.suffix = "ogg" self.g.selected_folder = "ftp://user2@dest-server:another-port:/music/" self.g.create_subfolders = False self.s = SoundFile("ssh://user@server:port/path/to/file.flac") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.assertEqual( self.g.generate_target_uri(self.s), "ftp://user2@dest-server:another-port:/music/file.ogg" ) def testUriLikePaths(self): self.g.suffix = "ogg" self.g.selected_folder = "file:///music%20" self.g.same_folder_as_input = False self.s = SoundFile("file:///path/%2525") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.g.subfolder_pattern = "{artist}/{album}" self.g.create_subfolders = True self.g.replace_messy_chars = False self.assertEqual( self.g.generate_target_uri(self.s, True), "/music /Foo Bar/IS: TOO/%25.ogg" ) def test_uri_like_paths_messy(self): self.g.suffix = "ogg" self.g.selected_folder = "file:///music%20" self.g.same_folder_as_input = False self.s = SoundFile("file:///path/%2525") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.g.subfolder_pattern = "{artist}/{album}" self.g.create_subfolders = True self.g.replace_messy_chars = True self.assertEqual( self.g.generate_target_uri(self.s, True), "/music /Foo_Bar/IS__TOO/_25.ogg" ) def test_uri_unicode(self): self.g.suffix = "ogg" self.g.selected_folder = ( "ftp://user2@dest-server:another-port:" + quote("/mûsîc/") ) self.g.replace_messy_chars = False self.g.create_subfolders = False self.s = SoundFile( "ssh://user@server:port" + quote( "/path/to/file with \u041d chars.flac" ) ) self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.assertEqual( self.g.generate_target_uri(self.s), "ftp://user2@dest-server:another-port:/m%C3%BBs%C3%AEc/file" "%20with%20%D0%9D%20chars.ogg" ) def testURIUnicode_utf8(self): self.g.suffix = "ogg" self.g.selected_folder = ( "ftp://user2@dest-server:another-port:" + quote("/mûsîc/") ) self.g.replace_messy_chars = False self.s = SoundFile( "ssh://user@server:port" + quote( "/path/to/file with strângë chàrs фズ.flac" ) ) self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.g.create_subfolders = False self.g.same_folder_as_input = False self.assertEqual( self.g.generate_target_uri(self.s), "ftp://user2@dest-server:another-port:" + quote("/mûsîc/file with strângë chàrs фズ.ogg") ) def test_uri_unicode_messy(self): self.g.suffix = "ogg" self.g.selected_folder = ( "ftp://user2@dest-server:another-port:" + quote("/mûsîc/") ) self.s = SoundFile( "ssh://user@server:port" + quote("/path/to/file with strângë chàrs.flac") ) self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.g.replace_messy_chars = True self.g.create_subfolders = False self.g.same_folder_as_input = False self.assertEqual( self.g.generate_target_uri(self.s), "ftp://user2@dest-server:another-port:/" + quote("mûsîc") + "/file_with_strange_chars.ogg" ) def testDisplay(self): self.g.suffix = "ogg" self.s = SoundFile("ssh://user@server:port/path/to/file.flac") self.assertEqual( self.s.filename_for_display, "file.flac" ) self.s = SoundFile("ssh://user@server:port/path/to/fîlé.flac") self.assertEqual( self.s.filename_for_display, "fîlé.flac" ) self.s = SoundFile( "ssh://user@server:port/path/to/fileфズ.flac" ) self.assertEqual(self.s.filename_for_display, "fileфズ.flac") def test8bits(self): self.s = SoundFile( 'file://' + quote("/path/to/file\xa0\xb0\xc0\xd0.flac") ) self.g.suffix = "ogg" self.g.replace_messy_chars = False self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s, False), 'file://' + quote("/path/to/file\xa0\xb0\xc0\xd0.ogg") ) def test8bits_messy(self): self.s = SoundFile( 'file://' + quote("/path/to/file\xa0\xb0\xc0\xd0.flac") ) self.g.suffix = "ogg" self.g.replace_messy_chars = True self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s, False), "file:///path/to/file_A.ogg" ) def test8bits_tags(self): self.g.replace_messy_chars = False self.s = SoundFile("file:///path/to/fileyop.flac") self.s.tags.update({ "artist": "\xa0\xb0\xc0\xd0", "title": "\xa1\xb1\xc1\xd1", "album": "\xa2\xb2\xc2\xd2", "track-number": 1, "track-count": 11, }) self.g.suffix = "ogg" self.g.selected_folder = "file:///music" self.g.subfolder_pattern = "{artist}/{album}" self.g.basename_pattern = "{title}" self.assertEqual( self.g.generate_target_uri(self.s, False), 'file://' + quote( "/music/\xa0\xb0\xc0\xd0/\xa2\xb2" "\xc2\xd2/\xa1\xb1\xc1\xd1.ogg" ) ) def test_root(self): self.s = SoundFile("file:///path/to/file.flac", "file:///path/") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.g.suffix = "ogg" self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s, True), "/path/to/file.ogg" ) def test_root_path(self): self.s = SoundFile("file:///path/#to/file.flac", "file:///path/") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.g.suffix = "ogg" self.g.selected_folder = "file:///music" self.g.replace_messy_chars = False self.g.create_subfolders = False self.g.same_folder_as_input = False self.assertEqual( self.g.generate_target_uri(self.s, False), "file:///music/%23to/file.ogg" ) def test_root_custom_pattern(self): self.s = SoundFile("file:///path/#to/file.flac", "file:///path/") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11 }) self.g.suffix = "ogg" self.g.basename_pattern = "{genre}/{title}" self.g.replace_messy_chars = True self.g.create_subfolders = False self.g.same_folder_as_input = True self.assertEqual( self.g.generate_target_uri(self.s, True), # basefolder handling is disabled when the pattern has a / "/path/Unknown_Genre/Hi_Ho.ogg" ) def test_default_pattern_values(self): gio_settings = get_gio_settings() gio_settings.set_int('name-pattern-index', -1) # without timestamp because I'd like to avoid having a test that # fails randomly gio_settings.set_string('custom-filename-pattern', ( '{Artist}/{Album}/{Album-Artist}/{Title}/{Track}/{Total}/{Genre}' '/{Date}/{Year}/{DiscNumber}/{DiscTotal}/{Ext}/{inputname}/' '{filename}' )) self.g = TargetNameGenerator() self.s = SoundFile("file:///file.flac", "file:///") self.g.suffix = "ogg" self.g.replace_messy_chars = False self.g.create_subfolders = False self.g.selected_folder = 'file:///foo' self.assertEqual( self.g.generate_target_uri(self.s, True), "/foo/Unknown Artist/Unknown Album/Unknown Artist/file/00/00/" "Unknown Genre/Unknown Date/Unknown Year/0/0/ogg/file/file.ogg" ) def test_find_format_string_tags(self): pattern = '{i}{a}b{c}{{d}}{e}c{{{g}}}{hhh}' variables = self.g.find_format_string_tags(pattern) mapping = {variable: 1 for variable in variables} formatted = pattern.format(**mapping) # if it didn't crash it's already working actually self.assertEqual(formatted, '11b1{d}1c{1}1') def test_pattern_unknown_tag(self): gio_settings = get_gio_settings() gio_settings.set_int('name-pattern-index', -1) # without timestamp because I'd like to avoid having a test that # fails randomly gio_settings.set_string('custom-filename-pattern', ( '{venue}/{weather}' )) self.g = TargetNameGenerator() self.s = SoundFile("file:///file.flac", "file:///") self.g.suffix = "ogg" self.g.replace_messy_chars = False self.g.create_subfolders = False self.g.selected_folder = 'file:///foo' self.assertEqual( self.g.generate_target_uri(self.s, True), "/foo/Unknown Venue/Unknown Weather.ogg" ) def test_leading_slash_pattern(self): self.s = SoundFile("file:///path/#to/file.flac", "file:///path/") self.s.tags.update({ "title": "Hi Ho" }) self.g.suffix = "ogg" # basename_patterns can be user defined in a text input. if it # contains slashes, the subfolder_pattern will be overwritten, # so that custom subfolder patterns can be used by typing into # the basename pattern. self.g.basename_pattern = "/home/foo/{title}" self.g.create_subfolders = True self.g.subfolder_pattern = "/bar" self.g.selected_folder = "/asdf" self.assertEqual( self.g.generate_target_uri(self.s, True), "/asdf/home/foo/Hi_Ho.ogg" ) def test_leading_slash_subfolder_pattern(self): self.s = SoundFile("file:///path/#to/file.flac", "file:///path/") self.s.tags.update({ "title": "Hi Ho" }) self.g.suffix = "ogg" self.g.basename_pattern = "{title}" self.g.create_subfolders = True self.g.subfolder_pattern = "/bar" self.g.selected_folder = "/asdf" self.assertEqual( self.g.generate_target_uri(self.s, True), "/asdf/bar/Hi_Ho.ogg" ) def test_root_path_custom_pattern(self): self.s = SoundFile("file:///path/to/file.flac", "file:///path/") self.s.tags.update({ "artist": "Foo Bar", "title": "Hi Ho", "album": "IS: TOO", "track-number": 1, "track-count": 11, }) self.g.suffix = "ogg" self.g.selected_folder = "file:///music" self.g.basename_pattern = "{title}" self.g.create_subfolders = False self.g.same_folder_as_input = False self.assertEqual( self.g.generate_target_uri(self.s, True), "/music/to/Hi_Ho.ogg" ) def test_quote(self): self.s = SoundFile('file://' + quote("/path%'#/to/file%'#.flac")) self.s.tags.update({ "artist": "Foo%'#Bar", "title": "Hi%'#Ho", }) self.g.replace_messy_chars = False self.g.same_folder_as_input = True self.g.create_subfolders = False self.g.suffix = "ogg" self.assertEqual( self.g.generate_target_uri(self.s, False), 'file://' + quote("/path%'#/to/file%'#.ogg") ) self.g.create_subfolders = True self.g.subfolder_pattern = "{artist}" self.g.basename_pattern = "{title}" self.assertEqual( self.g.generate_target_uri(self.s, False), 'file://' + quote("/path%'#/to/Foo%'#Bar/Hi%'#Ho.ogg") ) # temporary filename generation def test_temporary1(self): self.s = SoundFile('file:///foo/bar.mp3') self.g.same_folder_as_input = False self.g.replace_messy_chars = True self.g.selected_folder = 'file:///music' temp_path = self.g.generate_temp_path(self.s) expected = 'file:///music/bar.mp3_' self.assertTrue( temp_path.startswith(expected), 'expected {} to start with {}'.format(temp_path, expected) ) self.assertTrue(temp_path.endswith('_SC_')) def test_temporary2(self): self.s = SoundFile('file:///foo/bar.mp3', 'file:///') # base_path 'file:///' will be ignored self.g.same_folder_as_input = False self.g.replace_messy_chars = False self.g.selected_folder = 'file:///music' temp_path = self.g.generate_temp_path(self.s) expected = 'file:///music/bar.mp3~' self.assertTrue( temp_path.startswith(expected), 'expected {} to start with {}'.format(temp_path, expected) ) self.assertTrue(temp_path.endswith('~SC~')) def test_temporary3(self): self.s = SoundFile('file:///foo/bar.mp3') self.g.same_folder_as_input = True self.g.replace_messy_chars = True self.g.selected_folder = 'file:///etfdzhdrudf' temp_path = self.g.generate_temp_path(self.s) expected = 'file:///foo/bar.mp3_' self.assertTrue( temp_path.startswith(expected), 'expected {} to start with {}'.format(temp_path, expected) ) self.assertTrue(temp_path.endswith('_SC_')) def test_temporary4(self): self.s = SoundFile('file:///foo/bar.mp3') self.g.same_folder_as_input = True self.g.replace_messy_chars = False self.g.selected_folder = 'file:///etfdzhdrudf' temp_path = self.g.generate_temp_path(self.s) expected = 'file:///foo/bar.mp3~' self.assertTrue( temp_path.startswith(expected), 'expected {} to start with {}'.format(temp_path, expected) ) self.assertTrue(temp_path.endswith('~SC~')) def test_temporary5(self): self.s = SoundFile('file:///foo/test/bar.mp3', 'file:///foo/') self.g.same_folder_as_input = True self.g.replace_messy_chars = False self.g.selected_folder = 'file:///etfdzhdrudf' temp_path = self.g.generate_temp_path(self.s) expected = 'file:///foo/bar.mp3~' self.assertTrue( temp_path.startswith(expected), 'expected {} to start with {}'.format(temp_path, expected) ) self.assertTrue(temp_path.endswith('~SC~')) if __name__ == "__main__": unittest.main() soundconverter-4.0.5/tests/testcases/taskqueue.py000066400000000000000000000412471460501237000223270ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # SoundConverter - GNOME application for converting between audio formats. # Copyright 2004 Lars Wirzenius # Copyright 2005-2020 Gautier Portet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3 of the License. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 # USA import time import unittest import threading from unittest.mock import Mock from gi.repository import GLib, Gst from soundconverter.util.taskqueue import TaskQueue, Timer from soundconverter.util.task import Task from soundconverter.util.settings import get_gio_settings from util import reset_settings class SyncSleepTask(Task): """Task that does nothing. Multiple of those tasks can't run in parallel. """ def __init__(self): super().__init__() def get_progress(self): """Fraction of how much of the task is completed.""" # it's blocking anyways, so progress cannot be asked for # until the end. return 1, 1 def cancel(self): pass def run(self): time.sleep(0.1) self.emit('done') def pause(self): # cannot be paused pass def resume(self): pass class AsyncSleepTask(Task): """Task that does nothing as well, but this time asynchronously. Can run in parallel. This is just an example on how a Task might work. """ def __init__(self): self.progress = 0 self.paused = False self.cancelled = False self.resume_event = threading.Event() super().__init__() def get_progress(self): """Fraction of how much of the task is completed.""" return self.progress, 1 def async_stuff(self, bus): """Sleep for some time and emit an event for GLib.""" # sleep for a total of 0.25s, simulate some sort of task that can # be paused. self.progress = 0 while self.progress < 1: if self.paused: # wait for the resume event self.resume_event.wait() self.resume_event.clear() time.sleep(0.025) if self.cancelled: # don't post the msg to the bus, # because that would indicate success return self.progress += 0.1 self.progress = 1 # GLib has an event loop (possibly very similar to the one in node.js) # which, from my uneducated perspective, looks like it calls the # functions passed to idle_add and bus.connect as soon as it can # during some gtk main iterations. # Trigger calling done during the next gtk iterations: # this is also what gstreamer pipelines emit when they are done msg_type = Gst.MessageType(Gst.MessageType.EOS) msg = Gst.Message.new_custom(msg_type, None, None) bus.post(msg) def pause(self): self.paused = True def resume(self): self.paused = False self.resume_event.set() def cancel(self): self.cancelled = True self.progress = 0 # make sure to not block cancelling because of the pause self.resume() def run(self): self.cancelled = False bus = Gst.Bus() bus.connect('message', self.done) bus.add_signal_watch() thread = threading.Thread(target=self.async_stuff, args=(bus,)) thread.start() # don't do thread.join, because that would block the main thread def done(self, bus, message): """Write down that it is finished and call the callback.""" self.running = False super().done() class SyncSleepTaskTest(unittest.TestCase): def test(self): """Checks if basic Task class functions are working properly.""" task = SyncSleepTask() done = Mock() task.connect('done', done) task.run() done.assert_called_with(task) class AsyncSleepTaskTest(unittest.TestCase): """Checks if async Task class functions are working properly.""" def test_pause_resume(self): loop = GLib.MainLoop() context = loop.get_context() task = AsyncSleepTask() self.assertEqual(task.get_progress()[0], 0) done = Mock() task.connect('done', done) task.run() time.sleep(0.15) context.iteration(False) self.assertGreater(task.get_progress()[0], 0) self.assertLess(task.get_progress()[0], 1) done.assert_not_called() task.pause() time.sleep(0.15) context.iteration(False) self.assertGreater(task.get_progress()[0], 0) self.assertLess(task.get_progress()[0], 1) done.assert_not_called() task.resume() time.sleep(0.15) context.iteration(False) done.assert_called_with(task) self.assertEqual(task.get_progress()[0], 1) def test_cancel_run(self): loop = GLib.MainLoop() context = loop.get_context() task = AsyncSleepTask() done = Mock() task.connect('done', done) task.run() time.sleep(0.15) context.iteration(False) done.assert_not_called() task.cancel() done.assert_not_called() time.sleep(0.15) context.iteration(False) done.assert_not_called() task.run() done.assert_not_called() time.sleep(0.15) context.iteration(False) done.assert_not_called() time.sleep(0.15) context.iteration(False) done.assert_called_with(task) class AsyncMulticoreTaskQueueTest(unittest.TestCase): """Example closest to the real world, should be tested well.""" def setUp(self): get_gio_settings().set_boolean('limit-jobs', True) self.num_tasks = 5 q = TaskQueue() for i in range(self.num_tasks): q.add(AsyncSleepTask()) self.assertEqual(len(q.done), 0) self.assertEqual(q.pending.qsize(), i + 1) self.assertEqual(len(q.running), 0) self.assertEqual(q.pending.qsize(), self.num_tasks) self.q = q def tearDown(self): self.q = None def test_queue_multiple_async(self): self.num_jobs = 2 get_gio_settings().set_int('number-of-jobs', self.num_jobs) self.q.run() self.assertEqual(len(self.q.done), 0) # simultaneously running tasks are limited: self.assertEqual(self.q.pending.qsize(), self.num_tasks - self.num_jobs) self.assertEqual(len(self.q.running), self.num_jobs) # in the ui, some gtk iterations are performed to keep the ui # responsive while waiting for all tasks to finish. loop = GLib.MainLoop() context = loop.get_context() # call functions that are added to the event loop while len(self.q.done) < self.num_tasks: # since only two tasks can be done at a time, after an iteration # new tasks are put into running state. So iteration has to be # called multiple times context.iteration(True) self.assertEqual(len(self.q.done), self.num_tasks) self.assertEqual(self.q.pending.qsize(), 0) self.assertEqual(len(self.q.running), 0) def test_pause_resume(self): self.num_jobs = 5 get_gio_settings().set_int('number-of-jobs', self.num_jobs) self.assertEqual(self.q.get_progress()[0], 0) self.assertEqual(self.q.pending.qsize(), self.num_tasks) self.assertEqual(len(self.q.running), 0) self.assertEqual(len(self.q.done), 0) self.assertEqual(self.q.get_duration(), 0) self.q.run() self.assertFalse(self.q.paused) self.assertEqual(self.q.pending.qsize(), self.num_tasks - self.num_jobs) self.assertEqual(len(self.q.running), self.num_jobs) time.sleep(0.1) self.assertGreater(self.q.get_duration(), 0.08) self.assertGreater(self.q.get_progress()[0], 0) self.assertLess(self.q.get_progress()[0], 1) self.assertGreater(self.q.running[0].get_progress()[0], 0) self.assertLess(self.q.running[0].get_progress()[0], 1) self.assertGreater(self.q.running[0].get_progress()[0], 0) self.assertLess(self.q.running[0].get_progress()[0], 1) self.assertEqual(len(self.q.get_progress()[1]), self.num_tasks) duration_before = self.q.get_duration() self.q.pause() self.assertTrue(self.q.paused) self.assertEqual(self.q.pending.qsize(), self.num_tasks - self.num_jobs) self.assertEqual(len(self.q.running), self.num_jobs) # after some time and running all accumulated glib events and stuff, # no job should be finished due to them being paused time.sleep(0.3) loop = GLib.MainLoop() context = loop.get_context() context.iteration(False) self.assertGreater(self.q.get_progress()[0], 0) self.assertLess(self.q.get_progress()[0], 1) self.assertGreater(self.q.running[0].get_progress()[0], 0) self.assertLess(self.q.running[0].get_progress()[0], 1) self.assertEqual(len(self.q.get_progress()[1]), self.num_tasks) self.assertEqual(self.q.pending.qsize(), self.num_tasks - self.num_jobs) self.assertEqual(len(self.q.running), self.num_jobs) # possibly some miniscule time passes until the pause time is # stored in self.q, so allow for some small difference self.assertLess(abs(duration_before - self.q.get_duration()), 0.001) self.q.resume() self.assertLess(abs(duration_before - self.q.get_duration()), 0.001) self.assertFalse(self.q.paused) # even after resuming, time has to pass self.assertEqual(self.q.pending.qsize(), self.num_tasks - self.num_jobs) self.assertEqual(len(self.q.running), self.num_jobs) self.assertGreater(self.q.get_progress()[0], 0) self.assertLess(self.q.get_progress()[0], 1) self.assertGreater(self.q.running[0].get_progress()[0], 0) self.assertLess(self.q.running[0].get_progress()[0], 1) self.assertEqual(len(self.q.get_progress()[1]), self.num_tasks) # wait until the queue is completely done while len(self.q.done) < self.num_tasks: # this blocks until bus.post(msg) is called: context.iteration(True) self.assertEqual(len(self.q.done), self.num_tasks) self.assertEqual(self.q.pending.qsize(), 0) self.assertEqual(len(self.q.running), 0) self.assertEqual(self.q.get_progress()[0], 1) self.assertEqual(self.q.done[0].get_progress()[0], 1) duration = self.q.get_duration() time.sleep(0.05) self.assertLess(abs(self.q.get_duration() - duration), 0.001) self.assertEqual(len(self.q.get_progress()[1]), self.num_tasks) def test_cancel_run(self): # all tasks are running at once self.num_jobs = 5 get_gio_settings().set_int('number-of-jobs', self.num_jobs) loop = GLib.MainLoop() context = loop.get_context() self.assertEqual(len(self.q.done), 0) self.assertEqual(self.q.pending.qsize(), self.num_tasks) self.assertEqual(len(self.q.running), 0) self.assertEqual(self.q.get_duration(), 0) self.q.run() self.assertEqual(len(self.q.done), 0) self.assertEqual(self.q.pending.qsize(), self.num_tasks - self.num_jobs) self.assertEqual(len(self.q.running), self.num_jobs) self.assertEqual(self.q.get_progress()[0], 0) time.sleep(0.15) context.iteration(False) self.assertGreater(self.q.get_duration(), 0.1) self.assertGreater(self.q.get_progress()[0], 0) self.assertLess(self.q.get_progress()[0], 1) self.q.cancel() self.assertEqual(self.q.get_duration(), 0) self.assertEqual(len(self.q.done), 0) self.assertEqual(self.q.pending.qsize(), self.num_tasks) self.assertEqual(len(self.q.running), 0) self.assertEqual(self.q.get_progress()[0], 0) # after some time and running all accumulated glib events and stuff, # no job should be finished due to them not running anymore. time.sleep(0.3) context.iteration(False) self.assertEqual(self.q.get_duration(), 0) self.assertEqual(len(self.q.done), 0) self.assertEqual(self.q.pending.qsize(), self.num_tasks) self.assertEqual(len(self.q.running), 0) self.assertEqual(self.q.get_progress()[0], 0) self.q.run() # even after resuming, time has to pass, but the previous progress of # 0.3 seconds should be reset. time.sleep(0.15) context.iteration(False) self.assertGreater(self.q.get_duration(), 0.1) self.assertEqual(len(self.q.done), 0) self.assertEqual(self.q.pending.qsize(), self.num_tasks - self.num_jobs) self.assertEqual(len(self.q.running), self.num_jobs) self.assertGreater(self.q.get_progress()[0], 0) self.assertLess(self.q.get_progress()[0], 1) # only after some more time all are done, but don't sleep longer # than 0.15 more seconds, because after 0.25s they should be done. slept = 0 while len(self.q.done) < self.num_tasks and slept < 0.15: time.sleep(0.05) slept += 0.05 context.iteration(False) self.assertEqual(len(self.q.done), self.num_tasks) self.assertEqual(self.q.pending.qsize(), 0) self.assertEqual(len(self.q.running), 0) self.assertEqual(self.q.get_progress()[0], 1) self.assertGreater(self.q.get_duration(), 0.2) class TaskQueueTest(unittest.TestCase): def tearDown(self): reset_settings() def test_queue_single(self): """A TaskQueue only consisting of synchronous tasks.""" get_gio_settings().set_boolean('limit-jobs', True) get_gio_settings().set_int('number-of-jobs', 1) q = TaskQueue() q.add(SyncSleepTask()) self.assertEqual(q.pending.qsize(), 1) self.assertEqual(len(q.running), 0) q.add(SyncSleepTask()) self.assertEqual(q.pending.qsize(), 2) self.assertEqual(len(q.running), 0) q.run() self.assertEqual(q.pending.qsize(), 0) self.assertEqual(len(q.running), 0) def test_queue_single_async(self): get_gio_settings().set_boolean('limit-jobs', True) get_gio_settings().set_int('number-of-jobs', 1) q = TaskQueue() q.add(AsyncSleepTask()) self.assertEqual(len(q.done), 0) self.assertEqual(q.pending.qsize(), 1) self.assertEqual(len(q.running), 0) self.assertEqual(q.get_duration(), 0) q.run() self.assertEqual(len(q.done), 0) self.assertEqual(q.pending.qsize(), 0) self.assertEqual(len(q.running), 1) # in the ui, some gtk iterations are performed to keep the ui # responsive while waiting for all tasks to finish. loop = GLib.MainLoop() context = loop.get_context() # call functions that are added to the event loop. In this case, # the listeners for messages from our AsyncSleepTask # wait until the queue is completely done while len(q.done) < 1: # this blocks until bus.post(msg) is called: context.iteration(True) self.assertEqual(len(q.done), 1) self.assertEqual(q.pending.qsize(), 0) self.assertEqual(len(q.running), 0) self.assertGreater(q.get_duration(), 0.2) class TestTimer(unittest.TestCase): def test(self): timer = Timer() time.sleep(0.01) self.assertEqual(timer.get_duration(), 0) timer.start() self.assertLess(timer.get_duration(), 0.001) time.sleep(0.01) self.assertLess(timer.get_duration(), 0.011) timer.pause() time.sleep(0.01) self.assertLess(timer.get_duration(), 0.011) timer.resume() time.sleep(0.01) self.assertLess(timer.get_duration(), 0.021) timer.pause() time.sleep(0.01) timer.resume() self.assertLess(timer.get_duration(), 0.021) timer.reset() time.sleep(0.01) self.assertEqual(timer.get_duration(), 0) timer.start() time.sleep(0.01) self.assertLess(timer.get_duration(), 0.011) if __name__ == "__main__": unittest.main() soundconverter-4.0.5/tests/util.py000066400000000000000000000025531460501237000172740ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- """utils used by tests""" import sys from importlib.machinery import SourceFileLoader from importlib.util import spec_from_loader, module_from_spec from soundconverter.util.settings import settings from unittest.mock import patch DEFAULT_SETTINGS = settings.copy() def reset_settings(): """Reset the global settings to their initial state.""" # convert to list otherwise del won't work for key in list(settings.keys()): if key in DEFAULT_SETTINGS: settings[key] = DEFAULT_SETTINGS[key] else: del settings[key] # batch tests assume that recursive is off by default: assert (("recursive" not in settings) or (not settings["recursive"])) def launch(argv=None, bin_path='bin/soundconverter'): """Start the soundconverter with the command line argument array argv. The batch mode is synchronous since it iterates the loop itself until finished. """ # the tests should wait until the queues are done, so the sleep # can be omitted to speed them up. settings['gtk_close_sleep'] = 0 if not argv: argv = [] with patch.object(sys, 'argv', [''] + [str(arg) for arg in argv]): loader = SourceFileLoader('launcher', bin_path) spec = spec_from_loader('launcher', loader) spec.loader.exec_module(module_from_spec(spec))