From b05a7ac3ef149ae625990f2b45b69e5b49fbba77 Mon Sep 17 00:00:00 2001 From: LoRd_MuldeR Date: Tue, 3 Dec 2013 22:19:11 +0100 Subject: [PATCH] Moved all sound effects into Qt-style resources. Sound files can be played back directly from program memory by passing a pointer to the WAVE data into PlaySound as the first argument (and using the SND_MEMORY flag), it's just not documented very well. --- LameXP.rc | 21 - LameXP_VS2013.vcxproj | 13 + LameXP_VS2013.vcxproj.filters | 10 +- etc/Translation/Blank.ts | 714 +++++++++++++++++----------------- etc/Translation/LameXP_EN.ts | 34 +- etc/Translation/LameXP_PL.ts | 714 +++++++++++++++++----------------- etc/Translation/LameXP_SV.ts | 714 +++++++++++++++++----------------- gui/ProcessingDialog.ui | 4 +- res/Sounds.qrc | 18 + res/images/Working.gif | Bin 11334 -> 10556 bytes src/Config.h | 2 +- src/Dialog_About.cpp | 7 +- src/Dialog_MainWindow.cpp | 34 +- src/Dialog_Processing.cpp | 33 +- src/Dialog_Update.cpp | 3 +- src/Dialog_WorkingBanner.cpp | 25 +- src/Dialog_WorkingBanner.h | 1 + src/Global.h | 3 +- src/Global_Win32.cpp | 87 ++++- src/Resource.h | 13 - 20 files changed, 1262 insertions(+), 1188 deletions(-) create mode 100644 res/Sounds.qrc diff --git a/LameXP.rc b/LameXP.rc index 9322c18f..dec88088 100644 --- a/LameXP.rc +++ b/LameXP.rc @@ -102,25 +102,6 @@ END #endif // APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// WAVE -// - -IDR_WAVE_ABOUT WAVE "res\\sounds\\uuaarrgh.wav" -IDR_WAVE_SUCCESS WAVE "res\\sounds\\success.wav" -IDR_WAVE_ERROR WAVE "res\\sounds\\error.wav" -IDR_WAVE_ABORTED WAVE "res\\sounds\\aborted.wav" -IDR_WAVE_WHAMMY WAVE "res\\sounds\\whammy.wav" -IDR_WAVE_WOOHOO WAVE "res\\sounds\\woohoo.wav" -IDR_WAVE_SHUTDOWN WAVE "res\\sounds\\shutdown.wav" -IDR_WAVE_BEEP WAVE "res\\sounds\\beep.wav" -IDR_WAVE_BEEP_LONG WAVE "res\\sounds\\beep2.wav" -IDR_WAVE_WAITING WAVE "res\\sounds\\waiting.wav" -IDR_WAVE_BLAST WAVE "res\\sounds\\blast.wav" -IDR_WAVE_TICK WAVE "res\\sounds\\tick.wav" -IDR_WAVE_DROP WAVE "res\\sounds\\drop.wav" - ///////////////////////////////////////////////////////////////////////////// // // Icon @@ -134,7 +115,6 @@ IDI_ICON2 ICON "res\\FolderIcon.ico" ///////////////////////////////////////////////////////////////////////////// - #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // @@ -144,4 +124,3 @@ IDI_ICON2 ICON "res\\FolderIcon.ico" ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED - diff --git a/LameXP_VS2013.vcxproj b/LameXP_VS2013.vcxproj index 8d44c85a..dc7825be 100644 --- a/LameXP_VS2013.vcxproj +++ b/LameXP_VS2013.vcxproj @@ -412,6 +412,7 @@ del "$(TargetDir)imageformats\q???d4.dll" + @@ -1326,6 +1327,18 @@ del "$(TargetDir)imageformats\q???d4.dll" $(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs) $(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs) + + Document + "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" + "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" + "$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" + RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp" + RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp" + RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp" + $(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs) + $(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs) + diff --git a/LameXP_VS2013.vcxproj.filters b/LameXP_VS2013.vcxproj.filters index 9e68adcc..61cc9e9d 100644 --- a/LameXP_VS2013.vcxproj.filters +++ b/LameXP_VS2013.vcxproj.filters @@ -421,6 +421,9 @@ Source Files + + Generated Files\QRC + @@ -758,7 +761,12 @@ Resources - + + Resources + + + Header Files + diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts index d1c4a401..15e89bb5 100644 --- a/etc/Translation/Blank.ts +++ b/etc/Translation/Blank.ts @@ -54,334 +54,334 @@ - + LameXP - Audio Encoder Front-end - + Please visit %1 for news and updates! - - + + Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. - + Note: LameXP is free software. Do <b>not</b> pay money to obtain or use LameXP! If some third-party website tries to make you pay for downloading LameXP, you should <b>not</b> respond to the offer !!! - + The following people have contributed to LameXP: - + Programmers: - + Project Leader - + Translators: - + Special thanks to: - + Doom9's Forum - + Gleitz | German Doom9 - + Hydrogenaudio Forums - + RareWares - + GitHub - + SourceForge - + Qt Developer Network - + BerliOS Developer - + CodePlex - + Marius Hudea - + Codecs.com - + If you are willing to contribute a LameXP translation, feel free to contact us! - + The following third-party software is used in LameXP: - + LAME - OpenSource mp3 Encoder - - - - - - - - - - - - + + + + + + + + + + + + Released under the terms of the GNU Lesser General Public License. - + OggEnc - Ogg Vorbis Encoder - + Completely open and patent-free audio encoding technology. - + Nero AAC Reference MPEG-4 Encoder - + Freeware state-of-the-art HE-AAC encoder with 2-Pass support. - + Available from vendor web-site as free download: - + Aften - A/52 audio encoder - + FLAC - Free Lossless Audio Codec - + Open and patent-free lossless audio compression technology. - + Opus Audio Codec - + Totally open, royalty-free, highly versatile audio codec. - + mpg123 - Fast Console MPEG Audio Player/Decoder - + FAAD - OpenSource MPEG-4 and MPEG-2 AAC Decoder - + Released under the terms of the GNU General Public License. - + Valdec from AC3Filter Tools - AC3/DTS Decoder - + WavPack - Hybrid Lossless Compression - + Completely open audio compression format. - + Musepack - Living Audio Compression - + Monkey's Audio - Lossless Audio Compressor - + Freely available source code, simple SDK and non-restrictive licensing. - + Shorten - Lossless Audio Compressor - + Speex - Free Codec For Free Speech - + Open Source patent-free audio format designed for speech. - + The True Audio - Lossless Audio Codec - + refalac - Win32 command line ALAC encoder/decoder - + The ALAC reference implementation by Apple is available under the Apache license. - + wma2wav - Dump WMA files to Wave Audio - + Copyright (c) 2011 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved. - + avs2wav - Avisynth to Wave Audio converter - + By Jory Stone <jcsston@toughguy.net> and LoRd_MuldeR <mulder2@gmx.de>. - + dcaenc - + Copyright (c) 2008-2011 Alexander E. Patrakov. Distributed under the LGPL. - + MediaInfo - Media File Analysis Tool - + SoX - Sound eXchange - + GnuPG - The GNU Privacy Guard - + GNU Wget - Software for retrieving files using HTTP - + UPX - The Ultimate Packer for eXecutables - + Silk Icons - Over 700 icons in PNG format - + By Mark James, released under the Creative Commons 'by' License. - + The copyright of LameXP as a whole belongs to LoRd_MuldeR. The copyright of third-party software used in LameXP belongs to the individual authors. - + n/a @@ -882,7 +882,7 @@ - + Show Details @@ -1625,9 +1625,9 @@ - - - + + + Check for Updates @@ -1668,13 +1668,13 @@ - + Disable Update Reminder - + Disable Sound Effects @@ -1759,845 +1759,845 @@ - + Adding file(s), please wait... - - + + Access Denied - + %n file(s) have been rejected, because read access was not granted! - + This usually means the file is locked by another process. - + CDDA Files - + %n file(s) have been rejected, because they are dummy CDDA files! - + Sorry, LameXP cannot extract audio tracks from an Audio-CD at present. - + We recommend using %1 for that purpose. - + Cue Sheet - + %n file(s) have been rejected, because they appear to be Cue Sheet images! - + Please use LameXP's Cue Sheet wizard for importing Cue Sheet files. - + Files Rejected - + %n file(s) have been rejected, because the file format could not be recognized! - + This usually means the file is damaged or the file format is not supported. - + Scanning folder(s) for files, please wait... - + DEMO VERSION - + Initializing directory outline, please be patient... - + You can drop in audio files here! - + Open File in External Application - + Browse File Location - + Browse Selected Folder - + Refresh Directory Outline - + Go To Parent Directory - + Bookmark Current Output Folder - + Export Meta Tags to CSV File - + Import Meta Tags from CSV File - + License Declined - + You have declined the license. Consequently the application will exit now! - + Goodbye! - + LameXP - Expired - + This demo (pre-release) version of LameXP has expired at %1. - + LameXP is free software and release versions won't expire. - - + + Exit Program - + It seems that a bogus anti-virus software is slowing down the startup of LameXP. - + Please refer to the %1 document for details and solutions! - + Slow Startup - - - - - + + + + + Discard - - + + Don't Show Again - + Urgent Update - + Your version of LameXP is more than a year old. Time for an update! - - + + Ignore - + Skipping update check this time, please be patient... - - - + + + Update Reminder - + Your last update check was more than 14 days ago. Check for updates now? - + Your did not check for LameXP updates yet. Check for updates now? - + Postpone - + LameXP detected that your version of the Nero AAC encoder is outdated! - + The current version available is %1 (or later), but you still have version %2 installed. - + n/a - + You can download the latest version of the Nero AAC encoder from the Nero website at: - + (Hint: Please ignore the name of the downloaded ZIP file and check the included 'changelog.txt' instead!) - + AAC Encoder Outdated - + The Nero AAC encoder could not be found. AAC encoding support will be disabled. - + Please put 'neroAacEnc.exe', 'neroAacDec.exe' and 'neroAacTag.exe' into the LameXP directory! - + Your LameXP directory is located here: - + You can download the Nero AAC encoder for free from the official Nero website at: - + AAC Support Disabled - - - + + + LameXP - + You must add at least one file to the list before proceeding! - + Not Found - + Your currently selected TEMP folder does not exist anymore: - + Restore Default - + Cancel - + There are less than %1 GB of free diskspace available on your system's TEMP folder. - + It is highly recommend to free up more diskspace before proceeding with the encode! - + Your TEMP folder is located at: - + Low Diskspace Warning - + Abort Encoding Process - + Clean Disk Now - + Low Diskspace - + You are proceeding with low diskspace. Problems might occur! - + Sorry, an unsupported encoder has been chosen! - + Cannot write to the selected output directory. - + Please choose a different directory! - + Load Translation - + Translation Files - + Do you really want to disable the update reminder? - - - - - - - + + + + + + + Yes - - - - - - - + + + + + + + No - + The update reminder has been disabled. - + Please remember to check for updates at regular intervals! - + The update reminder has been re-enabled. - + Do you really want to disable all sound effects? - - + + Sound Effects - + All sound effects have been disabled. - + The sound effects have been re-enabled. - - - + + + Nero AAC Notifications - + Do you really want to disable all Nero AAC Encoder notifications? - + All Nero AAC Encoder notifications have been disabled. - + The Nero AAC Encoder notifications have been re-enabled. - - - + + + Slow Startup Notifications - + Do you really want to disable the slow startup notifications? - + The slow startup notifications have been disabled. - + The slow startup notifications have been re-enabled. - - + + Open Cue Sheet - - + + Cue Sheet File - - - + + + Beta Updates - + Do you really want LameXP to check for Beta (pre-release) updates? - + LameXP will check for Beta (pre-release) updates from now on. - + Check Now - + LameXP will <i>not</i> check for Beta (pre-release) updates from now on. - - - + + + Hibernate Computer - + Do you really want the computer to be hibernated on shutdown? - + LameXP will hibernate the computer on shutdown from now on. - + LameXP will <i>not</i> hibernate the computer on shutdown from now on. - - - + + + Shell Integration - + Do you really want to disable the LameXP shell integration? - + The LameXP shell integration has been disabled. - + The LameXP shell integration has been re-enabled. - - + + Add file(s) - - + + Add Folder - + Loading dropped files or folders, please wait... - - + + Save CSV file - - - - + + + + CSV File - - - - + + + + CSV Export - + Sorry, there are no meta tags that can be exported! - + Sorry, failed to open CSV file for writing! - + Sorry, failed to write to the CSV file! - + The CSV files was created successfully! - - + + Open CSV file - - - - - + + + + + CSV Import - + Sorry, failed to open CSV file for reading! - + Sorry, failed to read from the CSV file! - + Sorry, the CSV file does not contain any known fields! - + CSV file is incomplete. Not all files were updated! - + The CSV files was imported successfully! - - + + New Folder - + Enter the name of the new folder: - + Failed to create folder - + The new folder could not be created: - + Drive is read-only or insufficient access rights! - + Current Encoder: %1 - - + + Quality Level %1 - + Compression %1 - + Uncompressed - + Best Quality (Slow) - + High Quality (Recommended) - + Acceptable Quality (Fast) - + Poor Quality (Very Fast) - + File name without extension - + Track number with leading zero - + Track title - + Artist name - + Album name - + Year with (at least) four digits - + Comment - + Characters forbidden in file names: - + Rename Macros - + %n Instance(s) - + Cannot write to the selected directory. Please choose another directory! - + Overwrite Mode - + Warning: This mode may overwrite existing files with no way to revert! - + Continue - + Revert - + Already Running - + LameXP is already running, please use the running instance! @@ -3080,209 +3080,209 @@ - + Show details for selected job - + Browse Output File Location - + Filter Log Items - + Show Running Only - + Show Succeeded Only - + Show Failed Only - + Show Skipped Only - + Show All Items - + Encoding Files - + Your files are being encoded, please be patient... - + Encoding files, please wait... - + Multi-threading enabled: Running %1 instances in parallel! - + Aborted! Waiting for running jobs to terminate... - + Encoding: %n file(s) of %1 completed so far, please wait... - + Creating the playlist file, please wait... - + Process was aborted by the user after %n file(s)! - + Process was aborted prematurely by the user! - + LameXP - Aborted - + Process was aborted by the user. - + Process finished after %1. - + Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information! - + %n file(s) skipped - + Error: %1 of %n file(s) failed. Double-click failed items for detailed information! - + LameXP - Error - + At least one file has failed! - + All files completed successfully. Skipped %n file(s). - + All files completed successfully. - + LameXP - Done - + None of the items matches the current filtering rules - + Playlist creation failed - + The playlist file could not be created: - + Warning: Computer will shutdown in %1 seconds... - - + + Cancel Shutdown - + %n hour(s) - - + + %n minute(s) - - + + %n second(s) - + %n millisecond(s) @@ -3305,22 +3305,22 @@ QApplication - + Executable '%1' doesn't support Windows compatibility mode. - + Executable '%1' requires Qt v%2, but found Qt v%3. - + Executable '%1' was built for Qt '%2', but found Qt '%3'. - + Executable '%1' requires Windows XP or later. @@ -3389,104 +3389,104 @@ - - + + Build - + Unknown - + Testing your internet connection, please wait... - + It appears that the computer currently is offline! - - + + Please make sure your computer is connected to the internet and try again. - + Network connectivity test has failed! - + Checking for new updates online, please wait... - + Failed to fetch update information from server! - + Sorry, the update server might be busy at this time. Plase try again later. - + More information available at: - + A new version of LameXP is available! - + Initializing, please wait... - + We highly recommend all users to install this update as soon as possible. - + No new updates available at this time. - + Your version of LameXP is still up-to-date. Please check for updates regularly! - + Your version appears to be newer than the latest release. - + This usually indicates your are currently using a pre-release version of LameXP. - + Update is being downloaded, please be patient... - + Update ready to install. Applicaion will quit... - + Update failed. Please try again or download manually! diff --git a/etc/Translation/LameXP_EN.ts b/etc/Translation/LameXP_EN.ts index 4d2ae30c..de0f54ca 100644 --- a/etc/Translation/LameXP_EN.ts +++ b/etc/Translation/LameXP_EN.ts @@ -31,7 +31,7 @@ MainWindow - + %n file(s) have been rejected, because read access was not granted! %n file have been rejected, because read access was not granted! @@ -39,7 +39,7 @@ - + %n file(s) have been rejected, because they are dummy CDDA files! %n file have been rejected, because they are dummy CDDA files! @@ -47,7 +47,7 @@ - + %n file(s) have been rejected, because they appear to be Cue Sheet images! %n file have been rejected, because they appear to be Cue Sheet images! @@ -55,7 +55,7 @@ - + %n file(s) have been rejected, because the file format could not be recognized! %n file have been rejected, because the file format could not be recognized! @@ -63,7 +63,7 @@ - + %n Instance(s) %n Instance @@ -74,7 +74,7 @@ ProcessingDialog - + Encoding: %n file(s) of %1 completed so far, please wait... Encoding: %n file of %1 completed so far, please wait... @@ -82,7 +82,7 @@ - + Process was aborted by the user after %n file(s)! Process was aborted by the user after %n file! @@ -90,7 +90,7 @@ - + Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information! Error: %1 of %n file failed (%2). Double-click failed items for detailed information! @@ -98,7 +98,7 @@ - + %n file(s) skipped %n file skipped @@ -106,7 +106,7 @@ - + Error: %1 of %n file(s) failed. Double-click failed items for detailed information! Error: %1 of %n file failed. Double-click failed items for detailed information! @@ -114,7 +114,7 @@ - + All files completed successfully. Skipped %n file(s). All files completed successfully. Skipped %n file. @@ -122,7 +122,7 @@ - + %n hour(s) %n hour @@ -130,8 +130,8 @@ - - + + %n minute(s) %n minute @@ -139,8 +139,8 @@ - - + + %n second(s) %n second @@ -148,7 +148,7 @@ - + %n millisecond(s) %n millisecond diff --git a/etc/Translation/LameXP_PL.ts b/etc/Translation/LameXP_PL.ts index 8d8588be..1dfb3a1f 100644 --- a/etc/Translation/LameXP_PL.ts +++ b/etc/Translation/LameXP_PL.ts @@ -4,23 +4,23 @@ AboutDialog - + LameXP - Audio Encoder Front-end LameXP - Program do kompresji dźwięku - + Please visit %1 for news and updates! Odwiedź %1 aby zobaczyć nowości i aktualizacje! - - + + Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. Uwaga: To jest wersja próbna LameXP, która wygaśnie %1. Pozostało jeszcze %2 dni. - + Note: LameXP is free software. Do <b>not</b> pay money to obtain or use LameXP! If some third-party website tries to make you pay for downloading LameXP, you should <b>not</b> respond to the offer !!! Uwaga: LameXP jest darmowym oprogramowaniem. <b>Nie</b> płać nikomu za ten program! Jeśli ktoś oferuje Ci LameXP za pieniądze <b>nie</b> kupuj od niego!!! @@ -75,313 +75,313 @@ Zamknij - + The following people have contributed to LameXP: Osoby które pomogły w rozwoju LameXP: - + Programmers: Programiści: - + Project Leader Lider projektu - + Translators: Tłumacze: - + Special thanks to: Specjalne podziękowania dla: - + Doom9's Forum Forum Doom9 - + Gleitz | German Doom9 Gleitz | Niemieckiego Doom9 - + Hydrogenaudio Forums Forum Hydrogenaudio - + RareWares RareWares - + GitHub GitHub - + SourceForge SourceForge - + Qt Developer Network Qt Developer Network - + BerliOS Developer BerliOS Developer - + CodePlex CodePlex - + Marius Hudea Marius Hudea - + Codecs.com Codecs.com - + If you are willing to contribute a LameXP translation, feel free to contact us! Jeśli chcesz wspomóc LameXP w obsłudze większej ilości języków, nie wahaj skontaktować się z nami! - + The following third-party software is used in LameXP: Następujące programy firm trzecich zostały użyte w LameXP: - + LAME - OpenSource mp3 Encoder LAME - Otwartoźródłowy koder mp3 - - - - - - - - - - - - + + + + + + + + + + + + Released under the terms of the GNU Lesser General Public License. Wydane na warunkach licencji GNU Lesser General Public License. - + OggEnc - Ogg Vorbis Encoder OggEnc - Koder Ogg Vorbis - + Completely open and patent-free audio encoding technology. Całkowicie otwarta i wolna od patentów technologia kompresji dźwięku. - + Nero AAC Reference MPEG-4 Encoder Nero AAC Reference MPEG-4 Encoder - + Freeware state-of-the-art HE-AAC encoder with 2-Pass support. Darmowy, jedyny w swoim rodzaju koder HE-AAC z obsługą dwóch przebiegów. - + Available from vendor web-site as free download: Darmowy pakiet dostępny ze strony wydawcy: - + Aften - A/52 audio encoder Aften - Koder dźwięku A/52 - + FLAC - Free Lossless Audio Codec FLAC - Darmowy i bezstartny kodek dźwięku - + Open and patent-free lossless audio compression technology. Otwarta i wolna od patentów technologia bezstratnej kompresji dźwięku. - + Opus Audio Codec Opus Audio Codec - + Totally open, royalty-free, highly versatile audio codec. Otwartoźródłowy, wolny od patentów, wielozadaniowy kodek dźwięku. - + mpg123 - Fast Console MPEG Audio Player/Decoder mpg123 - Szybki dekoder/odtwarzacz MPEG Audio - + FAAD - OpenSource MPEG-4 and MPEG-2 AAC Decoder FAAD - Otwartoźródłowy dekoder MPEG-4 oraz MPEG-2 AAC - + Released under the terms of the GNU General Public License. Wydane na warunkach licencji GNU General Public License. - + Valdec from AC3Filter Tools - AC3/DTS Decoder Dekoder AC3/DTS z narzędzi AC3Filter Tools Valdec'a - + WavPack - Hybrid Lossless Compression Wavpack - Bezstratny hybrydowy kodek dźwięku - + Completely open audio compression format. Całkowicie otwarty format kompresji dźwięku. - + Musepack - Living Audio Compression Musepack - Koder dźwięku - + Monkey's Audio - Lossless Audio Compressor Monkey's Audio - Koder bezstratnego formatu dźwięku - + Freely available source code, simple SDK and non-restrictive licensing. Szeroko dostępny kod źródłowy, prosty SDK i bezrestrykcyjna licencja. - + Shorten - Lossless Audio Compressor Shorten - Bezstratny kodek dźwięku - + Speex - Free Codec For Free Speech Speex - Darmowy kodek dla mowy ludzkiej - + Open Source patent-free audio format designed for speech. Otwartoźródłowy, wolny od patentów format dźwięku przeznaczony dla mowy ludzkiej. - + The True Audio - Lossless Audio Codec The True Audio - Bezstratny kodek dźwięku - + refalac - Win32 command line ALAC encoder/decoder refalac - Koder/dekoder ALAC na platformę Win32 działający z wiersza poleceń - + The ALAC reference implementation by Apple is available under the Apache license. Referencyjna implementacja formatu ALAC firmy Apple jest dostępna na licencji Apache. - + wma2wav - Dump WMA files to Wave Audio wma2wav - Dekoder plików WMA do Wave - + Copyright (c) 2011 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved. Prawa autorskie 2011 LoRd_MuldeR <mulder2@gmx.de>. Pewne prawa zastrzeżone. - + avs2wav - Avisynth to Wave Audio converter avs2wav - Konwerter dźwięku z Avisynth do Wave - + By Jory Stone <jcsston@toughguy.net> and LoRd_MuldeR <mulder2@gmx.de>. Autorami programu są Jory Stone <jcsston@toughguy.net> i LoRd_MuldeR <mulder2@gmx.de>. - + dcaenc dcaenc - + Copyright (c) 2008-2011 Alexander E. Patrakov. Distributed under the LGPL. Prawa autorskie: 2008-2011 Alexander E. Patrakov. Rozpowszechniane na licencji LGPL. - + MediaInfo - Media File Analysis Tool MediaInfo - Narzędzie do analizy plików multimedialnych - + SoX - Sound eXchange SoX - Sound eXchange - + GnuPG - The GNU Privacy Guard GnuPG - GNU Privacy Guard - + GNU Wget - Software for retrieving files using HTTP GNU Wget - Oprogramowanie służące do pobierania plików za pomocą protokołu HTTP - + UPX - The Ultimate Packer for eXecutables UPX - The Ultimate Packer for eXecutables - + Silk Icons - Over 700 icons in PNG format Silk Icons - Ponad 700 ikon w formacie PNG - + By Mark James, released under the Creative Commons 'by' License. Autorstwa Mark James, wydane na licencji Creative Commons. - + The copyright of LameXP as a whole belongs to LoRd_MuldeR. The copyright of third-party software used in LameXP belongs to the individual authors. Do programu LameXP jako całości, prawa autorskie posiada LoRd_MuldeR. Prawa autorskie oprogramowania firm trzecich należą do autorów poszczególnych programów. - + n/a n/d @@ -888,7 +888,7 @@ - + Show Details Pokaż szczegóły @@ -1632,9 +1632,9 @@ - - - + + + Check for Updates Sprawdź aktualizacje @@ -1675,13 +1675,13 @@ - + Disable Update Reminder Wyłącz przypominanie o aktualizacji - + Disable Sound Effects Wyłącz efekty dźwiękowe @@ -1766,314 +1766,314 @@ Otwartoźródłowe projekty MuldeR'a - + Adding file(s), please wait... Dodawanie plików, prosze czekać... - - + + Access Denied Dostęp zablokowany - + This usually means the file is locked by another process. To przeważnie oznacza, że plik jest zablokowany przez inny proces. - + CDDA Files Pliki CDDA - + Sorry, LameXP cannot extract audio tracks from an Audio-CD at present. LameXP nie może teraz wyekstrachować ścieżki z płyty Audio-CD. - + We recommend using %1 for that purpose. Zaleca się użycie w tym celu %1. - + Cue Sheet Cue Sheet - + Please use LameXP's Cue Sheet wizard for importing Cue Sheet files. Prosze użyć przewodnika Cue Sheet w LameXP w celu importowania tych plików. - + Files Rejected Pliki odrzucone - + This usually means the file is damaged or the file format is not supported. To przeważnie oznacza że plik jest uszkodzony lub format pliku nie jest wspierany. - + Scanning folder(s) for files, please wait... Skanowanie folderu/ów, prosze czekać... - + You can drop in audio files here! Tutaj możesz upuścić pliki dźwiękowe! - + Open File in External Application Otwórz plik w zewnętrznym programie - + Browse File Location Otwórz lokalizację pliku - + Browse Selected Folder Otwórz wybrany folder - + Bookmark Current Output Folder Zapamiętaj wybrany folder - + License Declined Licencja odrzucona - + You have declined the license. Consequently the application will exit now! Odrzuciłeś licencję. W takim razie program zostanie teraz zamknięty! - + Goodbye! Naraska! - + LameXP - Expired LameXP - Termin wygasł - + This demo (pre-release) version of LameXP has expired at %1. Ta wersja próbna LameXP wygasła %1. - + LameXP is free software and release versions won't expire. LameXP jest darmowym oprogramowaniem i pełna wersja nie wygasa. - - + + Exit Program Wyjdź z programu - + It seems that a bogus anti-virus software is slowing down the startup of LameXP. Najwyraźniej twoje oprogramowanie antywirusowe spowalnia uruchamianie się LameXP. - + Please refer to the %1 document for details and solutions! Prosze sprawdzić dokument %1 w celu dalszych szcegółów i rozwiązań! - + Slow Startup Powolny start - - - - - + + + + + Discard Zamknij - - + + Don't Show Again Nie pokazuj ponownie - + Urgent Update Ważna aktualizacja - + Your version of LameXP is more than a year old. Time for an update! Twoja wersja LameXP jest starsza niż rok! Czas na aktualizację! - - - + + + Update Reminder Powiadomienie aktualizacji - + Your last update check was more than 14 days ago. Check for updates now? Ostatnie sprawdzenie aktualizacji było ponad 14 dni temu. Sprawdzić teraz aktualizacje? - + Your did not check for LameXP updates yet. Check for updates now? Nie sprawdzałeś jeszcze aktualizacji LameXP. Sprawdzić teraz aktualizacje? - + Postpone Przełóż - + LameXP detected that your version of the Nero AAC encoder is outdated! LameXP wykrył że Twoja wersja kodera Nero AAC jest nieaktualna! - + The current version available is %1 (or later), but you still have version %2 installed. Wersją dostępną obecnie jest %1, Twoja wersja to %2. - + n/a b/d - + You can download the latest version of the Nero AAC encoder from the Nero website at: Możesz pobrać najnowszą wersję kodera Nero AAC ze strony Nero: - + AAC Encoder Outdated Koder AAC jest nieaktualny - + The Nero AAC encoder could not be found. AAC encoding support will be disabled. Nie można odnaleźć kodera Nero AAC. Kompresja formatu AAC zostanie wyłączona. - + Please put 'neroAacEnc.exe', 'neroAacDec.exe' and 'neroAacTag.exe' into the LameXP directory! Prosze skopiować 'neroAacEnc.exe', 'neroAacDec.exe', oraz 'neroAacTag.exe' do folderu LameXP! - + Your LameXP directory is located here: Folder aplikacji LameXP znajduje się tutaj: - + You can download the Nero AAC encoder for free from the official Nero website at: Możesz pobrać koder Nero AAC za darmo z oficjalnej strony Nero: - + AAC Support Disabled Wsparcie dla AAC wyłączone - - - + + + LameXP LameXP - + You must add at least one file to the list before proceeding! Powinienieś dodać przynajmniej jeden plik do listy aby zacząć działać! - + Not Found Nie znaleziono - + Your currently selected TEMP folder does not exist anymore: Wybrany przez Ciebie folder tymczasowy TEMP już nie istnieje: - + Restore Default Przywróć domyślne - + Cancel Anuluj - + Low Diskspace Warning Ostrzeżenie o małej ilości miejsca na dysku - + There are less than %1 GB of free diskspace available on your system's TEMP folder. Jest mniej niż %1 GB dostępnego miejsca w systemowym folderze TEMP. - + DEMO VERSION WERSJA PRÓBNA - + (Hint: Please ignore the name of the downloaded ZIP file and check the included 'changelog.txt' instead!) (Podpowiedź: Zignoruj nazwę pobranego pliku ZIP, w zamian sprawdż załączony w archiwum plik "changelog.txt"!) - + It is highly recommend to free up more diskspace before proceeding with the encode! Jest wysoce zalecane zwolnić miejsce na dysku zanim zaczniesz kompresję! - + Your TEMP folder is located at: Twój folder TEMP znajduję się: - + Abort Encoding Process Przerwij proces kompresji - + Clean Disk Now Wykonaj oczyszczanie dysku - - + + Ignore Ignoruj - + %n file(s) have been rejected, because read access was not granted! %n plik został odrzucony, ponieważ nie dano praw odczytu! @@ -2082,7 +2082,7 @@ - + %n file(s) have been rejected, because they are dummy CDDA files! %n plik został odrzucony, ponieważ jest to plik CDDA! @@ -2091,7 +2091,7 @@ - + %n file(s) have been rejected, because they appear to be Cue Sheet images! %n plik został odrzucony, ponieważ jest to plik Cue! @@ -2100,7 +2100,7 @@ - + %n file(s) have been rejected, because the file format could not be recognized! %n plik został odrzucony, ponieważ jego format nie został rozpoznany! @@ -2109,473 +2109,473 @@ - + Initializing directory outline, please be patient... Ładowanie zestawu folderów, prosze czekać... - + Refresh Directory Outline Odśwież foldery - + Go To Parent Directory Idź do głównego folderu - + Export Meta Tags to CSV File Eksportuj Tagi do pliku CVS - + Import Meta Tags from CSV File Importuj Tagi do pliku CVS - + Skipping update check this time, please be patient... Pomijanie sprawdzania aktualizacji, prosze czekać... - + Low Diskspace Mało miejsca na dysku - + You are proceeding with low diskspace. Problems might occur! Chcesz zacząć działać z małą ilością miejsca na dysku. Mogą wystąpić problemy! - + Sorry, an unsupported encoder has been chosen! Został wybrany koder, który nie jest wspierany! - + Cannot write to the selected output directory. Nie można zapisać do wybranej lokalizacji. - + Please choose a different directory! Prosze wybrać inną lokalizację! - + Load Translation Zaladuj plik językowy - + Translation Files Pliki językowe - + Do you really want to disable the update reminder? Czy na pewno chcesz wyłączyć przypominanie o aktualizacjach? - - - - - - - + + + + + + + Yes Tak - - - - - - - + + + + + + + No Nie - + The update reminder has been disabled. Przypominanie o aktualizacjach wyłączone. - + Please remember to check for updates at regular intervals! Prosze pamiętać o okresowym sprawdzaniu aktualizacji! - + The update reminder has been re-enabled. Przypominanie o aktualizacjach ponownie włączone. - + Do you really want to disable all sound effects? Czy na pewno chcesz wyłączyć wszystkie dźwiękowe? - - + + Sound Effects Efekty dźwiękowe - + All sound effects have been disabled. Wszystkie efekty dźwiękowe zostały wyłączone. - + The sound effects have been re-enabled. Efekty dźwiękowe zostały ponownie włączone. - - - + + + Nero AAC Notifications Powiadomienia Nero AAC - + Do you really want to disable all Nero AAC Encoder notifications? Czy na pewno chcesz wyłączyć wszystkie powiadomienia Nero AAC? - + All Nero AAC Encoder notifications have been disabled. Wszystkie powiadomienia kodera Nero AAC zostały wyłączone. - + The Nero AAC Encoder notifications have been re-enabled. Powiadomienia Nero AAC zostały ponownie włączone. - - - + + + Slow Startup Notifications Powiadomienia o powolnym starcie - + Do you really want to disable the slow startup notifications? Czy na pewno chcesz wyłączyć powiadomienia o powolnym starcie? - + The slow startup notifications have been disabled. Powiadomienia o powolnym starcie zostały wyłączone. - + The slow startup notifications have been re-enabled. Powiadomienia o powolnym starcie zostały ponownie włączone. - - + + Open Cue Sheet Otwórz plik Cue Sheet - - + + Cue Sheet File Plik Cue Sheet - - - + + + Beta Updates Aktualizacje Beta - + Do you really want LameXP to check for Beta (pre-release) updates? Czy na pewno chcesz aby LameXP sprawdzał aktualizacje Beta? - + LameXP will check for Beta (pre-release) updates from now on. Od teraz LameXP będzie sprawdzał aktualizacje Beta. - + Check Now Sprawdź teraz - + LameXP will <i>not</i> check for Beta (pre-release) updates from now on. LameXP od teraz <i>nie będzie</i> sprawdzał aktualizacji Beta. - - - + + + Hibernate Computer Hibernuj komputer - + Do you really want the computer to be hibernated on shutdown? Czy na pewno chcesz aby komputer był hibernowany zamiast zamykany? - + LameXP will hibernate the computer on shutdown from now on. Od teraz LameXP będzie hibernował komputer zamiast zamykać. - + LameXP will <i>not</i> hibernate the computer on shutdown from now on. LameXP od teraz <i>nie</i> będzie hibernował komputera tylko zamykał. - - - + + + Shell Integration Integracja z systemem - + Do you really want to disable the LameXP shell integration? Czy na pewno chcesz wyłączyć integrację LameXP z systemem? - + The LameXP shell integration has been disabled. Integracja LameXP z systemem zostałą wyłączona. - + The LameXP shell integration has been re-enabled. Integracja LameXP z systemem została ponownie włączona. - - + + Add file(s) Dodaj plik(i) - - + + Add Folder Dodaj folder - + Loading dropped files or folders, please wait... Ładowanie upuszczonych plików lub folderów, prosze czekać... - - + + Save CSV file Zapisz plik CSV - - - - + + + + CSV File Plik CSV - - - - + + + + CSV Export Eksportowanie CSV - + Sorry, there are no meta tags that can be exported! Nie ma żadnych tagów, które można eksportować! - + Sorry, failed to open CSV file for writing! Nie można otworzyć pliku CSV aby go zapisać! - + Sorry, failed to write to the CSV file! Nie można zapisać do pliku CSV! - + The CSV files was created successfully! Pliki CSV utworzone pomyślnie! - - + + Open CSV file Otwórz plik CSV - + Sorry, failed to open CSV file for reading! Nie można otworzyć pliku CSV aby go wczytać! - - - - - + + + + + CSV Import Importowanie CSV - + Sorry, failed to read from the CSV file! Próba odczytania pliku CSV zakończona niepowodzeniem! - + Sorry, the CSV file does not contain any known fields! Plik CSV nie zawiera żadnych znanych pól! - + CSV file is incomplete. Not all files were updated! Plik CSV nie jest kompletny. Nie wszystkie pliki zostały zaktualizowane! - + The CSV files was imported successfully! Pliki CSV zaimportowano pomyślnie! - - + + New Folder Nowy folder - + Enter the name of the new folder: Wprowadź nazwę nowego folderu: - + Failed to create folder Utworzenie folderu zakończone niepowodzeniem - + The new folder could not be created: Nowy folder nie mógł zostać stworzony: - + Drive is read-only or insufficient access rights! Dysk tylko do odczytu lub brak praw dostępu! - - + + Quality Level %1 Poziom jakości %1 - + Compression %1 Kompresja %1 - + Uncompressed Nieskompresowany - + Best Quality (Slow) Najlepsza jakość (Powoli) - + Acceptable Quality (Fast) Akceptowalna jakość (Szybko) - + High Quality (Recommended) Wysoka jakość (Zalecane) - + Current Encoder: %1 Obecny koder: %1 - + Poor Quality (Very Fast) Najniższa jakość (Bardzo szybko) - + File name without extension Nazwa pliku bez rozszerzenia - + Track number with leading zero Numer ścieżki z zerem na początku - + Track title Nazwa ścieżki - + Artist name Nazwa Artysty - + Album name Nazwa Albumu - + Year with (at least) four digits Rok z (przynajmniej) czterema cyframi - + Comment Komentarz - + Characters forbidden in file names: Zabronione znaki w nazwach plików: - + Rename Macros Zmień nazwy makr - + %n Instance(s) %n wątek @@ -2584,37 +2584,37 @@ - + Cannot write to the selected directory. Please choose another directory! Nie można zapisać do wybranej lokalizacji. Prosze wybierz inną lokalizację! - + Overwrite Mode Tryb nadpisywania - + Warning: This mode may overwrite existing files with no way to revert! Ostrzeżenie: W tym trybie istniejące pliki będą nadpisywane bez możliwości ich odzyskania! - + Continue Kontynuuj - + Revert Cofnij - + Already Running Już działa - + LameXP is already running, please use the running instance! LameXP już działa, przejdź do działającego procesu! @@ -3097,72 +3097,72 @@ Powrót - + Show details for selected job Pokaż szczegóły wybranego zadania - + Browse Output File Location Wybierz lokalizację dla plików wyjściowych - + Filter Log Items Filtruj długie pozycje - + Show Running Only Pokaż tylko trwające - + Show Succeeded Only Pokaż tylko zakończone pomyślnie - + Show Failed Only Pokaż tylko zakończone niepowodzeniem - + Show Skipped Only Pokaż tylko pominięte - + Show All Items Pokaż wszystkie pozycje - + Encoding Files Kompresowanie plików - + Your files are being encoded, please be patient... Twoje pliki są właśnie kompresowane, prosze być cierpliwy... - + Encoding files, please wait... Kompresowanie plików, prosze czekać... - + Multi-threading enabled: Running %1 instances in parallel! Wielowątkowosć włączona: Równolegle wykonywanych jest %1 kodowań! - + Aborted! Waiting for running jobs to terminate... Przerwano! Czekanie na wyłączenie procesu... - + Encoding: %n file(s) of %1 completed so far, please wait... Kompresowanie: %n plik z %1 został do tej pory zakończony, prosze czekać... @@ -3171,17 +3171,17 @@ - + Creating the playlist file, please wait... Tworzenie pliku playlisty, prosze czekać... - + Process was aborted prematurely by the user! Proces został przedwcześnie zakończony przez użytkownika! - + Process was aborted by the user after %n file(s)! Proces został zakończony przez użytkownika po zakończeniu %n pliku! @@ -3190,22 +3190,22 @@ - + LameXP - Aborted LameXP - Przerwano - + Process was aborted by the user. Proces został przerwany przez użytkownika. - + Process finished after %1. Proces został zakończony po %1. - + Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information! Błąd: %1 z %n pliku zakończono niepowodzeniem (%2). Kliknij dwukrotnie aby uzyskać więcej informacji! @@ -3214,7 +3214,7 @@ - + %n file(s) skipped pominięto %n plik @@ -3223,7 +3223,7 @@ - + Error: %1 of %n file(s) failed. Double-click failed items for detailed information! Błąd: %1 z %n pliku zakończono niepowodzeniem. Kliknij dwukrotnie aby uzyskać więcej informacji! @@ -3232,7 +3232,7 @@ - + All files completed successfully. Skipped %n file(s). Wszystkie zadania wykonano pomyślnie. Pominięto %n plik. @@ -3241,54 +3241,54 @@ - + LameXP - Error LameXP - Błąd - + At least one file has failed! Przynajmniej jeden plik nie został skompresowany! - + All files completed successfully. Kompresja wszystkich plików zakończona powodzeniem. - + LameXP - Done LameXP - Zrobione - + None of the items matches the current filtering rules Żadna z pozycji nie spełnia reguł filtra - + Playlist creation failed Tworzenie playlisty zakończone niepowodzeniem - + The playlist file could not be created: Playlista nie mogła zostać utworzona: - + Warning: Computer will shutdown in %1 seconds... Ostrzeżenie: Komputer zostanie zamknięty za %1 sekund/y... - - + + Cancel Shutdown Anuluj wyłączenie komputera - + %n hour(s) %n godzina @@ -3297,8 +3297,8 @@ - - + + %n minute(s) %n minuta @@ -3307,8 +3307,8 @@ - - + + %n second(s) %n sekunda @@ -3317,7 +3317,7 @@ - + %n millisecond(s) %n milisekunda @@ -3342,22 +3342,22 @@ QApplication - + Executable '%1' doesn't support Windows compatibility mode. Plik wykonywalny '%1' nie działa w trybie kompatybilności z Windows. - + Executable '%1' requires Qt v%2, but found Qt v%3. Plik wykonywalny '%1' wymaga Qt v%2, znaleziono jednak Qt v%3. - + Executable '%1' was built for Qt '%2', but found Qt '%3'. Plik wykonywalny "%1" został skompilowany dla Qt "%2", znaleziono "%3". - + Executable '%1' requires Windows XP or later. Plik wykonywalny "%1" wymaga Windows XP lub nowszego. @@ -3426,104 +3426,104 @@ Zamknij - - + + Build Build - + Unknown Nieznana - + Testing your internet connection, please wait... Testowanie połączenia internetowego, prosze czekać... - + It appears that the computer currently is offline! LameXP wykrył brak dostępu do internetu! - - + + Please make sure your computer is connected to the internet and try again. Upewnij się że komputer jest podłączony do internetu i spróbuj ponownie. - + Network connectivity test has failed! Test połączenia internetowego zakończony niepowodzeniem! - + Checking for new updates online, please wait... Sprawdzanie aktualizacji online, prosze czekać... - + Failed to fetch update information from server! Pobieranie informacji z serwera zakończone niepowodzeniem! - + Sorry, the update server might be busy at this time. Plase try again later. Serwer aktualizacji wydaje się nie odpowiadać w tej chwili. Prosze spróbować później. - + More information available at: Więcej informacji tutaj: - + A new version of LameXP is available! Dostępna nowa wersja LameXP! - + Initializing, please wait... Inicjowanie, prosze czekać... - + We highly recommend all users to install this update as soon as possible. Jest wysoce zalecane aby zainstalować tę aktualizację jak najszybciej. - + No new updates available at this time. Nie ma nowych aktualizacji w tej chwili. - + Your version of LameXP is still up-to-date. Please check for updates regularly! Posiadasz najnowszą wersję LameXP. Sprawdzaj aktualizacje regularnie! - + Your version appears to be newer than the latest release. Posiadasz nowszą wersję LameXP niż ostatnie wydanie. - + This usually indicates your are currently using a pre-release version of LameXP. To wskazuje na to, że posiadasz wersję alfa LameXP. - + Update is being downloaded, please be patient... Pobieranie aktualizacji w toku, prosze czekać... - + Update ready to install. Applicaion will quit... Aktualizacja gotowa do instalacji. Teraz program zostanie zamknięty... - + Update failed. Please try again or download manually! Aktualizacja zakończona niepowodzeniem. Prosze spróbować ponownie lub zainstalować ręcznie! diff --git a/etc/Translation/LameXP_SV.ts b/etc/Translation/LameXP_SV.ts index 01a58086..4cc28694 100644 --- a/etc/Translation/LameXP_SV.ts +++ b/etc/Translation/LameXP_SV.ts @@ -4,23 +4,23 @@ AboutDialog - + LameXP - Audio Encoder Front-end LameXP - Ljudkonvertering - + Please visit %1 for news and updates! Besök %1 för nyheter och uppdateringar! - - + + Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. OBS! Denna testversion av LameXP kommer att upphöra %1. %2 dagar kvar. - + Note: LameXP is free software. Do <b>not</b> pay money to obtain or use LameXP! If some third-party website tries to make you pay for downloading LameXP, you should <b>not</b> respond to the offer !!! OBS! LameXP är gratis mjukvara. Betala <b>inte</b> för att ladda ner eller använda LameXP! Om någon webbsida försöker ta betalt för LameXP, bör du lämna sidan <b>utan</b> att ladda ner något! @@ -75,313 +75,313 @@ Stäng - + The following people have contributed to LameXP: Följande har medverkat i LameXP: - + Programmers: Programmerare: - + Project Leader Projektledare - + Translators: Översättare: - + Special thanks to: Speciellt tack till: - + Doom9's Forum Doom9's Forum - + Gleitz | German Doom9 Gleitz | German Doom9 - + Hydrogenaudio Forums Hydrogenaudio Forums - + RareWares RareWares - + GitHub GitHub - + SourceForge SourceForge - + Qt Developer Network Qt Developer Network - + BerliOS Developer - + CodePlex - + Marius Hudea Marius Hudea - + Codecs.com Codecs.com - + If you are willing to contribute a LameXP translation, feel free to contact us! Kontakta oss gärna om du vill medverka il LameXP, med en översättning! - + The following third-party software is used in LameXP: Följande 3:e-parts mjukvara används i LameXP: - + LAME - OpenSource mp3 Encoder LAME - OpenSource mp3 Encoder - - - - - - - - - - - - + + + + + + + + + + + + Released under the terms of the GNU Lesser General Public License. Släppt under Gnu Lesser General Public License. - + OggEnc - Ogg Vorbis Encoder OggEnc - Ogg Vorbis Encoder - + Completely open and patent-free audio encoding technology. Helt öppen och patentfri ljudkodningsteknologi. - + Nero AAC Reference MPEG-4 Encoder Nero AAC Reference MPEG-4 Encoder - + Freeware state-of-the-art HE-AAC encoder with 2-Pass support. Freeware state-of-the-art HE-AAC-kodare med stöd för 2-Pass. - + Available from vendor web-site as free download: Tillgänglig som gratis nedladdning, från utvecklarens webbsida: - + Aften - A/52 audio encoder Aften - A/52 audio encoder - + FLAC - Free Lossless Audio Codec FLAC - Free Lossless Audio Codec - + Open and patent-free lossless audio compression technology. Öppen och patentfri, förlustfri ljudkomprimeringsteknik. - + Opus Audio Codec Opus Audio Codec - + Totally open, royalty-free, highly versatile audio codec. Helt öppen, avgiftsfri, mycket mångsidig ljud-codec - + mpg123 - Fast Console MPEG Audio Player/Decoder mpg123 - Fast Console MPEG Audio Player/Decoder - + FAAD - OpenSource MPEG-4 and MPEG-2 AAC Decoder FAAD - OpenSource MPEG-4 and MPEG-2 AAC Decoder - + Released under the terms of the GNU General Public License. Släppt under GNU Generel Public License (GPL). - + Valdec from AC3Filter Tools - AC3/DTS Decoder Valdec från AC3Filter Tools - AC3/DTS Decoder - + WavPack - Hybrid Lossless Compression WavPack - Hybrid Lossless Compression - + Completely open audio compression format. Helt öppet ljudkomprimeringsformat. - + Musepack - Living Audio Compression Musepack - Living Audio Compression - + Monkey's Audio - Lossless Audio Compressor Monkey's Audio - Lossless Audio Compressor - + Freely available source code, simple SDK and non-restrictive licensing. Fritt tillgänglig källkod, enkel SDK och icke-restriktiv licensiering. - + Shorten - Lossless Audio Compressor Shorten - Lossless Audio Compressor - + Speex - Free Codec For Free Speech Speex - Free Codec For Free Speech - + Open Source patent-free audio format designed for speech. Öppen källkod, patentfritt ljudformat designat för tal. - + The True Audio - Lossless Audio Codec The True Audio - Lossless Audio Codec - + refalac - Win32 command line ALAC encoder/decoder refalac - Win32 kommandorad ALAC-kodare/-avkodare - + The ALAC reference implementation by Apple is available under the Apache license. ALAC referensimplementation av Apple finns tillgänglig under Apache-licensen. - + wma2wav - Dump WMA files to Wave Audio wma2wav - Dump WMA files to Wave Audio - + Copyright (c) 2011 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved. Copyright (c) 2011 LoRd_MuldeR <mulder2@gmx.de>. Some rights reserved. - + avs2wav - Avisynth to Wave Audio converter avs2wav - Avisynth to Wave Audio converter - + By Jory Stone <jcsston@toughguy.net> and LoRd_MuldeR <mulder2@gmx.de>. By Jory Stone <jcsston@toughguy.net> and LoRd_MuldeR <mulder2@gmx.de>. - + dcaenc dcaenc - + Copyright (c) 2008-2011 Alexander E. Patrakov. Distributed under the LGPL. Copyright (c) 2008-2011 Alexander E. Patrakov. Distributed under the LGPL. - + MediaInfo - Media File Analysis Tool MediaInfo - Analysverktyg för mediafiler - + SoX - Sound eXchange SoX - Sound eXchange - + GnuPG - The GNU Privacy Guard GnuPG - The GNU Privacy Guard - + GNU Wget - Software for retrieving files using HTTP GNU Wget - Mjukvara för att ta emot filer via HTTP - + UPX - The Ultimate Packer for eXecutables UPX - Den ultimata paketeraren för exekverbara filer - + Silk Icons - Over 700 icons in PNG format Silk Icons - Över 700 iconer i PNG-format - + By Mark James, released under the Creative Commons 'by' License. Av Mark James, publicerad under Creative Commons 'by' Licens. - + The copyright of LameXP as a whole belongs to LoRd_MuldeR. The copyright of third-party software used in LameXP belongs to the individual authors. The copyright of LameXP as a whole belongs to LoRd_MuldeR. The copyright of third-party software used in LameXP belongs to the individual authors. - + n/a n/a @@ -886,7 +886,7 @@ - + Show Details Visa detaljer @@ -1629,9 +1629,9 @@ - - - + + + Check for Updates Sök efter uppdateringar @@ -1672,13 +1672,13 @@ - + Disable Update Reminder Inaktivera uppdateringsmeddelande - + Disable Sound Effects Inaktivera ljudeffekter @@ -1763,23 +1763,23 @@ MuldeRs Öppen källkodsprojekt - + Adding file(s), please wait... Lägger till fil(er), vänta... - - + + Access Denied Åtkomst nekad - + This usually means the file is locked by another process. Det innebär oftast att filen är låst av någon annan process. - + %n file(s) have been rejected, because read access was not granted! %n fil har avvisats, eftersom läsbehörighet saknas! @@ -1787,22 +1787,22 @@ - + CDDA Files CDDA-filer - + Sorry, LameXP cannot extract audio tracks from an Audio-CD at present. LameXP kan för närvarande inte extrahera ljudspår från en ljud-CD. - + We recommend using %1 for that purpose. Vi rekommenderar att du använder %1 för det ändamålet. - + %n file(s) have been rejected, because they are dummy CDDA files! %n fil har avvisats, eftersom det är en CDDA attrappfil (dummy)! @@ -1810,17 +1810,17 @@ - + Cue Sheet Cue-fil - + Please use LameXP's Cue Sheet wizard for importing Cue Sheet files. Använd LameXPs cue-guide för att importera cue-filer. - + %n file(s) have been rejected, because they appear to be Cue Sheet images! %n fil har avvisats, eftersom det verkar vara en cue-avbildning! @@ -1828,17 +1828,17 @@ - + Files Rejected Undantagna filer - + This usually means the file is damaged or the file format is not supported. Det innebär oftast att filen är skadad eller att filformatet inte stöds. - + %n file(s) have been rejected, because the file format could not be recognized! %n fil har avvisats, eftersom filformatet inte känns igen! @@ -1846,729 +1846,729 @@ - + Scanning folder(s) for files, please wait... Genomsöker mapp(ar) efter fil(er), vänta... - + DEMO VERSION DEMOVERSION - + You can drop in audio files here! Du kan dra och släppa filer här! - + Initializing directory outline, please be patient... Initierar mappdisposition, vänta... - + Open File in External Application Öppna fil i externt program - + Browse File Location Öppna målmappen - + Browse Selected Folder Öppna markerad mapp - + Refresh Directory Outline Uppdatera mappdisposition - + Go To Parent Directory Gå till överordnad mapp - + Bookmark Current Output Folder Lägg till aktuell utdatamapp i favoriter - + Export Meta Tags to CSV File Exportera metadata till CSV-fil - + Import Meta Tags from CSV File Importera metadata från CSV-fil - + License Declined Licensavtal avvisat - + You have declined the license. Consequently the application will exit now! Du har nekat att godkänna licensavtalet. Programmet kommer nu att avslutas! - + Goodbye! Hej då! - + LameXP - Expired LameXP - Upphört - + This demo (pre-release) version of LameXP has expired at %1. Denna demoversion av LameXP har upphört att gälla från %1. - + LameXP is free software and release versions won't expire. LameXP är kostnadsfritt och release-versionerna upphör inte att gälla. - - + + Exit Program Avsluta programmet - + It seems that a bogus anti-virus software is slowing down the startup of LameXP. Det verkar som ett antivirusprogram orsakar långsammare uppstart av LameXP. - + Please refer to the %1 document for details and solutions! Läs gärna %1 för detaljer och lösningar! - + Slow Startup Långsam uppstart - - - - - + + + + + Discard Stäng - - + + Don't Show Again Visa inte igen - + Urgent Update Viktig uppdatering - + Your version of LameXP is more than a year old. Time for an update! Din version av LameXP är mer än ett år gammal. Dags att uppdatera! - - + + Ignore Ignorera - + Skipping update check this time, please be patient... Hoppar över uppdateringskontrollen den här gången, vänta... - - - + + + Update Reminder Uppdateringspåminnelse - + Your last update check was more than 14 days ago. Check for updates now? Din senaste uppdateringskontroll var för mer än 14 dagar sedan. Vill du söka efter uppdateringar nu? - + Your did not check for LameXP updates yet. Check for updates now? Du har inte genomfört uppdateringskontroll ännu. Vill du söka efter uppdateringar nu? - + Postpone Skjut upp - + LameXP detected that your version of the Nero AAC encoder is outdated! LameXP har uptäckt att din version av Nero AAC-kodare är utdaterad! - + The current version available is %1 (or later), but you still have version %2 installed. Aktuell version är %1 (eller senare), men du har fortfarande version %2. - + n/a n/a - + You can download the latest version of the Nero AAC encoder from the Nero website at: Du kan ladda ner senaste versionen av Nero AAC-kodare från Neros webbsida: - + (Hint: Please ignore the name of the downloaded ZIP file and check the included 'changelog.txt' instead!) (Tips: Bortse från den nedladde zipfilens namn, och kontrollera istället den inkluderade textfilen 'changelog.txt'!) - + AAC Encoder Outdated AAC-kodare utdaterad - + The Nero AAC encoder could not be found. AAC encoding support will be disabled. Neros AAC-kodare kan inte hittas. Stödet för AAC-kodning kommer att inaktiveras. - + Please put 'neroAacEnc.exe', 'neroAacDec.exe' and 'neroAacTag.exe' into the LameXP directory! Placera 'neroAacEnc.exe', 'neroAacDec.exe' och 'neroAacTag.exe' i LameXPs programmmapp! - + Your LameXP directory is located here: Din LameXP programmapp finns här: - + You can download the Nero AAC encoder for free from the official Nero website at: Du kan ladda ner Nero AAC-kodare gratis från den officiella webbsidan: - + AAC Support Disabled AAC-stödet är inaktiverat - - - + + + LameXP LameXP - + You must add at least one file to the list before proceeding! Du måste lägga till minst en fil till listan innan du fortsätter! - + Not Found Kan inte hittas - + Your currently selected TEMP folder does not exist anymore: Din aktuella TEMP-mapp finns inte längre: - + Restore Default Återställ standard - + Cancel Avbryt - + There are less than %1 GB of free diskspace available on your system's TEMP folder. Det finns mindre än %1 GB ledigt diskutrymme i systemets temp-mapp. - + It is highly recommend to free up more diskspace before proceeding with the encode! Du behöver frigöra mer diskutrymme innan du fortsätter med omkodningen! - + Your TEMP folder is located at: Temp-mappens placering: - + Low Diskspace Warning Varning för dåligt diskutrymme - + Abort Encoding Process Avbryt omkodningsprocessen - + Clean Disk Now Rensa disken nu - + Low Diskspace Dåligt diskutrymme - + You are proceeding with low diskspace. Problems might occur! Du fortsätter med dåligt diskutrymme. Problem kan uppstå! - + Sorry, an unsupported encoder has been chosen! En kodare som saknar stöd har valts! - + Cannot write to the selected output directory. Kan inte skriva till den valda utdatamappen. - + Please choose a different directory! Välj en annan målmapp! - + Load Translation Läs in översättning - + Translation Files Översättningsfiler - + Do you really want to disable the update reminder? Vill du verkligen inaktivera uppdateringspåminnelsen? - - - - - - - + + + + + + + Yes Ja - - - - - - - + + + + + + + No Nej - + The update reminder has been disabled. Uppdateringspåminnelsen har inaktiverats. - + Please remember to check for updates at regular intervals! Glöm inte att söka efter uppdateringar med jämna mellanrum! - + The update reminder has been re-enabled. Uppdateringspåminnelsen har återaktiverats. - + Do you really want to disable all sound effects? Vill du verkligen inaktivera alla ljudeffekter? - - + + Sound Effects Ljudeffekter - + All sound effects have been disabled. Alla ljudeffekter har inaktiverats. - + The sound effects have been re-enabled. Ljudeffekterna har återaktiverats. - - - + + + Nero AAC Notifications Nero AAC-meddelanden - + Do you really want to disable all Nero AAC Encoder notifications? Vill du verkligen inaktivera alla Nero AAC-meddelanden? - + All Nero AAC Encoder notifications have been disabled. Alla Nero AAC-meddelanden har inaktiverats. - + The Nero AAC Encoder notifications have been re-enabled. Nero AAC-meddelanden har återaktiverats. - - - + + + Slow Startup Notifications Meddelande om långsam uppstart - + Do you really want to disable the slow startup notifications? Vill du verkligen inaktivera meddelanden om långsam uppstart? - + The slow startup notifications have been disabled. Meddelanden om långsam uppstart har inaktiverats. - + The slow startup notifications have been re-enabled. Meddelanden om långsam uppstart har återaktiverats. - - + + Open Cue Sheet Öppna cue-fil - - + + Cue Sheet File Cue-fil - - - + + + Beta Updates Beta-uppdateringar - + Do you really want LameXP to check for Beta (pre-release) updates? Vill du verkligen att LameXP skall söka efter beta-uppdateringar? - + LameXP will check for Beta (pre-release) updates from now on. LameXP kommer i fortsättningen att söka efter beta-uppdatyeringar. - + Check Now Sök nu - + LameXP will <i>not</i> check for Beta (pre-release) updates from now on. LameXP kommer i fortsättningen <i>inte</i> att söka efter beta-uppdateringar. - - - + + + Hibernate Computer Viloläge - + Do you really want the computer to be hibernated on shutdown? Vill du verkligen att datorn skall försättas i viloläge vid avslut? - + LameXP will hibernate the computer on shutdown from now on. LameXP kommer i fortsättningen att försätta datorn i viloläge vid avslut. - + LameXP will <i>not</i> hibernate the computer on shutdown from now on. LameXP kommer i fortsättningen <i>inte</i> att försätta datorn i viloläge vid avslut. - - - + + + Shell Integration Utforskarintegrering - + Do you really want to disable the LameXP shell integration? Vill du verkligen inaktivera LameXPs utforskarintegration? - + The LameXP shell integration has been disabled. LameXPs utforskarintegration har inaktiverats. - + The LameXP shell integration has been re-enabled. LameXPs utforskarintegration har återaktiverats. - - + + Add file(s) Lägg till fil(er) - - + + Add Folder Lägg till mapp - + Loading dropped files or folders, please wait... - - + + Save CSV file Spara CSV-fil - - - - + + + + CSV File CSV-fil - - - - + + + + CSV Export CSV-export - + Sorry, there are no meta tags that can be exported! Det finns ingen meta-data som kan exporteras! - + Sorry, failed to open CSV file for writing! Kunde inte öppna CSV-filen för skrivning! - + Sorry, failed to write to the CSV file! Kunde inte skriva till CSV-filen! - + The CSV files was created successfully! CSV-filen skapades korrekt! - - + + Open CSV file Öppna CSV-fil - - - - - + + + + + CSV Import CSV-import - + Sorry, failed to open CSV file for reading! Kunde inte öppna CSV-filen för läsning! - + Sorry, failed to read from the CSV file! Kunde inte läsa från CSV-filen! - + Sorry, the CSV file does not contain any known fields! CSV-filen innehåller inga kända fält! - + CSV file is incomplete. Not all files were updated! CSV-filen är inte komplett. Alla filer uppdaterades inte! - + The CSV files was imported successfully! CSV-filen importerades korrekt! - - + + New Folder Ny mapp - + Enter the name of the new folder: Namn på den nya mappen: - + Failed to create folder Kunde inte skapa någon mapp - + The new folder could not be created: Den nya mappen kunde inte skapas: - + Drive is read-only or insufficient access rights! Diskenheten är skrivskyddad eller åtkomsträttigheter saknas! - - + + Quality Level %1 Kvallitetsnivå %1 - + Compression %1 Kompression %1 - + Uncompressed Okomprimerad - + Best Quality (Slow) Bäst kvalitet (Långsam) - + Acceptable Quality (Fast) Acceptabel kvalitet (Snabb) - + High Quality (Recommended) Hög kvallitet (rekommenderas) - + Current Encoder: %1 - + Poor Quality (Very Fast) Dålig kvallitet (mycket snabb) - + File name without extension Filnamn utan filtillägg - + Track number with leading zero Spårnummer med inledande nolla - + Track title Spårtitel - + Artist name Artistnamn - + Album name Albumnamn - + Year with (at least) four digits Årtal med (minst) fyra siffror - + Comment Kommentar - + Characters forbidden in file names: Förbjudna tecken i filnamn: - + Rename Macros Namnändra macron - + %n Instance(s) %n instans @@ -2576,37 +2576,37 @@ - + Cannot write to the selected directory. Please choose another directory! Kan inte skriva till den specificerade mappen. Välj en annan destination! - + Overwrite Mode Överskrivningsläge - + Warning: This mode may overwrite existing files with no way to revert! Varning! Det här läget kan skriva över befintliga filer, utan möjlighet att återskapa! - + Continue Fortsätt - + Revert Återställ - + Already Running Körs redan - + LameXP is already running, please use the running instance! LameXP körs redan, använd den redan startade instansen! @@ -3090,72 +3090,72 @@ Stäng - + Show details for selected job Visa detaljerad info för markerad åtgärd - + Browse Output File Location Öppna utdatamnappen - + Filter Log Items Filtrera loggobjekt - + Show Running Only Visa endast aktiva - + Show Succeeded Only Visa endast klara - + Show Failed Only Visa endast misslyckade - + Show Skipped Only Visa endast överhoppade - + Show All Items Visa alla - + Encoding Files Kodar om filer - + Your files are being encoded, please be patient... Dina filer kodas om, vänta... - + Encoding files, please wait... Kodar om filer, vänta... - + Multi-threading enabled: Running %1 instances in parallel! Flertrådskörning aktiverad: Kör %1 parallella instanser! - + Aborted! Waiting for running jobs to terminate... Avbrutet! Väntar på att aktiva processer skall avslutas... - + Encoding: %n file(s) of %1 completed so far, please wait... Kodar! %n fil av%1 slutförd. vänta... @@ -3163,17 +3163,17 @@ - + Creating the playlist file, please wait... Skapar spelningslista, vänta... - + Process was aborted prematurely by the user! Åtgärden avbröts i förtid av användaren! - + Process was aborted by the user after %n file(s)! Åtgärden avbröts av användaren efter %n fil! @@ -3181,22 +3181,22 @@ - + LameXP - Aborted LameXP - Avbrutet - + Process was aborted by the user. Åtgärden avbröts av användaren. - + Process finished after %1. Åtgärden slutförd efter %1. - + Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information! Fel! %1 av %n filer misslyckades (%2). Dubbelklicka på misslyckat objekt för info! @@ -3204,7 +3204,7 @@ - + %n file(s) skipped %n fil hoppades över @@ -3212,7 +3212,7 @@ - + Error: %1 of %n file(s) failed. Double-click failed items for detailed information! Fel! %1 av %n filer misslyckades. Dubbelklicka på misslyckat objekt för info! @@ -3220,7 +3220,7 @@ - + All files completed successfully. Skipped %n file(s). Alla filer korrekt slutförda. %n fil hoppades över. @@ -3228,54 +3228,54 @@ - + LameXP - Error LameXP - Fel - + At least one file has failed! Minst en fil har misslyckats! - + All files completed successfully. Alla filer korrekt omkodade. - + LameXP - Done LameXP - Klar - + None of the items matches the current filtering rules Inga objekt matchar aktuell filtrering - + Playlist creation failed Kunde inte skapa spelningslista - + The playlist file could not be created: Spelningslistan kunde inte skapas: - + Warning: Computer will shutdown in %1 seconds... Varning! Datorn kommer att stängas av om %1 sekunder... - - + + Cancel Shutdown Avbryt avstängning - + %n hour(s) %n timma @@ -3283,8 +3283,8 @@ - - + + %n minute(s) %n minut @@ -3292,8 +3292,8 @@ - - + + %n second(s) %n sekund @@ -3301,7 +3301,7 @@ - + %n millisecond(s) %n millisekund @@ -3325,22 +3325,22 @@ QApplication - + Executable '%1' doesn't support Windows compatibility mode. EXE-filen '%1' stöder inte Windows kompatibilitetsläge. - + Executable '%1' requires Qt v%2, but found Qt v%3. EXE-filen '%1' kräver Qt v%2, du har Qt v%3. - + Executable '%1' was built for Qt '%2', but found Qt '%3'. EXE-filen '%1' är byggd för Qt '%2', du har Qt '%3'. - + Executable '%1' requires Windows XP or later. @@ -3409,104 +3409,104 @@ Stäng - - + + Build Build - + Unknown Okänd - + Testing your internet connection, please wait... Kontrollerar iInternetanslutningen, vänta... - + It appears that the computer currently is offline! Datorn verkar inte vara ansluten till Internet! - - + + Please make sure your computer is connected to the internet and try again. Tillse att datorn är ansluten till Internet och försök igen. - + Network connectivity test has failed! Anslutningskontrollen misslyckades! - + Checking for new updates online, please wait... Söker nya uppdateringar, vänta... - + Failed to fetch update information from server! Kunde inte hämta uppdateringsinformation från servern! - + Sorry, the update server might be busy at this time. Plase try again later. Uppdateringsservern kan vara upptagen. Försök senare. - + More information available at: Mer information hittas på: - + A new version of LameXP is available! En ny version av LameXP finns tillgänglig! - + Initializing, please wait... Initierar, vänta... - + We highly recommend all users to install this update as soon as possible. Vi rekommenderar alla användare att installera denna uppdatering så snart som möjligt. - + No new updates available at this time. Det finns inga nya uppdateringar. - + Your version of LameXP is still up-to-date. Please check for updates regularly! Din version av LameXP är uppdaterad. Kontrollera regelbundet! - + Your version appears to be newer than the latest release. Din version verkar vara nyare än senaste 'Release'. - + This usually indicates your are currently using a pre-release version of LameXP. Det innebär normalt att du använder en beta-version av LameXP. - + Update is being downloaded, please be patient... Uppdatering laddas ner, vänta... - + Update ready to install. Applicaion will quit... Uppdatering klar att installeras. Programmet kommer att avslutas... - + Update failed. Please try again or download manually! Uppdateringen misslyckades. Försök igen, eller ladda ner manuellt! diff --git a/gui/ProcessingDialog.ui b/gui/ProcessingDialog.ui index d09ffd1d..cac33584 100644 --- a/gui/ProcessingDialog.ui +++ b/gui/ProcessingDialog.ui @@ -143,13 +143,13 @@ 48 - 45 + 48 48 - 45 + 48 diff --git a/res/Sounds.qrc b/res/Sounds.qrc new file mode 100644 index 00000000..298042ba --- /dev/null +++ b/res/Sounds.qrc @@ -0,0 +1,18 @@ + + + + sounds/aborted.wav + sounds/beep.wav + sounds/beep2.wav + sounds/blast.wav + sounds/drop.wav + sounds/error.wav + sounds/shutdown.wav + sounds/success.wav + sounds/tick.wav + sounds/uuaarrgh.wav + sounds/waiting.wav + sounds/whammy.wav + sounds/woohoo.wav + + diff --git a/res/images/Working.gif b/res/images/Working.gif index e19236d97a030398bcb52444332086382ff3c732..d937c4fc2dea1325c91e4d633d6299fee48882fa 100644 GIT binary patch literal 10556 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 literal 11334 zcmbuFXJ+ba`)~VgyYpwHs$d}|xe#!OxulxQ# z3u2;$p-LWv2kC%7-~e2w(GB(wN`gskGEIE}Pr9vvKUkSbSW3_nGb&&tK%{ z&kV5mj|WM()J_mQxB)o)~9hjxQ%-n$8L_rC&YK3>wfXWi~Pd;z~Dd^hD+^^ z+R3&2F(H~T- z@U8Z7t%J-nfZn@Z+4%7Mg3aNchdesl=)oPW6@_V3yF-*DJU3%gV~%r>LYX$_P*`6B z{o`u|yGmHvA_<*YndG52%Q!5%($6Z4(PH1C1S>qd8H1sa))zRJ)baua*{-Zc}x zWHBUH%?hM;a`+!%BdSRq{=vr52K5fa0)Rv~^JCI3Xvk_lVo92to#tl>GIY~5b#Pia z-f=Q1Um@0B+U4+7&%+nktdCy)^c`6s0sQYOT2^BcO&XD5LzFmxGPw5(oTF6@z-fCr z-bEw6u$tA752Fm?&_x@DK1CCTuYknBZ%iP9bP>{r@!<;k(Ue4yCg;OTW4q#FKQn*o zI47McSqmsCC(uH^Y7!kHn08iKa`Ufgr2@4^_RYvk06lMbataPlE(7WTqXvLWR| zIdrLJ=N3JQs(yK3|3Dv&bFAT>P}~~X$9&RZFbDtwS;X0}PdY{u6RN>7?KS`(wuF3X zreg=hU#em{ihuvVNB-acyZ+yU+Ma3y_77ZVW@P>;+I;VS8)`fe{|ByZhr?f^ZR54& zHLp$)sLa>A4lcYgK@y!B!e%G+e<4+R`JgJ3X@5 zL9vlMWvT=~`PLA&fzCn-OzjQQ@(Vy8N^x;;Js6q|W7F|^rLquSQxoCS8W~1tXFKWh zUDpN@Ym4`+^l{LEyj|J;h&2^!!;5`=g&QP+A!DGuJ2IRnaVDRG(&j4W2Jk#uJp3d+ zP&+qvXQU57NT&nsgKSsGwbghAC%Jb#*OR5LfG9H07*4g7(NFW>si&1gwPbGb zpnS72YM8`kf@wS*u!A~p&H8jw>Hs2}RaZ-DU`uE8_N4gvC00UQCBwnze)`I;5#$`_ zI4r_&zr4Z0_uGk&APWgqPGIDedA+peCce+qH4V8wggLWR4(}8*6WlO!iDQp$4Km9A zzI~a&?K*Ha1L>SCGmtc)-_iE|lBp0~3j6-iMsDqJ z**`Ead+jfe%qkX8i^jEY{ZRZAi@}mb&Go9*zmbs#>%KHXSE6Br?+`-C_9b7OOM>DJ zEBY|xK~E+u1PxhD888SAt{*B$fChV8n?u&XgOfK6pt-ABVHjFwk2qI;dwp~EP^ZPX z#dFX+h{V;3pwIxWr-&G8fGA7*zc+~yLtn^8H3G8{s`RTBL8=&!m}QVe50fTi;f2HW zt!Y_F?c1pa85F^afwb!)nHyZz82C3EDS$!vU_-_X?FzPw{+=6^E9>PT3iaxB#M~Dm zNiKr)Qb%MMWT|bDQzJ(jXxY(A-SAB@W?+c6f1o2$^pf7(^gy@{Dy1F&isbq5{06tc zbR&RFdrH}p|?hn{yU<={y&iYS9rB0uq}=My%2W& zV+j8#tbYh$Th1b9M88FBfS@Ysw}`D~OY20ZqOc!-&razaLo6$A8d4>;c~ta`FBzDZ z$RF!+aY03%I6Qub78)CtXAkp}kc)^!=aK@#_U$2H9?ZTnjKQmMVb_DqEMBk!J}ih; z&e})WQiMHf6ozikI^+b~v<zh| z<+S-G%EjA%(EQ{5W-ZBO8PDZ*|B!)7Sl^Xy${VVHdwX=L1#L0-IC5GhPaMaZsliDC zFE$;Gb6+IXHm93g`=a}gqKKp83DT%)f{)u0Yk)@b35mIr(I94Sgh5N@7gesAa70pK^*oZ;HH$%T%4l~hiHb%(XM0p8ii$G*zaL49cWz?? zCC}lNOmpc%_gyK)rGD}{{N&IAGu#eq>_=n9MB_SYr^Trhb(6SDrv9}<01&BnnP!5@ zYBq1CO{`QS8N&)@MNFC13a2ESbx0=Kx;Bx@9EQM9H!TM|#P{BtAmQiJ$~FZx7o`G2 zbfE?t;M+@7I28?liMBpAtLr_mmUp4(n~hV&8J!T0qi17P8%cd^jkCJhWLX{W89Cot=6=O;U4!)dr1q6 zk4tv%(Xb!l=E)^+Mf&mMBWOfXD6UMLqUvkN=qc7Cdv-j^_#IT?pMq+0+Bd>%bJ|&9 zwmI!@!fdl;o7Vm}r8c4cXIr)j?QgdHT9t`-n_AmIwaM))s5ZNPW6QP_p0#D0W52Ow zn=0Eh`%R?U{QRF)*{1GqRQYXBe(l1)JvLCAUuP=n`Mvmz z>S04c+~`x%r*|@4b}L!63|!WsvY9s5%Zb^LYSjR%4FRK`4w+*DZW#=$KM1^BP z1Gf%_Gl0H1*>k*w0sB)yTuUInRTzwJBpMaUwfK20K$5p#@EYO=oK3unwH__b{SrLl z8tCAGh9e}w>~^9*XT|;?L~SuE7sOLTe7GhdjcWJY4(A8@&1pPh7w_!n^#IANY-CHd zNEZf))Yh-N=;*eJ3CTSk&7=g!qh-qff`?KmDy~3n;-V-ET&0aaPC)foT3m^Nd_#t{ zcTOHeoBFvk{m_6j2P=OxMqO{qy&>!~H|mxWeG(NuZGi6j7Q2_7^oCY0NF_Bgs!l`N zuKQ#Nq{3mP8h(1|dYNDu%(s!^2zHxpNr!ag?a=y4<&S%Dq)Li}R<=-s2G}k&O(m_< zyU1i>`n|4w1Bj8G9EoG@$)&h!opyH(_@w^yTPe(KmaejM-#B2{OS1`E`n+Tg3GFwN z!SXtcgZHSsrKEfvkE77F;9*%5JR(_G(a6>SYch67NK9k&Q@&>)1Y+&$AM?Z~H=Yu^ z>H>N2n_u4|ndf|low~lV1>$-4M=9{+@%ekuoCaur32gsS0H$>~0w}y?Dz)b4kLX6K z8n|(E7Xi-?k;u3^j2Z&1DG`G76B>*f3_cgsF>B56!T|n{_u(G?ByCl|bU{DP-;U{gS?LQ?wk$f%WA{u)lzXcr_9`t*dYpc*IWqd^ z^urCbUCHek$%!I?RJE$FV@J!+cPYWt>brR*|JOo zLVqkAzNOmD#wW+J$B#{?ZuIiqPV(dE^-NCi#Rn;%Hymq!vi>IfTP7aFqqBWG9OK>m zL%L|`5f_vkoft#8x0vKt1{r`KVaIBiKn0e>Oncg69F9iSc_zxxem9t9ER4(Ljl5Jb z!39Vkw4_fVQFA|&=;l}=X{q~waBP3N`Sb{Lq{SW>^lD@Ef#u(p9BYM4 z9_u5{yAh~lD%_#@N%1sQwQ}Sp-j7}RabBwyiVLjkR4@;pT7%s5Q)dym)imLBJ6cUr zNz`kvgxJF`gHVZ<9^kw2TJBoE$xrH>mp)hvo_#pFPg#N_6n8V62urR+&uzW@iL?=q1eFA|Z*ji@yz-=&vQd6V$o z>%9{4zW9XrR1{JwXYO!4baNmozJt&7D6CvmCEa;lb;G{Cf&m^rt?8=3+q2MqDo0SkNv#0^gO8hcdzg@}vxlcq;^Wis zp@XbXexKE#w}2aLhi@c> z06>W6*;|@UhJ9zE9NN}rLJD{egJzNhtN&?w;{Du5x*ohRkUM?ku(^6c=%dvy%@!nb zmwowIWzpn40-6%olgL!JkV$s2V+utdcLqs)$4_qHz^?>X`66OF5mDMt?L3w>bt_@e zWo$;mg{i{(OY!!e+fE9VCn~Ec{8K5{O>Hc_bA@S825E~<;yL9FlfFGM;^&}-g?DsJ zK8<#&pzznp4`0?_u5)v${CYQ7`4J1LNRT_7nFQ*cKYt~$=D|NEgUv)G$3Oi_>%15L zSPKnU|M79Z!6KJC->1bP1f8y`u%KKToz7cxjfs2^L-B7nEQyq?^kg&-HN#VB9KKC0 z)Lo7X>xe`b)42RzWi`3M`Pa)kQ_Eq$JVE_@kn~R8xgaOwdv2xkXqpwK4$#1Z$O(t4#+Z`=Qq zHdudKDrGg2`LAIeT;U(1SykhMKMpq6q1VL5GZzU?4YdEQ$K?6a~~L^$MaDhMK1lLhr4w=|389Fd~qS9o|%3@6y3`cX3I z!wBP_`~pF{{qW|twsxTc=ktCSqd=if7nz_t!d^_Rd;jubk+Y~TQ=u?x;TI^>tY*bB zgOS4u;9eULoPuawf)!kA0#{r|_V6-U$JGdeW7ybGs$6|B@HL(8L zkpN2*`R5H~11qtX#ID=<*iXGRe&Zi+4app2ap#=O=FV%Ec(xFNH>Pwv#zTtf7!RhnJG}_zyrSz_b}Z z&xJWDB<4Tr!`Q4}UBIbU+z*UYT3Sf_ZnT*gik~(^?PvxOE-1_*hDywez5?>y1x{pM zkL5lJn6{MFqT+|aMpu<#1+YH3Roy^GpB~t`E_hJc*kaab8+_$nM{4cjhX*j}_aH5l zP@$roC>ixSY{bV}T46-~bQOWroeo6h?eyZ=d3P%~hwHn{_jUfH>wP=R{8xaD95XOL zbiK&@nAl=324UEXYF9=dO$mLUNo#QAU)W;-aLx1Wf0yC;|0%I=cRMy*|1@D=kF8j| zEoc8lCH|l4oi`oPAFTMFOCB4shhC4WivVc$Z^SN+^E8T24G}s9+5VklK*Mf}vT1zc zqqp+?Z9LkQblNujInHd*tEH=^#J5l&{gvCvz$18JFhwe}vzLP|XjgmI|q- z0eAcdl?k9T8!e!yc9c@zFQFl_!!a>zXRpoY$#q^%q+dus?k)Z1XA3E6^7^6G?maJ! z>hykmOvOvF8Y&(nF;4nBDnutlRV$(de2aQ9EDFt%gCen*01G}ezaVM7?p8VG6=)vs zwZ1z;tu4LV9Xp`-N?IKPiM$T*ce*-;@XAGG?GcJ20xLKD+zzk8g|)9!iqG+D2u%8E z)%U~9uBNOz%9rC+NDXo>V{G_yBeVj3bB0D8kCCjoxb3@ho#gww?gksS9Z527K7H>h z0ifz!UMyY3rvlSit+Z3>)%dvgm;57?P)B342U`w)gw~Q^8L|&|LI7aNhQe4O)YyZK zMBt}}4cZ60X|U==zcPQQQsYNYJ2x%+LXIHa=i|5oT)B-N=C{Q?ReXvtfWXH51 z2y^&FY8c*VRl|HoO=h%xyiCm!K$;}JmqjvnyaYLeola6QIfkfa0-qFJCJ zm}-Bt2_(rUb_R7HsevcEs?DVBJ3hucz>PsdO=A;)(tzoA;wA57=Q7`f*{ zg6o2@oadaHg5?i_16l*>)%4GPA?eZNYM^`zr^j6|c3cTvN5vZCD|B!?4HqwMx{?Kl z((_e(#V+YJgzs?eqyAipYY2crSXcoAOKI2=N7VtyCe4f{VCk8rW{kT8+r&vrHlm}V z%78^QdOSqyMP43q#-rL=y9^n;^w)?Jag$K>+4N7IbT*#7j6;(|7wfhH`kL+{DAP&> z`akd8&Kk2CLgvDkgjo9zzW-9X!%h!v8Xru*T-BTRkE{AJiKy-qfMDu2H5mvFKK}A zw@|AH<&(G*fCF7h2#()nScV-~yx=bOB#?+u`3K2{1pT2Tn z`(ST5xD_=TJcx4-lY>Yk-qeP4Dzb`Ut~3$DZ=T$VNv3v7bc8T|CleoTGPS|+Pp35v z)MuYn5GLtjN!6SwrViypv@j7A_6UIO_=Z%roA^jwg9589RwCsh@4$-QK=pcpB#^18 z-tH?JsBuM`F&O7Ynl>Qw{P>8WZ1@pFV05Gyr#l^sY^n>9x}^E4oaFs8;I z0JAT^5c32ApmpV=R4L@$RSLMNfG8Fd`6AJn!+%h>&O&QT*#GAC&+69MsGUXEmasNx z|JPx5mRp;1zd`p;{djhyouzkn^)y?z_9m};le51;dtl*)sN@I!`;rTKj_r0F{aUs1 z<-?x-#V^C3Wi9;f!m6;j?UzCk^dO0PjYGypjgr3BN1@b3W@e{WEr?MfoFmKkMB)@N z2lj%E23=n5igHEqlGY7i{qh{OM(0qbbU#z*^I;%?G!NK#VYx$IHZHD>-kghI1DNYR zo{&2bVrcFfP3Y#s>prO58mynW&UH6sOn?*76);6#X@SDwD%OE3 zlQRtobM-(7vE&=k%9F`JN18nS{XM5NxJ^TMzEQJs?tH)hnfsb7+;qFAzu7qft0`= z^pHXWUfogxk>kuZ7}Q?WPT*TRhUE#vpfa*9$^2&oISa4*5-oQ4Bvp8*1|pOtB_dAkw5GWgA9G1sCLx zkvtP~>ge7yvl>Hv8RxlY(S4Ez*p|{zPe$9$<0Da1@e3(Ig9<2eBx!bn{SU51yjc$0 zX#LX(c9zrGOHXfB#D5*Gvv-}|?1x{E$A5M$ViwZbOHcni#Qx4HUHFDm=@S1DTe#|X zrizm%{OQRB!>tXpQJ;MXNC{k$;~(%WSEf8&T=`2klhpFIE^BZ^ZC;5pV8ghW%@kRCHxJM3f944euzANSjT{hI^xDPd1Vx0ltz zFU25aMm7j5$5dKZJ#7Fymd-!}m#W4D%IB9`=IniRo%RD)igkoak0*)SMEZSEvO$A+ z_eONee%f`~qCMr^uDGy3)9F1Y2#&}nv2`rt$<=cJFy4ClT+W(voWKc^dgX$N3t`-R z#pmWz?*ba~B9CS#$>)EsTgO{9$b>%_DEeS1(WHoee8ZdJdqL6`RE0gY!YN7II)v#> zkUg?&jaNg-X7STjv2qZNWvQG;EI>~s29_t&YX*b};0i@CCl1;Nx5AoHiYGeZ50jUj zth90o?B!Q54|pe&*^hn@sp89*wVE|#c=P6D^m((@rN~ic(n1*N1^_73iOLEc%p@^9 zB%dnD9kM3flEXiVJRcQ=A2W)H4BLGtEYTKYXurgCB^nek)dk~0V<{!*K&e>ksWHLO zbHh|HjAP0;XY;RhOlU%&Oazd*Gy_l_YP7%_<_cB7DyLP$`XGno0tDVO_~kk~s8Fum zdpHr@uSe)UlK{N1#Qycr{0#?402c#;er_WcMMw!9AZ4BFd5EP+AsRg^JF zTMBRFOKb+fwVhEb3Gt!-^UilS^IELf4xI@cKwC&QfQW{jWyTE#0XUt>y4 zbWU1-HmW$0ciPT3R+y`lcohXWQnrF#!I=zqHmHMaq7^xAF0K_~x1)#xtzr)-s0=`8 zYH1rAP;Tvc!lvWq}x~eqO-Ens+WnTd25=f(s2m@h0A#)`(0?Neo?C`JH=h&52 zG+gIPd`R?0fE?oXHs5&E`pY%KAY2jR0ElA|oxk#LvaG$o3PbdY8x|Q)zFS6*jf;rQ zztYcRp|3#$zq$`%9a-6<>1W;-Vevz?4;G0D`oC`%thAU=`lLB)9bYU~1f`YDR5|!u z3q_kylBjK=OXt&Dfg{?O4H*#^mqVh@dNO4?MPJ_1YBHiQY@fjxm2`IQ`uuNntk!qW z$I5%q;t*i<1wvlOPpeL+wngBdM$wuNLhe2YfX!B8vu+Ts_S}6Y8 zNUhyKj;e=zxOW%%>Mox{x!+Tvj|T?MK3ZZAfBqdHicL>YgD`RiAkq2$Z70e?==YBx$u4qR) zO}}u)MI5*2NgmygkND5);q}XE&8nkVw=Vs<1M&%h77ZW#DcZ-a5j{z&dLAkzI1PIB sV-8y7qPD=mvtPAEVvHi3CVKb#K<0eGa`My%Po{7lM#I;yEjaxD0E)20GXMYp diff --git a/src/Config.h b/src/Config.h index 57f52214..cb3ea1b5 100644 --- a/src/Config.h +++ b/src/Config.h @@ -35,7 +35,7 @@ #define VER_LAMEXP_MINOR_LO 9 #define VER_LAMEXP_TYPE Alpha #define VER_LAMEXP_PATCH 9 -#define VER_LAMEXP_BUILD 1495 +#define VER_LAMEXP_BUILD 1499 #define VER_LAMEXP_CONFG 1348 /////////////////////////////////////////////////////////////////////////////// diff --git a/src/Dialog_About.cpp b/src/Dialog_About.cpp index 5ee44753..24650d5f 100644 --- a/src/Dialog_About.cpp +++ b/src/Dialog_About.cpp @@ -25,7 +25,6 @@ #include "../tmp/UIC_AboutDialog.h" #include "Global.h" -#include "Resource.h" #include "Model_Settings.h" #include @@ -214,12 +213,12 @@ int AboutDialog::exec() { if(!lamexp_play_sound_file("imageres.dll", 5080, true)) { - lamexp_play_sound(0, true, L"SystemStart"); + lamexp_play_sound_alias("SystemStart", true); } } else { - lamexp_play_sound(IDR_WAVE_ABOUT, true); + lamexp_play_sound("uuaarrgh", true); } } @@ -291,7 +290,7 @@ void AboutDialog::tabChanged(int index, const bool silent) //Play tick sound if(m_settings->soundsEnabled() && (!silent)) { - lamexp_play_sound(IDR_WAVE_TICK, true); + lamexp_play_sound("tick", true); } //Scroll to the top diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp index f0ccba11..85149318 100644 --- a/src/Dialog_MainWindow.cpp +++ b/src/Dialog_MainWindow.cpp @@ -27,7 +27,6 @@ //LameXP includes #include "Global.h" -#include "Resource.h" #include "Dialog_WorkingBanner.h" #include "Dialog_MetaInfo.h" #include "Dialog_About.h" @@ -193,6 +192,12 @@ while(0) } \ while(0) +#define PLAY_SOUND_OPTIONAL(NAME, ASYNC) do \ +{ \ + if(m_settings->soundsEnabled()) lamexp_play_sound((NAME), (ASYNC)); \ +} \ +while(0) + #define LINK(URL) QString("%2").arg(URL).arg(QString(URL).replace("-", "−")) #define FSLINK(PATH) QString("%2").arg(PATH).arg(QString(PATH).replace("-", "−")) #define CENTER_CURRENT_OUTPUT_FOLDER_DELAYED QTimer::singleShot(125, this, SLOT(centerOutputFolderModel())) @@ -1095,7 +1100,7 @@ void MainWindow::dropEvent(QDropEvent *event) (*m_droppedFileList) << event->mimeData()->urls(); if(!m_droppedFileList->isEmpty()) { - if(m_settings->soundsEnabled()) lamexp_play_sound(IDR_WAVE_DROP, true); + PLAY_SOUND_OPTIONAL("drop", true); QTimer::singleShot(0, this, SLOT(handleDroppedFiles())); } } @@ -1270,7 +1275,7 @@ void MainWindow::windowShown(void) m_settings->licenseAccepted(++iAccepted); m_settings->syncNow(); QApplication::processEvents(); - lamexp_play_sound(IDR_WAVE_WHAMMY, false); + lamexp_play_sound("whammy", false); QMessageBox::critical(this, tr("License Declined"), tr("You have declined the license. Consequently the application will exit now!"), tr("Goodbye!")); QFileInfo uninstallerInfo = QFileInfo(QString("%1/Uninstall.exe").arg(QApplication::applicationDirPath())); if(uninstallerInfo.exists()) @@ -1286,7 +1291,7 @@ void MainWindow::windowShown(void) return; } - lamexp_play_sound(IDR_WAVE_WOOHOO, false); + lamexp_play_sound("woohoo", false); m_settings->licenseAccepted(1); m_settings->syncNow(); if(lamexp_version_demo()) showAnnounceBox(); @@ -1298,7 +1303,7 @@ void MainWindow::windowShown(void) if(lamexp_current_date_safe() >= lamexp_version_expires()) { qWarning("Binary has expired !!!"); - lamexp_play_sound(IDR_WAVE_WHAMMY, false); + lamexp_play_sound("whammy", false); if(QMessageBox::warning(this, tr("LameXP - Expired"), QString("%1
%2").arg(NOBR(tr("This demo (pre-release) version of LameXP has expired at %1.").arg(lamexp_version_expires().toString(Qt::ISODate))), NOBR(tr("LameXP is free software and release versions won't expire."))), tr("Check for Updates"), tr("Exit Program")) == 0) { checkForUpdates(); @@ -1340,7 +1345,7 @@ void MainWindow::windowShown(void) return; default: QEventLoop loop; QTimer::singleShot(7000, &loop, SLOT(quit())); - lamexp_play_sound(IDR_WAVE_WAITING, true); + lamexp_play_sound("waiting", true); SHOW_BANNER_ARG(tr("Skipping update check this time, please be patient..."), &loop); break; } @@ -1543,7 +1548,7 @@ void MainWindow::encodeButtonClicked(void) { QStringList tempFolderParts = tempFolder.split("/", QString::SkipEmptyParts, Qt::CaseInsensitive); tempFolderParts.takeLast(); - if(m_settings->soundsEnabled()) lamexp_play_sound(IDR_WAVE_WHAMMY, false); + PLAY_SOUND_OPTIONAL("whammy", false); QString lowDiskspaceMsg = QString("%1
%2

%3
%4
").arg ( NOBR(tr("There are less than %1 GB of free diskspace available on your system's TEMP folder.").arg(QString::number(minimumFreeDiskspaceMultiplier))), @@ -1649,9 +1654,9 @@ void MainWindow::tabPageChanged(int idx, const bool silent) } //Play tick sound - if(m_settings->soundsEnabled() && (!silent)) + if(!silent) { - lamexp_play_sound(IDR_WAVE_TICK, true); + PLAY_SOUND_OPTIONAL("tick", true); } int initialWidth = this->width(); @@ -3496,11 +3501,7 @@ void MainWindow::compressionTabEventOccurred(QWidget *sender, QEvent *event) } else if((sender == ui->labelResetEncoders) && (event->type() == QEvent::MouseButtonPress)) { - if(m_settings->soundsEnabled()) - { - lamexp_play_sound(IDR_WAVE_BLAST, true); - } - + PLAY_SOUND_OPTIONAL("blast", true); EncoderRegistry::resetAllEncoders(m_settings); m_settings->compressionEncoder(SettingsModel::MP3Encoder); ui->radioButtonEncoderMP3->setChecked(true); @@ -4024,10 +4025,7 @@ void MainWindow::overwriteModeChanged(int id) */ void MainWindow::resetAdvancedOptionsButtonClicked(void) { - if(m_settings->soundsEnabled()) - { - lamexp_play_sound(IDR_WAVE_BLAST, true); - } + PLAY_SOUND_OPTIONAL("blast", true); ui->sliderLameAlgoQuality->setValue(m_settings->lameAlgoQualityDefault()); ui->spinBoxBitrateManagementMin->setValue(m_settings->bitrateManagementMinRateDefault()); diff --git a/src/Dialog_Processing.cpp b/src/Dialog_Processing.cpp index 3f24e499..60531e7a 100644 --- a/src/Dialog_Processing.cpp +++ b/src/Dialog_Processing.cpp @@ -26,7 +26,6 @@ #include "../tmp/UIC_ProcessingDialog.h" #include "Global.h" -#include "Resource.h" #include "Model_FileList.h" #include "Model_Progress.h" #include "Model_Settings.h" @@ -113,6 +112,12 @@ while(0) } \ while(0) +#define PLAY_SOUND_OPTIONAL(NAME, ASYNC) do \ +{ \ + if(m_settings->soundsEnabled()) lamexp_play_sound((NAME), (ASYNC)); \ +} \ +while(0) + #define IS_VBR(RC_MODE) ((RC_MODE) == SettingsModel::VBRMode) //////////////////////////////////////////////////////////// @@ -694,17 +699,14 @@ void ProcessingDialog::doneEncoding(void) if(m_userAborted) { - CHANGE_BACKGROUND_COLOR(ui->frame_header, QColor("#FFF3BA")); + CHANGE_BACKGROUND_COLOR(ui->frame_header, QColor("#FFFFE0")); WinSevenTaskbar::setTaskbarState(this, WinSevenTaskbar::WinSevenTaskbarErrorState); WinSevenTaskbar::setOverlayIcon(this, &QIcon(":/icons/error.png")); SET_PROGRESS_TEXT((m_succeededJobs.count() > 0) ? tr("Process was aborted by the user after %n file(s)!", "", m_succeededJobs.count()) : tr("Process was aborted prematurely by the user!")); m_systemTray->showMessage(tr("LameXP - Aborted"), tr("Process was aborted by the user."), QSystemTrayIcon::Warning); m_systemTray->setIcon(QIcon(":/icons/cd_delete.png")); qApp->processEvents(QEventLoop::ExcludeUserInputEvents); - if(m_settings->soundsEnabled() && (!m_forcedAbort)) - { - lamexp_play_sound(IDR_WAVE_ABORTED, false); - } + if(!m_forcedAbort) PLAY_SOUND_OPTIONAL("aborted", false); } else { @@ -721,7 +723,7 @@ void ProcessingDialog::doneEncoding(void) if(m_failedJobs.count() > 0) { - CHANGE_BACKGROUND_COLOR(ui->frame_header, QColor("#FFBABA")); + CHANGE_BACKGROUND_COLOR(ui->frame_header, QColor("#FFF0F0")); WinSevenTaskbar::setTaskbarState(this, WinSevenTaskbar::WinSevenTaskbarErrorState); WinSevenTaskbar::setOverlayIcon(this, &QIcon(":/icons/exclamation.png")); if(m_skippedJobs.count() > 0) @@ -735,11 +737,11 @@ void ProcessingDialog::doneEncoding(void) m_systemTray->showMessage(tr("LameXP - Error"), tr("At least one file has failed!"), QSystemTrayIcon::Critical); m_systemTray->setIcon(QIcon(":/icons/cd_delete.png")); qApp->processEvents(QEventLoop::ExcludeUserInputEvents); - if(m_settings->soundsEnabled()) lamexp_play_sound(IDR_WAVE_ERROR, false); + PLAY_SOUND_OPTIONAL("error", false); } else { - CHANGE_BACKGROUND_COLOR(ui->frame_header, QColor("#E0FFE2")); + CHANGE_BACKGROUND_COLOR(ui->frame_header, QColor("#F0FFF0")); WinSevenTaskbar::setTaskbarState(this, WinSevenTaskbar::WinSevenTaskbarNormalState); WinSevenTaskbar::setOverlayIcon(this, &QIcon(":/icons/accept.png")); if(m_skippedJobs.count() > 0) @@ -753,7 +755,7 @@ void ProcessingDialog::doneEncoding(void) m_systemTray->showMessage(tr("LameXP - Done"), tr("All files completed successfully."), QSystemTrayIcon::Information); m_systemTray->setIcon(QIcon(":/icons/cd_add.png")); qApp->processEvents(QEventLoop::ExcludeUserInputEvents); - if(m_settings->soundsEnabled()) lamexp_play_sound(IDR_WAVE_SUCCESS, false); + PLAY_SOUND_OPTIONAL("success", false); } } @@ -1123,12 +1125,9 @@ bool ProcessingDialog::shutdownComputer(void) qApp->processEvents(QEventLoop::ExcludeUserInputEvents); - if(m_settings->soundsEnabled()) - { - QApplication::setOverrideCursor(Qt::WaitCursor); - lamexp_play_sound(IDR_WAVE_SHUTDOWN, false); - QApplication::restoreOverrideCursor(); - } + QApplication::setOverrideCursor(Qt::WaitCursor); + PLAY_SOUND_OPTIONAL("shutdown", false); + QApplication::restoreOverrideCursor(); QTimer timer; timer.setInterval(1000); @@ -1150,7 +1149,7 @@ bool ProcessingDialog::shutdownComputer(void) progressDialog.setLabelText(text.arg(iTimeout-i)); if(iTimeout-i == 3) progressDialog.setCancelButton(NULL); qApp->processEvents(QEventLoop::ExcludeUserInputEvents); - lamexp_play_sound(((i < iTimeout) ? IDR_WAVE_BEEP : IDR_WAVE_BEEP_LONG), false); + PLAY_SOUND_OPTIONAL(((i < iTimeout) ? "beep" : "beep2"), false); } progressDialog.close(); diff --git a/src/Dialog_Update.cpp b/src/Dialog_Update.cpp index 03e913d8..fd35a1e7 100644 --- a/src/Dialog_Update.cpp +++ b/src/Dialog_Update.cpp @@ -27,7 +27,6 @@ //LameXP includes #include "Global.h" -#include "Resource.h" #include "Thread_CheckUpdate.h" #include "Dialog_LogView.h" #include "Model_Settings.h" @@ -338,7 +337,7 @@ void UpdateDialog::threadFinished(void) if(!bSuccess) { - if(m_settings->soundsEnabled()) lamexp_play_sound(IDR_WAVE_ERROR, true); + if(m_settings->soundsEnabled()) lamexp_play_sound("error", true); } else { diff --git a/src/Dialog_WorkingBanner.cpp b/src/Dialog_WorkingBanner.cpp index d7414f83..ffee8d89 100644 --- a/src/Dialog_WorkingBanner.cpp +++ b/src/Dialog_WorkingBanner.cpp @@ -89,9 +89,9 @@ WorkingBanner::WorkingBanner(QWidget *parent) { m_style = new QWindowsVistaStyle(); this->setStyle(m_style); - ui->labelStatus->setStyle(m_style); ui->progressBar->setStyle(m_style); - ui->labelStatus->setStyleSheet("background-color: rgb(255, 255, 255);"); + ui->labelStatus->setStyle(m_style); + ui->labelStatus->setStyleSheet("background-color: #FFFFFF;"); } else { @@ -99,7 +99,6 @@ WorkingBanner::WorkingBanner(QWidget *parent) m_working = new QMovie(":/images/Busy.gif"); m_working->setCacheMode(QMovie::CacheAll); ui->labelWorking->setMovie(m_working); - m_working->start(); } //Set Opacity @@ -256,9 +255,29 @@ bool WorkingBanner::winEvent(MSG *message, long *result) void WorkingBanner::showEvent(QShowEvent *event) { + QDialog::showEvent(event); + if(!event->spontaneous()) + { + if(m_working) + { + m_working->start(); + } + } QTimer::singleShot(25, this, SLOT(windowShown())); } +void WorkingBanner::hideEvent(QHideEvent *event) +{ + QDialog::hideEvent(event); + if(!event->spontaneous()) + { + if(m_working) + { + m_working->stop(); + } + } +} + //////////////////////////////////////////////////////////// // SLOTS //////////////////////////////////////////////////////////// diff --git a/src/Dialog_WorkingBanner.h b/src/Dialog_WorkingBanner.h index 99ff8f6f..ca26e917 100644 --- a/src/Dialog_WorkingBanner.h +++ b/src/Dialog_WorkingBanner.h @@ -69,6 +69,7 @@ protected: virtual void closeEvent(QCloseEvent *event); virtual bool winEvent(MSG *message, long *result); virtual void showEvent(QShowEvent *event); + virtual void hideEvent(QHideEvent *event); QFontMetrics *m_metrics; QStyle *m_style; diff --git a/src/Global.h b/src/Global.h index efa16dcd..c60a6b3c 100644 --- a/src/Global.h +++ b/src/Global.h @@ -197,8 +197,9 @@ bool lamexp_open_media_file(const QString &mediaFilePath); QString lamexp_path_to_short(const QString &longPath); __int64 lamexp_perfcounter_frequ(void); __int64 lamexp_perfcounter_value(void); -bool lamexp_play_sound(const unsigned short uiSoundIdx, const bool bAsync, const wchar_t *alias = NULL); +bool lamexp_play_sound(const QString &name, const bool bAsync); bool lamexp_play_sound_file(const QString &library, const unsigned short uiSoundIdx, const bool bAsync); +bool lamexp_play_sound_alias(const QString &alias, const bool bAsync); bool lamexp_portable_mode(void); unsigned long lamexp_process_id(const QProcess *proc); QStringList lamexp_query_translations(void); diff --git a/src/Global_Win32.cpp b/src/Global_Win32.cpp index c187001f..4dd52061 100644 --- a/src/Global_Win32.cpp +++ b/src/Global_Win32.cpp @@ -61,6 +61,7 @@ #include #include #include +#include //LameXP includes #define LAMEXP_INC_CONFIG @@ -190,6 +191,14 @@ static struct } g_lamexp_dwmapi; +//Sound file cache +static struct +{ + QHash *sound_db; + QReadWriteLock lock; +} +g_lamexp_sounds; + //Image formats static const char *g_lamexp_imageformats[] = {"bmp", "png", "jpg", "gif", "ico", "xpm", NULL}; //"svg" @@ -1537,44 +1546,84 @@ bool lamexp_beep(int beepType) /* * Play a sound (from resources) */ -bool lamexp_play_sound(const unsigned short uiSoundIdx, const bool bAsync, const wchar_t *alias) +bool lamexp_play_sound(const QString &name, const bool bAsync) { - if(alias) + const unsigned char *data = NULL; + + //Try to look-up the sound in the cache first + if(!name.isEmpty()) { - return PlaySound(alias, GetModuleHandle(NULL), (SND_ALIAS | (bAsync ? SND_ASYNC : SND_SYNC))) == TRUE; + QReadLocker readLock(&g_lamexp_sounds.lock); + if(g_lamexp_sounds.sound_db && g_lamexp_sounds.sound_db->contains(name)) + { + data = g_lamexp_sounds.sound_db->value(name); + } } - else + + //If data not found in cache, try to load from resource! + if((!data) && (!name.isEmpty())) { - return PlaySound(MAKEINTRESOURCE(uiSoundIdx), GetModuleHandle(NULL), (SND_RESOURCE | (bAsync ? SND_ASYNC : SND_SYNC))) == TRUE; + QResource resource(QString(":/sounds/%1.wav").arg(name)); + if(resource.isValid() && (data = resource.data())) + { + QWriteLocker writeLock(&g_lamexp_sounds.lock); + if(!g_lamexp_sounds.sound_db) + { + g_lamexp_sounds.sound_db = new QHash(); + } + g_lamexp_sounds.sound_db->insert(name, data); + } + else + { + qWarning("Sound effect \"%s\" not found!", QUTF8(name)); + } } + + //Play the sound, if availbale + if(data) + { + return PlaySound(LPCWSTR(data), NULL, (SND_MEMORY | (bAsync ? SND_ASYNC : SND_SYNC))) != FALSE; + } + + return false; } /* - * Play a sound (from resources) + * Play a sound (system alias) + */ +bool lamexp_play_sound_alias(const QString &alias, const bool bAsync) +{ + return PlaySound(QWCHAR(alias), GetModuleHandle(NULL), (SND_ALIAS | (bAsync ? SND_ASYNC : SND_SYNC))) != FALSE; +} + +/* + * Play a sound (from external DLL) */ bool lamexp_play_sound_file(const QString &library, const unsigned short uiSoundIdx, const bool bAsync) { bool result = false; - HMODULE module = NULL; QFileInfo libraryFile(library); if(!libraryFile.isAbsolute()) { - unsigned int buffSize = GetSystemDirectoryW(NULL, NULL) + 1; - wchar_t *buffer = (wchar_t*) _malloca(buffSize * sizeof(wchar_t)); - unsigned int result = GetSystemDirectory(buffer, buffSize); - if(result > 0 && result < buffSize) + const QString &systemDir = lamexp_known_folder(lamexp_folder_systemfolder); + if(!systemDir.isEmpty()) { - libraryFile.setFile(QString("%1/%2").arg(QDir::fromNativeSeparators(QString::fromUtf16(reinterpret_cast(buffer))), library)); + libraryFile.setFile(QDir(systemDir), libraryFile.fileName()); } - _freea(buffer); } - module = LoadLibraryW(QWCHAR(QDir::toNativeSeparators(libraryFile.absoluteFilePath()))); - if(module) + if(libraryFile.exists() && libraryFile.isFile()) { - result = (PlaySound(MAKEINTRESOURCE(uiSoundIdx), module, (SND_RESOURCE | (bAsync ? SND_ASYNC : SND_SYNC))) == TRUE); - FreeLibrary(module); + if(HMODULE module = LoadLibraryW(QWCHAR(QDir::toNativeSeparators(libraryFile.canonicalFilePath())))) + { + result = (PlaySound(MAKEINTRESOURCE(uiSoundIdx), module, (SND_RESOURCE | (bAsync ? SND_ASYNC : SND_SYNC))) != FALSE); + FreeLibrary(module); + } + } + else + { + qWarning("PlaySound: File \"%s\" could not be found!", QUTF8(libraryFile.absoluteFilePath())); } return result; @@ -2202,6 +2251,7 @@ extern "C" void _lamexp_global_init_win32(void) LAMEXP_ZERO_MEMORY(g_lamexp_wine); LAMEXP_ZERO_MEMORY(g_lamexp_themes_enabled); LAMEXP_ZERO_MEMORY(g_lamexp_dwmapi); + LAMEXP_ZERO_MEMORY(g_lamexp_sounds); } /////////////////////////////////////////////////////////////////////////////// @@ -2245,6 +2295,9 @@ extern "C" void _lamexp_global_free_win32(void) g_lamexp_log_file = NULL; } + //Clear sound cache + LAMEXP_DELETE(g_lamexp_sounds.sound_db); + //Free CLI Arguments LAMEXP_DELETE(g_lamexp_argv.list); } diff --git a/src/Resource.h b/src/Resource.h index 4cd4aa39..7955a6f1 100644 --- a/src/Resource.h +++ b/src/Resource.h @@ -25,19 +25,6 @@ */ #define IDI_ICON1 106 #define IDI_ICON2 107 -#define IDR_WAVE_ABOUT 666 -#define IDR_WAVE_SUCCESS 667 -#define IDR_WAVE_ERROR 668 -#define IDR_WAVE_ABORTED 669 -#define IDR_WAVE_WHAMMY 670 -#define IDR_WAVE_WOOHOO 671 -#define IDR_WAVE_SHUTDOWN 672 -#define IDR_WAVE_BEEP 673 -#define IDR_WAVE_BEEP_LONG 674 -#define IDR_WAVE_WAITING 675 -#define IDR_WAVE_BLAST 676 -#define IDR_WAVE_TICK 677 -#define IDR_WAVE_DROP 678 /* * Next default values for new objects