diff --git a/doc/Changelog.html b/doc/Changelog.html
index b6896c33..00db31d2 100644
--- a/doc/Changelog.html
+++ b/doc/Changelog.html
@@ -19,11 +19,13 @@ a:visited { color: #0000EE; }
Changes between v4.07 and v4.08 [unreleased]:
- Upgraded build environment to Microsoft Visual Studio 2012 with Update-3
+
- Encoder settings (RC mode + bitrate/quality) are now stored separately for each encoder
- Updated Qt runtime libraries to v4.8.5 RC-1 (2013-05-31), compiled with MSVC 11.0
- Updated FLAC encoder/decoder to v1.3.0 (2013-05-27), compiled with ICL 13.0
- Updated Opus encoder/decoder libraries to v1.1.x and Opus-Tools to v0.1.6 (2013-06-17)
- Fixed a potential deadlock during startup when %TMP% points to an invalid folder
- Fixed a superfluous "beep" sound that appeared on application startup
+
- Fixed Ogg Vorbis quality modes "-1" and "-2" (they were clipped to "0" before)
Changes between v4.06 and v4.07 [2013-04-28]:
diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts
index ea9732f9..7b79f1fc 100644
--- a/etc/Translation/Blank.ts
+++ b/etc/Translation/Blank.ts
@@ -872,7 +872,7 @@
-
+
@@ -1614,9 +1614,9 @@
-
-
-
+
+
+
@@ -1657,13 +1657,13 @@
-
+
-
+
@@ -1748,868 +1748,864 @@
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
-
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -3090,209 +3086,209 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
@@ -3315,23 +3311,23 @@
QApplication
-
+
-
+
-
+
-
-
+
+
diff --git a/etc/Translation/LameXP_EN.ts b/etc/Translation/LameXP_EN.ts
index 5b430c45..e24f0495 100644
--- a/etc/Translation/LameXP_EN.ts
+++ b/etc/Translation/LameXP_EN.ts
@@ -31,7 +31,7 @@
MainWindow
-
+
%n file have been rejected, because read access was not granted!
@@ -39,7 +39,7 @@
-
+
%n file have been rejected, because they are dummy CDDA files!
@@ -47,7 +47,7 @@
-
+
%n file have been rejected, because they appear to be Cue Sheet images!
@@ -55,7 +55,7 @@
-
+
%n file have been rejected, because the file format could not be recognized!
@@ -63,7 +63,7 @@
-
+
%n Instance
@@ -74,7 +74,7 @@
ProcessingDialog
-
+
Encoding: %n file of %1 completed so far, please wait...
@@ -82,7 +82,7 @@
-
+
Process was aborted by the user after %n file!
@@ -90,7 +90,7 @@
-
+
Error: %1 of %n file failed (%2). Double-click failed items for detailed information!
@@ -98,7 +98,7 @@
-
+
%n file skipped
@@ -106,7 +106,7 @@
-
+
Error: %1 of %n file failed. Double-click failed items for detailed information!
@@ -114,7 +114,7 @@
-
+
All files completed successfully. Skipped %n file.
@@ -122,7 +122,7 @@
-
+
%n hour
@@ -130,8 +130,8 @@
-
-
+
+
%n minute
@@ -139,8 +139,8 @@
-
-
+
+
%n second
@@ -148,7 +148,7 @@
-
+
%n millisecond
diff --git a/etc/Translation/LameXP_PL.ts b/etc/Translation/LameXP_PL.ts
index f981e42a..0f6a6cce 100644
--- a/etc/Translation/LameXP_PL.ts
+++ b/etc/Translation/LameXP_PL.ts
@@ -878,7 +878,7 @@
-
+
Pokaż szczegóły
@@ -1621,9 +1621,9 @@
-
-
-
+
+
+
Sprawdź aktualizacje
@@ -1664,13 +1664,13 @@
-
+
Wyłącz przypominanie o aktualizacji
-
+
Wyłącz efekty dźwiękowe
@@ -1755,314 +1755,314 @@
Otwartoźródłowe projekty MuldeR'a
-
+
Dodawanie plików, prosze czekać...
-
-
+
+
Dostęp zablokowany
-
+
To przeważnie oznacza, że plik jest zablokowany przez inny proces.
-
+
Pliki CDDA
-
+
LameXP nie może teraz wyekstrachować ścieżki z płyty Audio-CD.
-
+
Zaleca się użycie w tym celu %1.
-
+
Cue Sheet
-
+
Prosze użyć przewodnika Cue Sheet w LameXP w celu importowania tych plików.
-
+
Pliki odrzucone
-
+
To przeważnie oznacza że plik jest uszkodzony lub format pliku nie jest wspierany.
-
+
Skanowanie folderu/ów, prosze czekać...
-
+
Tutaj możesz upuścić pliki dźwiękowe!
-
+
Otwórz plik w zewnętrznym programie
-
+
Otwórz lokalizację pliku
-
+
Otwórz wybrany folder
-
+
Zapamiętaj wybrany folder
-
+
Licencja odrzucona
-
+
Odrzuciłeś licencję. W takim razie program zostanie teraz zamknięty!
-
+
Naraska!
-
+
LameXP - Termin wygasł
-
+
Ta wersja próbna LameXP wygasła %1.
-
+
LameXP jest darmowym oprogramowaniem i pełna wersja nie wygasa.
-
-
+
+
Wyjdź z programu
-
+
Najwyraźniej twoje oprogramowanie antywirusowe spowalnia uruchamianie się LameXP.
-
+
Prosze sprawdzić dokument %1 w celu dalszych szcegółów i rozwiązań!
-
+
Powolny start
-
-
-
-
-
+
+
+
+
+
Zamknij
-
-
+
+
Nie pokazuj ponownie
-
+
Ważna aktualizacja
-
+
Twoja wersja LameXP jest starsza niż rok! Czas na aktualizację!
-
-
-
+
+
+
Powiadomienie aktualizacji
-
+
Ostatnie sprawdzenie aktualizacji było ponad 14 dni temu. Sprawdzić teraz aktualizacje?
-
+
Nie sprawdzałeś jeszcze aktualizacji LameXP. Sprawdzić teraz aktualizacje?
-
+
Przełóż
-
+
LameXP wykrył że Twoja wersja kodera Nero AAC jest nieaktualna!
-
+
Wersją dostępną obecnie jest %1, Twoja wersja to %2.
-
+
b/d
-
+
Możesz pobrać najnowszą wersję kodera Nero AAC ze strony Nero:
-
+
Koder AAC jest nieaktualny
-
+
Nie można odnaleźć kodera Nero AAC. Kompresja formatu AAC zostanie wyłączona.
-
+
Prosze skopiować 'neroAacEnc.exe', 'neroAacDec.exe', oraz 'neroAacTag.exe' do folderu LameXP!
-
+
Folder aplikacji LameXP znajduje się tutaj:
-
+
Możesz pobrać koder Nero AAC za darmo z oficjalnej strony Nero:
-
+
Wsparcie dla AAC wyłączone
-
-
-
+
+
+
LameXP
-
+
Powinienieś dodać przynajmniej jeden plik do listy aby zacząć działać!
-
+
Nie znaleziono
-
+
Wybrany przez Ciebie folder tymczasowy TEMP już nie istnieje:
-
+
Przywróć domyślne
-
+
Anuluj
-
+
Ostrzeżenie o małej ilości miejsca na dysku
-
+
Jest mniej niż %1 GB dostępnego miejsca w systemowym folderze TEMP.
-
+
WERSJA PRÓBNA
-
+
(Podpowiedź: Zignoruj nazwę pobranego pliku ZIP, w zamian sprawdż załączony w archiwum plik "changelog.txt"!)
-
+
Jest wysoce zalecane zwolnić miejsce na dysku zanim zaczniesz kompresję!
-
+
Twój folder TEMP znajduję się:
-
+
Przerwij proces kompresji
-
+
Wykonaj oczyszczanie dysku
-
-
+
+
Ignoruj
-
+
%n plik został odrzucony, ponieważ nie dano praw odczytu!
@@ -2071,7 +2071,7 @@
-
+
%n plik został odrzucony, ponieważ jest to plik CDDA!
@@ -2080,7 +2080,7 @@
-
+
%n plik został odrzucony, ponieważ jest to plik Cue!
@@ -2089,7 +2089,7 @@
-
+
%n plik został odrzucony, ponieważ jego format nie został rozpoznany!
@@ -2098,496 +2098,492 @@
-
+
Ładowanie zestawu folderów, prosze czekać...
-
+
Odśwież foldery
-
+
Idź do głównego folderu
-
+
Eksportuj Tagi do pliku CVS
-
+
Importuj Tagi do pliku CVS
-
+
Pomijanie sprawdzania aktualizacji, prosze czekać...
-
+
Mało miejsca na dysku
-
+
Chcesz zacząć działać z małą ilością miejsca na dysku. Mogą wystąpić problemy!
-
+
Został wybrany koder, który nie jest wspierany!
-
+
Nie można zapisać do wybranej lokalizacji.
-
+
Prosze wybrać inną lokalizację!
-
+
Zaladuj plik językowy
-
+
Pliki językowe
-
+
Czy na pewno chcesz wyłączyć przypominanie o aktualizacjach?
-
-
-
-
-
-
-
+
+
+
+
+
+
+
Tak
-
-
-
-
-
-
-
+
+
+
+
+
+
+
Nie
-
+
Przypominanie o aktualizacjach wyłączone.
-
+
Prosze pamiętać o okresowym sprawdzaniu aktualizacji!
-
+
Przypominanie o aktualizacjach ponownie włączone.
-
+
Czy na pewno chcesz wyłączyć wszystkie dźwiękowe?
-
-
+
+
Efekty dźwiękowe
-
+
Wszystkie efekty dźwiękowe zostały wyłączone.
-
+
Efekty dźwiękowe zostały ponownie włączone.
-
-
-
+
+
+
Powiadomienia Nero AAC
-
+
Czy na pewno chcesz wyłączyć wszystkie powiadomienia Nero AAC?
-
+
Wszystkie powiadomienia kodera Nero AAC zostały wyłączone.
-
+
Powiadomienia Nero AAC zostały ponownie włączone.
-
-
-
+
+
+
Powiadomienia o powolnym starcie
-
+
Czy na pewno chcesz wyłączyć powiadomienia o powolnym starcie?
-
+
Powiadomienia o powolnym starcie zostały wyłączone.
-
+
Powiadomienia o powolnym starcie zostały ponownie włączone.
-
-
+
+
Otwórz plik Cue Sheet
-
-
+
+
Plik Cue Sheet
-
-
-
+
+
+
Aktualizacje Beta
-
+
Czy na pewno chcesz aby LameXP sprawdzał aktualizacje Beta?
-
+
Od teraz LameXP będzie sprawdzał aktualizacje Beta.
-
+
Sprawdź teraz
-
+
LameXP od teraz <i>nie będzie</i> sprawdzał aktualizacji Beta.
-
-
-
+
+
+
Hibernuj komputer
-
+
Czy na pewno chcesz aby komputer był hibernowany zamiast zamykany?
-
+
Od teraz LameXP będzie hibernował komputer zamiast zamykać.
-
+
LameXP od teraz <i>nie</i> będzie hibernował komputera tylko zamykał.
-
-
-
+
+
+
Integracja z systemem
-
+
Czy na pewno chcesz wyłączyć integrację LameXP z systemem?
-
+
Integracja LameXP z systemem zostałą wyłączona.
-
+
Integracja LameXP z systemem została ponownie włączona.
-
-
+
+
Dodaj plik(i)
-
-
+
+
Dodaj folder
-
-
+
+
Zapisz plik CSV
-
-
-
-
+
+
+
+
Plik CSV
-
-
-
-
+
+
+
+
Eksportowanie CSV
-
+
Nie ma żadnych tagów, które można eksportować!
-
+
Nie można otworzyć pliku CSV aby go zapisać!
-
+
Nie można zapisać do pliku CSV!
-
+
Pliki CSV utworzone pomyślnie!
-
-
+
+
Otwórz plik CSV
-
+
Nie można otworzyć pliku CSV aby go wczytać!
-
-
-
-
-
+
+
+
+
+
Importowanie CSV
-
+
Próba odczytania pliku CSV zakończona niepowodzeniem!
-
+
Plik CSV nie zawiera żadnych znanych pól!
-
+
Plik CSV nie jest kompletny. Nie wszystkie pliki zostały zaktualizowane!
-
+
Pliki CSV zaimportowano pomyślnie!
-
-
+
+
Nowy folder
-
+
Wprowadź nazwę nowego folderu:
-
+
Utworzenie folderu zakończone niepowodzeniem
-
+
Nowy folder nie mógł zostać stworzony:
-
+
Dysk tylko do odczytu lub brak praw dostępu!
-
+
QAAC (Apple)
-
+
FHG AAC (Winamp)
-
+
Nero AAC
-
+
Niedostępny!
-
+
Obecny koder AAC: %1
-
-
-
-
-
-
+
+
+
+
+
+
Poziom jakości %1
-
-
-
+
Kompresja %1
-
-
-
+
Nieskompresowany
-
+
-
+
-
+
Wysoka jakość (Zalecane)
-
+
Najniższa jakość (Bardzo szybko)
-
+
Nazwa pliku bez rozszerzenia
-
+
Numer ścieżki z zerem na początku
-
+
Nazwa ścieżki
-
+
Nazwa Artysty
-
+
Nazwa Albumu
-
+
Rok z (przynajmniej) czterema cyframi
-
+
Komentarz
-
+
Zabronione znaki w nazwach plików:
-
+
Zmień nazwy makr
-
+
%n wątek
@@ -2596,37 +2592,37 @@
-
+
Nie można zapisać do wybranej lokalizacji. Prosze wybierz inną lokalizację!
-
+
Tryb nadpisywania
-
+
Ostrzeżenie: W tym trybie istniejące pliki będą nadpisywane bez możliwości ich odzyskania!
-
+
Kontynuuj
-
+
Cofnij
-
+
Już działa
-
+
LameXP już działa, przejdź do działającego procesu!
@@ -3107,72 +3103,72 @@
Powrót
-
+
Pokaż szczegóły wybranego zadania
-
+
Wybierz lokalizację dla plików wyjściowych
-
+
Filtruj długie pozycje
-
+
Pokaż tylko trwające
-
+
Pokaż tylko zakończone pomyślnie
-
+
Pokaż tylko zakończone niepowodzeniem
-
+
Pokaż tylko pominięte
-
+
Pokaż wszystkie pozycje
-
+
Kompresowanie plików
-
+
Twoje pliki są właśnie kompresowane, prosze być cierpliwy...
-
+
Kompresowanie plików, prosze czekać...
-
+
Wielowątkowosć włączona: Równolegle wykonywanych jest %1 kodowań!
-
+
Przerwano! Czekanie na wyłączenie procesu...
-
+
Kompresowanie: %n plik z %1 został do tej pory zakończony, prosze czekać...
@@ -3181,17 +3177,17 @@
-
+
Tworzenie pliku playlisty, prosze czekać...
-
+
Proces został przedwcześnie zakończony przez użytkownika!
-
+
Proces został zakończony przez użytkownika po zakończeniu %n pliku!
@@ -3200,22 +3196,22 @@
-
+
LameXP - Przerwano
-
+
Proces został przerwany przez użytkownika.
-
+
Proces został zakończony po %1.
-
+
Błąd: %1 z %n pliku zakończono niepowodzeniem (%2). Kliknij dwukrotnie aby uzyskać więcej informacji!
@@ -3224,7 +3220,7 @@
-
+
pominięto %n plik
@@ -3233,7 +3229,7 @@
-
+
Błąd: %1 z %n pliku zakończono niepowodzeniem. Kliknij dwukrotnie aby uzyskać więcej informacji!
@@ -3242,7 +3238,7 @@
-
+
Wszystkie zadania wykonano pomyślnie. Pominięto %n plik.
@@ -3251,54 +3247,54 @@
-
+
LameXP - Błąd
-
+
Przynajmniej jeden plik nie został skompresowany!
-
+
Kompresja wszystkich plików zakończona powodzeniem.
-
+
LameXP - Zrobione
-
+
Żadna z pozycji nie spełnia reguł filtra
-
+
Tworzenie playlisty zakończone niepowodzeniem
-
+
Playlista nie mogła zostać utworzona:
-
+
Ostrzeżenie: Komputer zostanie zamknięty za %1 sekund/y...
-
-
+
+
Anuluj wyłączenie komputera
-
+
%n godzina
@@ -3307,8 +3303,8 @@
-
-
+
+
%n minuta
@@ -3317,8 +3313,8 @@
-
-
+
+
%n sekunda
@@ -3327,7 +3323,7 @@
-
+
%n milisekunda
@@ -3352,23 +3348,23 @@
QApplication
-
+
Plik wykonywalny '%1' nie działa w trybie kompatybilności z Windows.
-
+
Plik wykonywalny '%1' wymaga Qt v%2, znaleziono jednak Qt v%3.
-
+
Plik wykonywalny "%1" został skompilowany dla Qt "%2", znaleziono "%3".
-
-
+
+
Plik wykonywalny '%1' wymaga do uruchomienia Windows 2000 lub nowszego.
diff --git a/etc/Translation/LameXP_SV.ts b/etc/Translation/LameXP_SV.ts
index 28b10394..e4be2f4a 100644
--- a/etc/Translation/LameXP_SV.ts
+++ b/etc/Translation/LameXP_SV.ts
@@ -876,7 +876,7 @@
-
+
Visa detaljer
@@ -1618,9 +1618,9 @@
-
-
-
+
+
+
Sök efter uppdateringar
@@ -1661,13 +1661,13 @@
-
+
Inaktivera uppdateringsmeddelande
-
+
Inaktivera ljudeffekter
@@ -1752,23 +1752,23 @@
MuldeRs Öppen källkodsprojekt
-
+
Lägger till fil(er), vänta...
-
-
+
+
Åtkomst nekad
-
+
Det innebär oftast att filen är låst av någon annan process.
-
+
%n fil har avvisats, eftersom läsbehörighet saknas!
@@ -1776,22 +1776,22 @@
-
+
CDDA-filer
-
+
LameXP kan för närvarande inte extrahera ljudspår från en ljud-CD.
-
+
Vi rekommenderar att du använder %1 för det ändamålet.
-
+
%n fil har avvisats, eftersom det är en CDDA attrappfil (dummy)!
@@ -1799,17 +1799,17 @@
-
+
Cue-fil
-
+
Använd LameXPs cue-guide för att importera cue-filer.
-
+
%n fil har avvisats, eftersom det verkar vara en cue-avbildning!
@@ -1817,17 +1817,17 @@
-
+
Undantagna filer
-
+
Det innebär oftast att filen är skadad eller att filformatet inte stöds.
-
+
%n fil har avvisats, eftersom filformatet inte känns igen!
@@ -1835,752 +1835,748 @@
-
+
Genomsöker mapp(ar) efter fil(er), vänta...
-
+
DEMOVERSION
-
+
Du kan dra och släppa filer här!
-
+
Initierar mappdisposition, vänta...
-
+
Öppna fil i externt program
-
+
Öppna målmappen
-
+
Öppna markerad mapp
-
+
Uppdatera mappdisposition
-
+
Gå till överordnad mapp
-
+
Lägg till aktuell utdatamapp i favoriter
-
+
Exportera metadata till CSV-fil
-
+
Importera metadata från CSV-fil
-
+
Licensavtal avvisat
-
+
Du har nekat att godkänna licensavtalet. Programmet kommer nu att avslutas!
-
+
Hej då!
-
+
LameXP - Upphört
-
+
Denna demoversion av LameXP har upphört att gälla från %1.
-
+
LameXP är kostnadsfritt och release-versionerna upphör inte att gälla.
-
-
+
+
Avsluta programmet
-
+
Det verkar som ett antivirusprogram orsakar långsammare uppstart av LameXP.
-
+
Läs gärna %1 för detaljer och lösningar!
-
+
Långsam uppstart
-
-
-
-
-
+
+
+
+
+
Stäng
-
-
+
+
Visa inte igen
-
+
Viktig uppdatering
-
+
Din version av LameXP är mer än ett år gammal. Dags att uppdatera!
-
-
+
+
Ignorera
-
+
Hoppar över uppdateringskontrollen den här gången, vänta...
-
-
-
+
+
+
Uppdateringspåminnelse
-
+
Din senaste uppdateringskontroll var för mer än 14 dagar sedan. Vill du söka efter uppdateringar nu?
-
+
Du har inte genomfört uppdateringskontroll ännu. Vill du söka efter uppdateringar nu?
-
+
Skjut upp
-
+
LameXP har uptäckt att din version av Nero AAC-kodare är utdaterad!
-
+
Aktuell version är %1 (eller senare), men du har fortfarande version %2.
-
+
n/a
-
+
Du kan ladda ner senaste versionen av Nero AAC-kodare från Neros webbsida:
-
+
(Tips: Bortse från den nedladde zipfilens namn, och kontrollera istället den inkluderade textfilen 'changelog.txt'!)
-
+
AAC-kodare utdaterad
-
+
Neros AAC-kodare kan inte hittas. Stödet för AAC-kodning kommer att inaktiveras.
-
+
Placera 'neroAacEnc.exe', 'neroAacDec.exe' och 'neroAacTag.exe' i LameXPs programmmapp!
-
+
Din LameXP programmapp finns här:
-
+
Du kan ladda ner Nero AAC-kodare gratis från den officiella webbsidan:
-
+
AAC-stödet är inaktiverat
-
-
-
+
+
+
LameXP
-
+
Du måste lägga till minst en fil till listan innan du fortsätter!
-
+
Kan inte hittas
-
+
Din aktuella TEMP-mapp finns inte längre:
-
+
Återställ standard
-
+
Avbryt
-
+
Det finns mindre än %1 GB ledigt diskutrymme i systemets temp-mapp.
-
+
Du behöver frigöra mer diskutrymme innan du fortsätter med omkodningen!
-
+
Temp-mappens placering:
-
+
Varning för dåligt diskutrymme
-
+
Avbryt omkodningsprocessen
-
+
Rensa disken nu
-
+
Dåligt diskutrymme
-
+
Du fortsätter med dåligt diskutrymme. Problem kan uppstå!
-
+
En kodare som saknar stöd har valts!
-
+
Kan inte skriva till den valda utdatamappen.
-
+
Välj en annan målmapp!
-
+
Läs in översättning
-
+
Översättningsfiler
-
+
Vill du verkligen inaktivera uppdateringspåminnelsen?
-
-
-
-
-
-
-
+
+
+
+
+
+
+
Ja
-
-
-
-
-
-
-
+
+
+
+
+
+
+
Nej
-
+
Uppdateringspåminnelsen har inaktiverats.
-
+
Glöm inte att söka efter uppdateringar med jämna mellanrum!
-
+
Uppdateringspåminnelsen har återaktiverats.
-
+
Vill du verkligen inaktivera alla ljudeffekter?
-
-
+
+
Ljudeffekter
-
+
Alla ljudeffekter har inaktiverats.
-
+
Ljudeffekterna har återaktiverats.
-
-
-
+
+
+
Nero AAC-meddelanden
-
+
Vill du verkligen inaktivera alla Nero AAC-meddelanden?
-
+
Alla Nero AAC-meddelanden har inaktiverats.
-
+
Nero AAC-meddelanden har återaktiverats.
-
-
-
+
+
+
Meddelande om långsam uppstart
-
+
Vill du verkligen inaktivera meddelanden om långsam uppstart?
-
+
Meddelanden om långsam uppstart har inaktiverats.
-
+
Meddelanden om långsam uppstart har återaktiverats.
-
-
+
+
Öppna cue-fil
-
-
+
+
Cue-fil
-
-
-
+
+
+
Beta-uppdateringar
-
+
Vill du verkligen att LameXP skall söka efter beta-uppdateringar?
-
+
LameXP kommer i fortsättningen att söka efter beta-uppdatyeringar.
-
+
Sök nu
-
+
LameXP kommer i fortsättningen <i>inte</i> att söka efter beta-uppdateringar.
-
-
-
+
+
+
Viloläge
-
+
Vill du verkligen att datorn skall försättas i viloläge vid avslut?
-
+
LameXP kommer i fortsättningen att försätta datorn i viloläge vid avslut.
-
+
LameXP kommer i fortsättningen <i>inte</i> att försätta datorn i viloläge vid avslut.
-
-
-
+
+
+
Utforskarintegrering
-
+
Vill du verkligen inaktivera LameXPs utforskarintegration?
-
+
LameXPs utforskarintegration har inaktiverats.
-
+
LameXPs utforskarintegration har återaktiverats.
-
-
+
+
Lägg till fil(er)
-
-
+
+
Lägg till mapp
-
-
+
+
Spara CSV-fil
-
-
-
-
+
+
+
+
CSV-fil
-
-
-
-
+
+
+
+
CSV-export
-
+
Det finns ingen meta-data som kan exporteras!
-
+
Kunde inte öppna CSV-filen för skrivning!
-
+
Kunde inte skriva till CSV-filen!
-
+
CSV-filen skapades korrekt!
-
-
+
+
Öppna CSV-fil
-
-
-
-
-
+
+
+
+
+
CSV-import
-
+
Kunde inte öppna CSV-filen för läsning!
-
+
Kunde inte läsa från CSV-filen!
-
+
CSV-filen innehåller inga kända fält!
-
+
CSV-filen är inte komplett. Alla filer uppdaterades inte!
-
+
CSV-filen importerades korrekt!
-
-
+
+
Ny mapp
-
+
Namn på den nya mappen:
-
+
Kunde inte skapa någon mapp
-
+
Den nya mappen kunde inte skapas:
-
+
Diskenheten är skrivskyddad eller åtkomsträttigheter saknas!
-
+
QAAC (Apple)
-
+
FHG AAC (Winamp)
-
+
Nero AAC
-
+
Ej tillgänglig!
-
+
Aktuell AAC-kodare: %1
-
-
-
-
-
-
+
+
+
+
+
+
Kvallitetsnivå %1
-
-
-
+
Kompression %1
-
-
-
+
Okomprimerad
-
+
Bäst kvalitet (Långsam)
-
+
Acceptabel kvalitet (Snabb)
-
+
Hög kvallitet (rekommenderas)
-
+
Dålig kvallitet (mycket snabb)
-
+
Filnamn utan filtillägg
-
+
Spårnummer med inledande nolla
-
+
Spårtitel
-
+
Artistnamn
-
+
Albumnamn
-
+
Årtal med (minst) fyra siffror
-
+
Kommentar
-
+
Förbjudna tecken i filnamn:
-
+
Namnändra macron
-
+
%n instans
@@ -2588,37 +2584,37 @@
-
+
Kan inte skriva till den specificerade mappen. Välj en annan destination!
-
+
Överskrivningsläge
-
+
Varning! Det här läget kan skriva över befintliga filer, utan möjlighet att återskapa!
-
+
Fortsätt
-
+
Återställ
-
+
Körs redan
-
+
LameXP körs redan, använd den redan startade instansen!
@@ -3100,72 +3096,72 @@
Stäng
-
+
Visa detaljerad info för markerad åtgärd
-
+
Öppna utdatamnappen
-
+
Filtrera loggobjekt
-
+
Visa endast aktiva
-
+
Visa endast klara
-
+
Visa endast misslyckade
-
+
Visa endast överhoppade
-
+
Visa alla
-
+
Kodar om filer
-
+
Dina filer kodas om, vänta...
-
+
Kodar om filer, vänta...
-
+
Flertrådskörning aktiverad: Kör %1 parallella instanser!
-
+
Avbrutet! Väntar på att aktiva processer skall avslutas...
-
+
Kodar! %n fil av%1 slutförd. vänta...
@@ -3173,17 +3169,17 @@
-
+
Skapar spelningslista, vänta...
-
+
Åtgärden avbröts i förtid av användaren!
-
+
Åtgärden avbröts av användaren efter %n fil!
@@ -3191,22 +3187,22 @@
-
+
LameXP - Avbrutet
-
+
Åtgärden avbröts av användaren.
-
+
Åtgärden slutförd efter %1.
-
+
Fel! %1 av %n filer misslyckades (%2). Dubbelklicka på misslyckat objekt för info!
@@ -3214,7 +3210,7 @@
-
+
%n fil hoppades över
@@ -3222,7 +3218,7 @@
-
+
Fel! %1 av %n filer misslyckades. Dubbelklicka på misslyckat objekt för info!
@@ -3230,7 +3226,7 @@
-
+
Alla filer korrekt slutförda. %n fil hoppades över.
@@ -3238,54 +3234,54 @@
-
+
LameXP - Fel
-
+
Minst en fil har misslyckats!
-
+
Alla filer korrekt omkodade.
-
+
LameXP - Klar
-
+
Inga objekt matchar aktuell filtrering
-
+
Kunde inte skapa spelningslista
-
+
Spelningslistan kunde inte skapas:
-
+
Varning! Datorn kommer att stängas av om %1 sekunder...
-
-
+
+
Avbryt avstängning
-
+
%n timma
@@ -3293,8 +3289,8 @@
-
-
+
+
%n minut
@@ -3302,8 +3298,8 @@
-
-
+
+
%n sekund
@@ -3311,7 +3307,7 @@
-
+
%n millisekund
@@ -3335,23 +3331,23 @@
QApplication
-
+
EXE-filen '%1' stöder inte Windows kompatibilitetsläge.
-
+
EXE-filen '%1' kräver Qt v%2, du har Qt v%3.
-
+
EXE-filen '%1' är byggd för Qt '%2', du har Qt '%3'.
-
-
+
+
EXE-filen '%1' kräver Windows 2000 eller senare.
diff --git a/src/Config.h b/src/Config.h
index 44d02aef..63dc37c2 100644
--- a/src/Config.h
+++ b/src/Config.h
@@ -33,8 +33,8 @@
#define VER_LAMEXP_MINOR_HI 0
#define VER_LAMEXP_MINOR_LO 8
#define VER_LAMEXP_TYPE Alpha
-#define VER_LAMEXP_PATCH 3
-#define VER_LAMEXP_BUILD 1303
+#define VER_LAMEXP_PATCH 5
+#define VER_LAMEXP_BUILD 1310
#define VER_LAMEXP_CONFG 1288
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp
index 0e8da9b1..db9e4c49 100644
--- a/src/Dialog_MainWindow.cpp
+++ b/src/Dialog_MainWindow.cpp
@@ -150,6 +150,14 @@ while(0)
} \
while(0)
+#define WITH_BLOCKED_SIGNALS(WIDGET, CMD, ...) do \
+{ \
+ (WIDGET)->blockSignals(true); \
+ (WIDGET)->CMD(__VA_ARGS__); \
+ (WIDGET)->blockSignals(false); \
+} \
+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 USE_NATIVE_FILE_DIALOG (lamexp_themes_enabled() || ((QSysInfo::windowsVersion() & QSysInfo::WV_NT_based) < QSysInfo::WV_XP))
@@ -356,10 +364,11 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
ui->radioButtonEncoderOpus->setChecked(m_settings->compressionEncoder() == SettingsModel::OpusEncoder);
ui->radioButtonEncoderDCA->setChecked(m_settings->compressionEncoder() == SettingsModel::DCAEncoder);
ui->radioButtonEncoderPCM->setChecked(m_settings->compressionEncoder() == SettingsModel::PCMEncoder);
- ui->radioButtonModeQuality->setChecked(m_settings->compressionRCMode() == SettingsModel::VBRMode);
- ui->radioButtonModeAverageBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::ABRMode);
- ui->radioButtonConstBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::CBRMode);
- ui->sliderBitrate->setValue(m_settings->compressionBitrate());
+
+ //ui->radioButtonModeQuality->setChecked(m_settings->compressionRCMode() == SettingsModel::VBRMode);
+ //ui->radioButtonModeAverageBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::ABRMode);
+ //ui->radioButtonConstBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::CBRMode);
+ //ui->sliderBitrate->setValue(m_settings->compressionBitrate());
m_evenFilterCompressionTab = new CustomEventFilter();
ui->labelCompressionHelp->installEventFilter(m_evenFilterCompressionTab);
@@ -908,6 +917,129 @@ void MainWindow::initializeTranslation(void)
}
}
+/*
+ * Get the current RC-Mode (for selected encoder)
+ */
+int MainWindow::getCurrentRCMode(int encoder)
+{
+ int mode = -1;
+
+ switch(encoder)
+ {
+ case SettingsModel::MP3Encoder:
+ mode = m_settings->compressionRCModeLAME();
+ break;
+ case SettingsModel::VorbisEncoder:
+ mode = m_settings->compressionRCModeOggEnc();
+ break;
+ case SettingsModel::AACEncoder:
+ mode = m_settings->compressionRCModeAacEnc();
+ break;
+ case SettingsModel::AC3Encoder:
+ mode = m_settings->compressionRCModeAften();
+ break;
+ case SettingsModel::FLACEncoder:
+ mode = SettingsModel::VBRMode; /*FLAC has no RC modes*/
+ break;
+ case SettingsModel::OpusEncoder:
+ mode = m_settings->compressionRCModeOpusEnc();
+ break;
+ case SettingsModel::DCAEncoder:
+ mode = SettingsModel::CBRMode; /*DcaEnc has no RC modes*/
+ break;
+ case SettingsModel::PCMEncoder:
+ mode = SettingsModel::CBRMode; /*PCM has no RC modes*/
+ break;
+ default:
+ throw "getCurrentRCMode(): Unknown encoder specified!";
+ break;
+ }
+
+ return mode;
+}
+
+/*
+ * Get the current VBR-Level (for selected encoder)
+ */
+int MainWindow::getCurrentQuality(int encoder)
+{
+ int quality = -1;
+
+ switch(encoder)
+ {
+ case SettingsModel::MP3Encoder:
+ quality = m_settings->compressionVbrLevelLAME();
+ break;
+ case SettingsModel::VorbisEncoder:
+ quality = m_settings->compressionVbrLevelOggEnc();
+ break;
+ case SettingsModel::AACEncoder:
+ quality = m_settings->compressionVbrLevelAacEnc();
+ break;
+ case SettingsModel::AC3Encoder:
+ quality = m_settings->compressionVbrLevelAften();
+ break;
+ case SettingsModel::FLACEncoder:
+ quality = m_settings->compressionVbrLevelFLAC();
+ break;
+ case SettingsModel::OpusEncoder:
+ quality = m_settings->compressionBitrateOpusEnc();
+ break;
+ case SettingsModel::DCAEncoder:
+ quality = 0; /*DcaEnc has no quality level*/
+ break;
+ case SettingsModel::PCMEncoder:
+ quality = 1; /*PCM has no quality level*/
+ break;
+ default:
+ throw "getCurrentVbrLevel(): Unknown encoder specified!";
+ break;
+ }
+
+ return quality;
+}
+
+/*
+ * Get the current Bitrate (for selected encoder)
+ */
+int MainWindow::getCurrentBitrate(int encoder)
+{
+ int bitrate = -1;
+
+ switch(encoder)
+ {
+ case SettingsModel::MP3Encoder:
+ bitrate = m_settings->compressionBitrateLAME();
+ break;
+ case SettingsModel::VorbisEncoder:
+ bitrate = m_settings->compressionBitrateOggEnc();
+ break;
+ case SettingsModel::AACEncoder:
+ bitrate = m_settings->compressionBitrateAacEnc();
+ break;
+ case SettingsModel::AC3Encoder:
+ bitrate = m_settings->compressionBitrateAften();
+ break;
+ case SettingsModel::FLACEncoder:
+ bitrate = 0; /*FLAC has no bitrate*/
+ break;
+ case SettingsModel::OpusEncoder:
+ bitrate = m_settings->compressionBitrateOpusEnc();
+ break;
+ case SettingsModel::DCAEncoder:
+ bitrate = m_settings->compressionBitrateDcaEnc();
+ break;
+ case SettingsModel::PCMEncoder:
+ bitrate = 1; /*PCM has no bitrate*/
+ break;
+ default:
+ throw "getCurrentBitrate(): Unknown encoder specified!";
+ break;
+ }
+
+ return bitrate;
+}
+
////////////////////////////////////////////////////////////
// EVENTS
////////////////////////////////////////////////////////////
@@ -3035,6 +3167,7 @@ void MainWindow::initOutputFolderModel(void)
ui->outputFolderView->header()->hideSection(3);
m_fileSystemModel->setRootPath("");
+ qWarning("Initializing QFileSystemModel to:\n%s\n", m_settings->outputDir().toUtf8().constData());
QModelIndex index = m_fileSystemModel->index(m_settings->outputDir());
if(index.isValid()) ui->outputFolderView->setCurrentIndex(index);
outputFolderViewClicked(ui->outputFolderView->currentIndex());
@@ -3283,58 +3416,46 @@ void MainWindow::updateEncoder(int id)
{
m_settings->compressionEncoder(id);
+ bool bSupportsVBR = false;
+ bool bSupportsABR = false;;
+ bool bSupportsCBR = false;
+ bool bSliderEnabled = false;
+
+ //Set encoder-specific features
switch(m_settings->compressionEncoder())
{
+ case SettingsModel::MP3Encoder:
+ case SettingsModel::AACEncoder:
+ case SettingsModel::OpusEncoder:
+ bSupportsVBR = bSupportsABR = bSupportsCBR = bSliderEnabled = true;
+ break;
case SettingsModel::VorbisEncoder:
- ui->radioButtonModeQuality->setEnabled(true);
- ui->radioButtonModeAverageBitrate->setEnabled(true);
- ui->radioButtonConstBitrate->setEnabled(false);
- if(ui->radioButtonConstBitrate->isChecked()) ui->radioButtonModeQuality->setChecked(true);
- ui->sliderBitrate->setEnabled(true);
+ bSupportsVBR = bSupportsABR = bSliderEnabled = true;
break;
case SettingsModel::AC3Encoder:
- ui->radioButtonModeQuality->setEnabled(true);
- ui->radioButtonModeQuality->setChecked(true);
- ui->radioButtonModeAverageBitrate->setEnabled(false);
- ui->radioButtonConstBitrate->setEnabled(true);
- ui->sliderBitrate->setEnabled(true);
+ bSupportsVBR = bSupportsCBR = bSliderEnabled = true;
break;
case SettingsModel::FLACEncoder:
- ui->radioButtonModeQuality->setEnabled(false);
- ui->radioButtonModeQuality->setChecked(true);
- ui->radioButtonModeAverageBitrate->setEnabled(false);
- ui->radioButtonConstBitrate->setEnabled(false);
- ui->sliderBitrate->setEnabled(true);
- break;
- case SettingsModel::PCMEncoder:
- ui->radioButtonModeQuality->setEnabled(false);
- ui->radioButtonModeQuality->setChecked(true);
- ui->radioButtonModeAverageBitrate->setEnabled(false);
- ui->radioButtonConstBitrate->setEnabled(false);
- ui->sliderBitrate->setEnabled(false);
- break;
- case SettingsModel::AACEncoder:
- ui->radioButtonModeQuality->setEnabled(true);
- ui->radioButtonModeAverageBitrate->setEnabled(!m_fhgEncoderAvailable);
- if(m_fhgEncoderAvailable && ui->radioButtonModeAverageBitrate->isChecked()) ui->radioButtonConstBitrate->setChecked(true);
- ui->radioButtonConstBitrate->setEnabled(true);
- ui->sliderBitrate->setEnabled(true);
+ bSupportsVBR = bSliderEnabled = true;
break;
case SettingsModel::DCAEncoder:
- ui->radioButtonModeQuality->setEnabled(false);
- ui->radioButtonModeAverageBitrate->setEnabled(false);
- ui->radioButtonConstBitrate->setEnabled(true);
- ui->radioButtonConstBitrate->setChecked(true);
- ui->sliderBitrate->setEnabled(true);
+ bSupportsCBR = bSliderEnabled = true;
+ break;
+ case SettingsModel::PCMEncoder:
+ bSupportsCBR = true;
break;
default:
- ui->radioButtonModeQuality->setEnabled(true);
- ui->radioButtonModeAverageBitrate->setEnabled(true);
- ui->radioButtonConstBitrate->setEnabled(true);
- ui->sliderBitrate->setEnabled(true);
+ throw "updateEncoder(): Unknown encoder encountered!";
break;
}
+ //Update UI controls
+ ui->radioButtonModeQuality->setEnabled(bSupportsVBR);
+ ui->radioButtonModeAverageBitrate->setEnabled(bSupportsABR);
+ ui->radioButtonConstBitrate->setEnabled(bSupportsCBR);
+ ui->sliderBitrate->setEnabled(bSliderEnabled);
+
+ //Add AAC info
if(m_settings->compressionEncoder() == SettingsModel::AACEncoder)
{
const QString encoderName = m_qaacEncoderAvailable ? tr("QAAC (Apple)") : (m_fhgEncoderAvailable ? tr("FHG AAC (Winamp)") : (m_neroEncoderAvailable ? tr("Nero AAC") : tr("Not available!")));
@@ -3346,7 +3467,25 @@ void MainWindow::updateEncoder(int id)
ui->labelEncoderInfo->setVisible(false);
}
- updateRCMode(m_modeButtonGroup->checkedId());
+ //Set current RC mode
+ const int currentRCMode = getCurrentRCMode(id);
+ switch(currentRCMode)
+ {
+ case SettingsModel::VBRMode:
+ ui->radioButtonModeQuality->setChecked(true);
+ break;
+ case SettingsModel::ABRMode:
+ ui->radioButtonModeAverageBitrate->setChecked(true);
+ break;
+ case SettingsModel::CBRMode:
+ ui->radioButtonConstBitrate->setChecked(true);
+ break;
+ default:
+ throw "updateEncoder(): Unknown rc-mode encountered!";
+ }
+
+ //Update RC mode!
+ updateRCMode(currentRCMode);
}
/*
@@ -3354,99 +3493,192 @@ void MainWindow::updateEncoder(int id)
*/
void MainWindow::updateRCMode(int id)
{
- m_settings->compressionRCMode(id);
+ int sliderMin = INT_MIN;
+ int sliderMax = INT_MAX;
- switch(m_settings->compressionEncoder())
+ //Update encoder-specific settings
+ const int currentEncoder = m_settings->compressionEncoder();
+ switch(currentEncoder)
{
+ /* -------- MP3Encoder -------- */
case SettingsModel::MP3Encoder:
- switch(m_settings->compressionRCMode())
+ switch(id)
{
case SettingsModel::VBRMode:
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(9);
+ sliderMin = 0;
+ sliderMax = 9;
+ break;
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderMin = 0;
+ sliderMax = 13;
break;
default:
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(13);
+ throw "updateRCMode(): Unknown rc-mode specified!";
break;
}
+ m_settings->compressionRCModeLAME(id);
break;
+ /* -------- VorbisEncoder -------- */
case SettingsModel::VorbisEncoder:
- switch(m_settings->compressionRCMode())
+ switch(id)
{
case SettingsModel::VBRMode:
- ui->sliderBitrate->setMinimum(-2);
- ui->sliderBitrate->setMaximum(10);
+ sliderMin = -2;
+ sliderMax = 10;
+ break;
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderMin = 4;
+ sliderMax = 63;
break;
default:
- ui->sliderBitrate->setMinimum(4);
- ui->sliderBitrate->setMaximum(63);
- break;
- }
- break;
- case SettingsModel::AC3Encoder:
- switch(m_settings->compressionRCMode())
- {
- case SettingsModel::VBRMode:
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(16);
- break;
- default:
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(18);
+ throw "updateRCMode(): Unknown rc-mode specified!";
break;
}
+ m_settings->compressionRCModeOggEnc(id);
break;
+ /* -------- AACEncoder -------- */
case SettingsModel::AACEncoder:
- switch(m_settings->compressionRCMode())
+ switch(id)
{
case SettingsModel::VBRMode:
if(m_qaacEncoderAvailable)
{
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(32);
+ sliderMin = 0;
+ sliderMax = 32;
}
else if(m_fhgEncoderAvailable)
{
- ui->sliderBitrate->setMinimum(1);
- ui->sliderBitrate->setMaximum(6);
+ sliderMin = 1;
+ sliderMax = 6;
}
else
{
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(20);
+ sliderMin = 0;
+ sliderMax = 20;
}
break;
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderMin = 4;
+ sliderMax = 63;
+ break;
default:
- ui->sliderBitrate->setMinimum(4);
- ui->sliderBitrate->setMaximum(63);
+ throw "updateRCMode(): Unknown rc-mode specified!";
+ break;
+ }
+ m_settings->compressionRCModeAacEnc(id);
+ break;
+ /* -------- AC3Encoder -------- */
+ case SettingsModel::AC3Encoder:
+ switch(id)
+ {
+ case SettingsModel::VBRMode:
+ sliderMin = 0;
+ sliderMax = 16;
+ break;
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderMin = 0;
+ sliderMax = 18;
+ break;
+ default:
+ throw "updateRCMode(): Unknown rc-mode specified!";
+ break;
+ }
+ m_settings->compressionRCModeAften(id);
+ break;
+ /* -------- FLACEncoder -------- */
+ case SettingsModel::FLACEncoder:
+ switch(id)
+ {
+ case SettingsModel::VBRMode:
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderMin = 0;
+ sliderMax = 8;
+ break;
+ default:
+ throw "updateRCMode(): Unknown rc-mode specified!";
break;
}
break;
- case SettingsModel::FLACEncoder:
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(8);
- break;
+ /* -------- OpusEncoder -------- */
case SettingsModel::OpusEncoder:
- ui->sliderBitrate->setMinimum(1);
- ui->sliderBitrate->setMaximum(32);
+ switch(id)
+ {
+ case SettingsModel::VBRMode:
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderMin = 1;
+ sliderMax = 32;
+ break;
+ default:
+ throw "updateRCMode(): Unknown rc-mode specified!";
+ break;
+ }
+ m_settings->compressionRCModeOpusEnc(id);
break;
+ /* -------- DCAEncoder -------- */
case SettingsModel::DCAEncoder:
- ui->sliderBitrate->setMinimum(1);
- ui->sliderBitrate->setMaximum(128);
+ switch(id)
+ {
+ case SettingsModel::VBRMode:
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderMin = 1;
+ sliderMax = 128;
+ break;
+ default:
+ throw "updateRCMode(): Unknown rc-mode specified!";
+ break;
+ }
break;
+ /* -------- PCMEncoder -------- */
case SettingsModel::PCMEncoder:
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(2);
- ui->sliderBitrate->setValue(1);
+ switch(id)
+ {
+ case SettingsModel::VBRMode:
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderMin = 0;
+ sliderMax = 2;
+ break;
+ default:
+ throw "updateRCMode(): Unknown rc-mode specified!";
+ break;
+ }
break;
+ /* -------- default -------- */
default:
- ui->sliderBitrate->setMinimum(0);
- ui->sliderBitrate->setMaximum(0);
+ throw "updateRCMode(): Unknown encoder specified!";
break;
}
- updateBitrate(ui->sliderBitrate->value());
+ //Update slider min/max values
+ WITH_BLOCKED_SIGNALS(ui->sliderBitrate, setMinimum, sliderMin);
+ WITH_BLOCKED_SIGNALS(ui->sliderBitrate, setMaximum, sliderMax);
+
+ //Update slider position
+ int currentPosition = INT_MAX;
+ switch(id)
+ {
+ case SettingsModel::VBRMode:
+ currentPosition = getCurrentQuality(currentEncoder);
+ break;
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ currentPosition = getCurrentBitrate(currentEncoder);
+ break;
+ default:
+ throw "updateRCMode(): Unknown rc-mode specified!";
+ break;
+ }
+
+ //Update bitrate/quality value!
+ ui->sliderBitrate->setValue(currentPosition);
+ updateBitrate(currentPosition);
}
/*
@@ -3454,94 +3686,186 @@ void MainWindow::updateRCMode(int id)
*/
void MainWindow::updateBitrate(int value)
{
- m_settings->compressionBitrate(value);
-
- switch(m_settings->compressionRCMode())
+ //Update encoder-specific settings
+ const int currentEncoder = m_settings->compressionEncoder();
+ const int currentRCMode = getCurrentRCMode(currentEncoder);
+
+ QString sliderText;
+
+ switch(currentEncoder)
{
- case SettingsModel::VBRMode:
- switch(m_settings->compressionEncoder())
+ /* -------- MP3Encoder -------- */
+ case SettingsModel::MP3Encoder:
+ switch(currentRCMode)
{
- case SettingsModel::MP3Encoder:
- ui->labelBitrate->setText(tr("Quality Level %1").arg(9 - value));
+ case SettingsModel::VBRMode:
+ sliderText = tr("Quality Level %1").arg(9 - value);
+ m_settings->compressionVbrLevelLAME(value);
break;
- case SettingsModel::VorbisEncoder:
- ui->labelBitrate->setText(tr("Quality Level %1").arg(value));
+ case SettingsModel::ABRMode:
+ sliderText = QString("≈ %1 kbps").arg(SettingsModel::mp3Bitrates[value]);
+ m_settings->compressionBitrateLAME(value);
break;
- case SettingsModel::AACEncoder:
+ case SettingsModel::CBRMode:
+ sliderText = QString("%1 kbps").arg(SettingsModel::mp3Bitrates[value]);
+ m_settings->compressionBitrateLAME(value);
+ break;
+ default:
+ throw "updateBitrate(): Unknown rc-mode specified!";
+ break;
+ }
+ break;
+ /* -------- VorbisEncoder -------- */
+ case SettingsModel::VorbisEncoder:
+ switch(currentRCMode)
+ {
+ case SettingsModel::VBRMode:
+ sliderText = tr("Quality Level %1").arg(value);
+ m_settings->compressionVbrLevelOggEnc(value);
+ break;
+ case SettingsModel::ABRMode:
+ sliderText = QString("≈ %1 kbps").arg(qMin(500, value * 8));
+ m_settings->compressionBitrateOggEnc(value);
+ break;
+ case SettingsModel::CBRMode:
+ sliderText = QString("%1 kbps").arg(qMin(500, value * 8));
+ m_settings->compressionBitrateOggEnc(value);
+ break;
+ default:
+ throw "updateBitrate(): Unknown rc-mode specified!";
+ break;
+ }
+ break;
+ /* -------- AACEncoder -------- */
+ case SettingsModel::AACEncoder:
+ switch(currentRCMode)
+ {
+ case SettingsModel::VBRMode:
if(m_qaacEncoderAvailable)
{
- ui->labelBitrate->setText(tr("Quality Level %1").arg(QString::number(qBound(0, value * 4 , 127))));
+ sliderText = tr("Quality Level %1").arg(QString::number(qBound(0, value * 4 , 127)));
}
else if(m_fhgEncoderAvailable)
{
- ui->labelBitrate->setText(tr("Quality Level %1").arg(QString::number(value)));
+ sliderText = tr("Quality Level %1").arg(QString::number(value));
}
else
{
- ui->labelBitrate->setText(tr("Quality Level %1").arg(QString().sprintf("%.2f", static_cast(value) / 20.0)));
+ sliderText = tr("Quality Level %1").arg(QString().sprintf("%.2f", static_cast(value) / 20.0));
}
+ m_settings->compressionVbrLevelAacEnc(value);
break;
- case SettingsModel::FLACEncoder:
- ui->labelBitrate->setText(tr("Compression %1").arg(value));
+ case SettingsModel::ABRMode:
+ sliderText = QString("≈ %1 kbps").arg(qMin(500, value * 8));
+ m_settings->compressionBitrateAacEnc(value);
break;
- case SettingsModel::OpusEncoder:
- ui->labelBitrate->setText(QString("≈ %1 kbps").arg(qMin(500, value * 8)));
- break;
- case SettingsModel::AC3Encoder:
- ui->labelBitrate->setText(tr("Quality Level %1").arg(qMin(1024, qMax(0, value * 64))));
- break;
- case SettingsModel::PCMEncoder:
- ui->labelBitrate->setText(tr("Uncompressed"));
+ case SettingsModel::CBRMode:
+ sliderText = QString("%1 kbps").arg(qMin(500, value * 8));
+ m_settings->compressionBitrateAacEnc(value);
break;
default:
- ui->labelBitrate->setText(QString::number(value));
+ throw "updateBitrate(): Unknown rc-mode specified!";
break;
}
break;
- case SettingsModel::ABRMode:
- switch(m_settings->compressionEncoder())
+ /* -------- AC3Encoder -------- */
+ case SettingsModel::AC3Encoder:
+ switch(currentRCMode)
{
- case SettingsModel::MP3Encoder:
- ui->labelBitrate->setText(QString("≈ %1 kbps").arg(SettingsModel::mp3Bitrates[value]));
+ case SettingsModel::VBRMode:
+ sliderText = tr("Quality Level %1").arg(qMin(1024, qMax(0, value * 64)));
+ m_settings->compressionVbrLevelAften(value);
break;
- case SettingsModel::FLACEncoder:
- ui->labelBitrate->setText(tr("Compression %1").arg(value));
+ case SettingsModel::ABRMode:
+ sliderText = QString("≈ %1 kbps").arg(SettingsModel::ac3Bitrates[value]);
+ m_settings->compressionBitrateAften(value);
break;
- case SettingsModel::AC3Encoder:
- ui->labelBitrate->setText(QString("≈ %1 kbps").arg(SettingsModel::ac3Bitrates[value]));
- break;
- case SettingsModel::PCMEncoder:
- ui->labelBitrate->setText(tr("Uncompressed"));
+ case SettingsModel::CBRMode:
+ sliderText = QString("%1 kbps").arg(SettingsModel::ac3Bitrates[value]);
+ m_settings->compressionBitrateAften(value);
break;
default:
- ui->labelBitrate->setText(QString("≈ %1 kbps").arg(qMin(500, value * 8)));
+ throw "updateBitrate(): Unknown rc-mode specified!";
break;
}
break;
+ /* -------- FLACEncoder -------- */
+ case SettingsModel::FLACEncoder:
+ switch(currentRCMode)
+ {
+ case SettingsModel::VBRMode:
+ sliderText = tr("Compression %1").arg(value);
+ m_settings->compressionVbrLevelFLAC(value);
+ break;
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ qWarning("FLAC does *not* support ABR or CBR mode!");
+ break;
+ default:
+ throw "updateBitrate(): Unknown rc-mode specified!";
+ break;
+ }
+ break;
+ /* -------- OpusEncoder -------- */
+ case SettingsModel::OpusEncoder:
+ switch(currentRCMode)
+ {
+ case SettingsModel::VBRMode:
+ sliderText = QString("≈ %1 kbps").arg(qMin(500, value * 8));
+ m_settings->compressionBitrateOpusEnc(value);
+ break;
+ case SettingsModel::ABRMode:
+ sliderText = QString("≈ %1 kbps").arg(qMin(500, value * 8));
+ m_settings->compressionBitrateOpusEnc(value);
+ break;
+ case SettingsModel::CBRMode:
+ sliderText = QString("%1 kbps").arg(qMin(500, value * 8));
+ m_settings->compressionBitrateOpusEnc(value);
+ break;
+ default:
+ throw "updateBitrate(): Unknown rc-mode specified!";
+ break;
+ }
+ break;
+ /* -------- DCAEncoder -------- */
+ case SettingsModel::DCAEncoder:
+ switch(currentRCMode)
+ {
+ case SettingsModel::VBRMode:
+ case SettingsModel::ABRMode:
+ qWarning("DcaEnc does *not* support VBR or ABR mode!");
+ break;
+ case SettingsModel::CBRMode:
+ sliderText = QString("%1 kbps").arg(value * 32);
+ m_settings->compressionBitrateDcaEnc(value);
+ break;
+ default:
+ throw "updateBitrate(): Unknown rc-mode specified!";
+ break;
+ }
+ break;
+ /* -------- PCMEncoder -------- */
+ case SettingsModel::PCMEncoder:
+ switch(currentRCMode)
+ {
+ case SettingsModel::VBRMode:
+ case SettingsModel::ABRMode:
+ case SettingsModel::CBRMode:
+ sliderText = tr("Uncompressed");
+ break;
+ default:
+ throw "updateBitrate(): Unknown rc-mode specified!";
+ break;
+ }
+ break;
+ /* -------- default -------- */
default:
- switch(m_settings->compressionEncoder())
- {
- case SettingsModel::MP3Encoder:
- ui->labelBitrate->setText(QString("%1 kbps").arg(SettingsModel::mp3Bitrates[value]));
- break;
- case SettingsModel::FLACEncoder:
- ui->labelBitrate->setText(tr("Compression %1").arg(value));
- break;
- case SettingsModel::AC3Encoder:
- ui->labelBitrate->setText(QString("%1 kbps").arg(SettingsModel::ac3Bitrates[value]));
- break;
- case SettingsModel::DCAEncoder:
- ui->labelBitrate->setText(QString("%1 kbps").arg(value * 32));
- break;
- case SettingsModel::PCMEncoder:
- ui->labelBitrate->setText(tr("Uncompressed"));
- break;
- default:
- ui->labelBitrate->setText(QString("%1 kbps").arg(qMin(500, value * 8)));
- break;
- }
+ throw "updateBitrate(): Unknown encoder specified!";
break;
}
+
+ //Update slider text
+ ui->labelBitrate->setText(sliderText);
}
/*
diff --git a/src/Dialog_MainWindow.h b/src/Dialog_MainWindow.h
index fa1a386a..1be1bc91 100644
--- a/src/Dialog_MainWindow.h
+++ b/src/Dialog_MainWindow.h
@@ -186,6 +186,9 @@ private:
bool checkForUpdates(void);
void initializeTranslation(void);
void refreshFavorites(void);
+ int getCurrentRCMode(int encoder);
+ int getCurrentQuality(int encoder);
+ int getCurrentBitrate(int encoder);
bool m_accepted;
bool m_firstTimeShown;
diff --git a/src/Dialog_Processing.cpp b/src/Dialog_Processing.cpp
index f7c630bb..e2c66f60 100644
--- a/src/Dialog_Processing.cpp
+++ b/src/Dialog_Processing.cpp
@@ -121,6 +121,8 @@ while(0)
} \
while(0)
+#define IS_VBR(RC_MODE) ((RC_MODE) == SettingsModel::VBRMode)
+
////////////////////////////////////////////////////////////
//Dummy class for UserData
@@ -945,16 +947,18 @@ void ProcessingDialog::startNextJob(void)
AbstractEncoder *ProcessingDialog::makeEncoder(bool *nativeResampling)
{
+ int rcMode = -1;
AbstractEncoder *encoder = NULL;
*nativeResampling = false;
-
+
switch(m_settings->compressionEncoder())
{
+ /*-------- MP3Encoder /*--------*/
case SettingsModel::MP3Encoder:
{
MP3Encoder *mp3Encoder = new MP3Encoder();
- mp3Encoder->setBitrate(m_settings->compressionBitrate());
- mp3Encoder->setRCMode(m_settings->compressionRCMode());
+ mp3Encoder->setRCMode(rcMode = m_settings->compressionRCModeLAME());
+ mp3Encoder->setBitrate(IS_VBR(rcMode) ? m_settings->compressionVbrLevelLAME() : m_settings->compressionBitrateLAME());
mp3Encoder->setAlgoQuality(m_settings->lameAlgoQuality());
if(m_settings->bitrateManagementEnabled())
{
@@ -970,11 +974,12 @@ AbstractEncoder *ProcessingDialog::makeEncoder(bool *nativeResampling)
encoder = mp3Encoder;
}
break;
+ /*-------- VorbisEncoder /*--------*/
case SettingsModel::VorbisEncoder:
{
VorbisEncoder *vorbisEncoder = new VorbisEncoder();
- vorbisEncoder->setBitrate(m_settings->compressionBitrate());
- vorbisEncoder->setRCMode(m_settings->compressionRCMode());
+ vorbisEncoder->setRCMode(rcMode = m_settings->compressionRCModeOggEnc());
+ vorbisEncoder->setBitrate(IS_VBR(rcMode) ? m_settings->compressionVbrLevelOggEnc() : m_settings->compressionBitrateOggEnc());
if(m_settings->bitrateManagementEnabled())
{
vorbisEncoder->setBitrateLimits(m_settings->bitrateManagementMinRate(), m_settings->bitrateManagementMaxRate());
@@ -988,13 +993,14 @@ AbstractEncoder *ProcessingDialog::makeEncoder(bool *nativeResampling)
encoder = vorbisEncoder;
}
break;
+ /*-------- AACEncoder /*--------*/
case SettingsModel::AACEncoder:
{
if(lamexp_check_tool("qaac.exe") && lamexp_check_tool("libsoxrate.dll"))
{
QAACEncoder *aacEncoder = new QAACEncoder();
- aacEncoder->setBitrate(m_settings->compressionBitrate());
- aacEncoder->setRCMode(m_settings->compressionRCMode());
+ aacEncoder->setRCMode(rcMode = m_settings->compressionRCModeAacEnc());
+ aacEncoder->setBitrate(IS_VBR(rcMode) ? m_settings->compressionVbrLevelAacEnc() : m_settings->compressionBitrateAacEnc());
aacEncoder->setProfile(m_settings->aacEncProfile());
aacEncoder->setCustomParams(m_settings->customParametersAacEnc());
encoder = aacEncoder;
@@ -1002,8 +1008,8 @@ AbstractEncoder *ProcessingDialog::makeEncoder(bool *nativeResampling)
else if(lamexp_check_tool("fhgaacenc.exe") && lamexp_check_tool("enc_fhgaac.dll"))
{
FHGAACEncoder *aacEncoder = new FHGAACEncoder();
- aacEncoder->setBitrate(m_settings->compressionBitrate());
- aacEncoder->setRCMode(m_settings->compressionRCMode());
+ aacEncoder->setRCMode(rcMode = m_settings->compressionRCModeAacEnc());
+ aacEncoder->setBitrate(IS_VBR(rcMode) ? m_settings->compressionVbrLevelAacEnc() : m_settings->compressionBitrateAacEnc());
aacEncoder->setProfile(m_settings->aacEncProfile());
aacEncoder->setCustomParams(m_settings->customParametersAacEnc());
encoder = aacEncoder;
@@ -1011,8 +1017,8 @@ AbstractEncoder *ProcessingDialog::makeEncoder(bool *nativeResampling)
else
{
AACEncoder *aacEncoder = new AACEncoder();
- aacEncoder->setBitrate(m_settings->compressionBitrate());
- aacEncoder->setRCMode(m_settings->compressionRCMode());
+ aacEncoder->setRCMode(rcMode = m_settings->compressionRCModeAacEnc());
+ aacEncoder->setBitrate(IS_VBR(rcMode) ? m_settings->compressionVbrLevelAacEnc() : m_settings->compressionBitrateAacEnc());
aacEncoder->setEnable2Pass(m_settings->neroAACEnable2Pass());
aacEncoder->setProfile(m_settings->aacEncProfile());
aacEncoder->setCustomParams(m_settings->customParametersAacEnc());
@@ -1020,11 +1026,12 @@ AbstractEncoder *ProcessingDialog::makeEncoder(bool *nativeResampling)
}
}
break;
+ /*-------- AC3Encoder /*--------*/
case SettingsModel::AC3Encoder:
{
AC3Encoder *ac3Encoder = new AC3Encoder();
- ac3Encoder->setBitrate(m_settings->compressionBitrate());
- ac3Encoder->setRCMode(m_settings->compressionRCMode());
+ ac3Encoder->setRCMode(rcMode = m_settings->compressionRCModeAften());
+ ac3Encoder->setBitrate(IS_VBR(rcMode) ? m_settings->compressionVbrLevelAften() : m_settings->compressionBitrateAften());
ac3Encoder->setCustomParams(m_settings->customParametersAften());
ac3Encoder->setAudioCodingMode(m_settings->aftenAudioCodingMode());
ac3Encoder->setDynamicRangeCompression(m_settings->aftenDynamicRangeCompression());
@@ -1033,46 +1040,58 @@ AbstractEncoder *ProcessingDialog::makeEncoder(bool *nativeResampling)
encoder = ac3Encoder;
}
break;
+ /*-------- FLACEncoder /*--------*/
case SettingsModel::FLACEncoder:
{
FLACEncoder *flacEncoder = new FLACEncoder();
- flacEncoder->setBitrate(m_settings->compressionBitrate());
- flacEncoder->setRCMode(m_settings->compressionRCMode());
+ flacEncoder->setBitrate(m_settings->compressionVbrLevelFLAC());
+ flacEncoder->setRCMode(SettingsModel::VBRMode);
flacEncoder->setCustomParams(m_settings->customParametersFLAC());
encoder = flacEncoder;
}
break;
+ /*-------- OpusEncoder --------*/
case SettingsModel::OpusEncoder:
{
OpusEncoder *opusEncoder = new OpusEncoder();
- opusEncoder->setBitrate(m_settings->compressionBitrate());
- opusEncoder->setRCMode(m_settings->compressionRCMode());
+ opusEncoder->setRCMode(rcMode = m_settings->compressionRCModeOpusEnc());
+ opusEncoder->setBitrate(m_settings->compressionBitrateOpusEnc()); /*Opus always uses bitrate*/
opusEncoder->setOptimizeFor(m_settings->opusOptimizeFor());
opusEncoder->setEncodeComplexity(m_settings->opusComplexity());
opusEncoder->setFrameSize(m_settings->opusFramesize());
opusEncoder->setCustomParams(m_settings->customParametersOpus());
encoder = opusEncoder;
}
- break; case SettingsModel::DCAEncoder:
+ break;
+ /*-------- DCAEncoder --------*/
+ case SettingsModel::DCAEncoder:
{
DCAEncoder *dcaEncoder = new DCAEncoder();
- dcaEncoder->setBitrate(m_settings->compressionBitrate());
- dcaEncoder->setRCMode(m_settings->compressionRCMode());
+ dcaEncoder->setRCMode(SettingsModel::CBRMode);
+ dcaEncoder->setBitrate(IS_VBR(rcMode) ? 0 : m_settings->compressionBitrateDcaEnc());
encoder = dcaEncoder;
}
break;
+ /*-------- PCMEncoder --------*/
case SettingsModel::PCMEncoder:
{
WaveEncoder *waveEncoder = new WaveEncoder();
- waveEncoder->setBitrate(m_settings->compressionBitrate());
- waveEncoder->setRCMode(m_settings->compressionRCMode());
+ waveEncoder->setBitrate(0); /*does NOT apply to PCM output*/
+ waveEncoder->setRCMode(0); /*does NOT apply to PCM output*/
encoder = waveEncoder;
}
break;
+ /*-------- default --------*/
default:
throw "Unsupported encoder!";
}
+ //Sanity checking
+ if(!encoder)
+ {
+ throw "No encoder instance has been assigend!";
+ }
+
return encoder;
}
diff --git a/src/Encoder_Abstract.h b/src/Encoder_Abstract.h
index 6bb3690b..20ea0af7 100644
--- a/src/Encoder_Abstract.h
+++ b/src/Encoder_Abstract.h
@@ -46,14 +46,14 @@ public:
virtual const bool needsTimingInfo(void);
//Common setter methods
- void setBitrate(int bitrate);
- void setRCMode(int mode);
- void setCustomParams(const QString &customParams);
+ virtual void setBitrate(int bitrate);
+ virtual void setRCMode(int mode);
+ virtual void setCustomParams(const QString &customParams);
protected:
- int m_configBitrate;
- int m_configRCMode;
- QString m_configCustomParams;
+ int m_configBitrate; //Bitrate *or* VBR-quality-level
+ int m_configRCMode; //Rate-control mode
+ QString m_configCustomParams; //Custom parameters, if any
//Helper functions
bool isUnicode(const QString &text);
diff --git a/src/Encoder_Vorbis.cpp b/src/Encoder_Vorbis.cpp
index 42f21c5c..dcf669ff 100644
--- a/src/Encoder_Vorbis.cpp
+++ b/src/Encoder_Vorbis.cpp
@@ -158,6 +158,11 @@ bool VorbisEncoder::encode(const QString &sourceFile, const AudioFileModel &meta
return true;
}
+void VorbisEncoder::setBitrate(int bitrate)
+{
+ m_configBitrate = qMax(-2, bitrate);
+}
+
QString VorbisEncoder::extension(void)
{
return "ogg";
diff --git a/src/Encoder_Vorbis.h b/src/Encoder_Vorbis.h
index 102d5476..eb97e930 100644
--- a/src/Encoder_Vorbis.h
+++ b/src/Encoder_Vorbis.h
@@ -38,6 +38,7 @@ public:
virtual QString extension(void);
virtual void setBitrateLimits(int minimumBitrate, int maximumBitrate);
virtual void setSamplingRate(int value);
+ virtual void setBitrate(int bitrate);
private:
const QString m_binary;
diff --git a/src/Model_Settings.cpp b/src/Model_Settings.cpp
index 4340784b..23d9244b 100644
--- a/src/Model_Settings.cpp
+++ b/src/Model_Settings.cpp
@@ -68,66 +68,80 @@ unsigned int SettingsModel::OPT##Default(void) { return DEF; }
////////////////////////////////////////////////////////////
//Setting ID's
-LAMEXP_MAKE_ID(versionNumber, "VersionNumber");
-LAMEXP_MAKE_ID(licenseAccepted, "LicenseAccepted");
-LAMEXP_MAKE_ID(interfaceStyle, "InterfaceStyle");
-LAMEXP_MAKE_ID(compressionEncoder, "Compression/Encoder");
-LAMEXP_MAKE_ID(compressionRCMode, "Compression/RCMode");
-LAMEXP_MAKE_ID(compressionBitrate, "Compression/Bitrate");
-LAMEXP_MAKE_ID(outputDir, "OutputDirectory/SelectedPath");
-LAMEXP_MAKE_ID(outputToSourceDir, "OutputDirectory/OutputToSourceFolder");
-LAMEXP_MAKE_ID(prependRelativeSourcePath, "OutputDirectory/PrependRelativeSourcePath");
-LAMEXP_MAKE_ID(favoriteOutputFolders, "OutputDirectory/Favorites");
-LAMEXP_MAKE_ID(mostRecentInputPath, "InputDirectory/MostRecentPath");
-LAMEXP_MAKE_ID(writeMetaTags, "Flags/WriteMetaTags");
-LAMEXP_MAKE_ID(createPlaylist, "Flags/AutoCreatePlaylist");
-LAMEXP_MAKE_ID(autoUpdateLastCheck, "AutoUpdate/LastCheck");
-LAMEXP_MAKE_ID(autoUpdateEnabled, "AutoUpdate/Enabled");
-LAMEXP_MAKE_ID(autoUpdateCheckBeta, "AutoUpdate/CheckForBetaVersions");
-LAMEXP_MAKE_ID(soundsEnabled, "Flags/EnableSounds");
-LAMEXP_MAKE_ID(neroAacNotificationsEnabled, "Flags/EnableNeroAacNotifications");
-LAMEXP_MAKE_ID(antivirNotificationsEnabled, "Flags/EnableAntivirusNotifications");
-LAMEXP_MAKE_ID(dropBoxWidgetEnabled, "Flags/EnableDropBoxWidget");
-LAMEXP_MAKE_ID(shellIntegrationEnabled, "Flags/EnableShellIntegration");
-LAMEXP_MAKE_ID(currentLanguage, "Localization/Language");
-LAMEXP_MAKE_ID(currentLanguageFile, "Localization/UseQMFile");
-LAMEXP_MAKE_ID(lameAlgoQuality, "AdvancedOptions/LAME/AlgorithmQuality");
-LAMEXP_MAKE_ID(lameChannelMode, "AdvancedOptions/LAME/ChannelMode");
-LAMEXP_MAKE_ID(forceStereoDownmix, "AdvancedOptions/StereoDownmix/Force");
-LAMEXP_MAKE_ID(bitrateManagementEnabled, "AdvancedOptions/BitrateManagement/Enabled");
-LAMEXP_MAKE_ID(bitrateManagementMinRate, "AdvancedOptions/BitrateManagement/MinRate");
-LAMEXP_MAKE_ID(bitrateManagementMaxRate, "AdvancedOptions/BitrateManagement/MaxRate");
+LAMEXP_MAKE_ID(aacEncProfile, "AdvancedOptions/AACEnc/ForceProfile");
LAMEXP_MAKE_ID(aftenAudioCodingMode, "AdvancedOptions/Aften/AudioCodingMode");
LAMEXP_MAKE_ID(aftenDynamicRangeCompression, "AdvancedOptions/Aften/DynamicRangeCompression");
-LAMEXP_MAKE_ID(aftenFastBitAllocation, "AdvancedOptions/Aften/FastBitAllocation");
LAMEXP_MAKE_ID(aftenExponentSearchSize, "AdvancedOptions/Aften/ExponentSearchSize");
-LAMEXP_MAKE_ID(samplingRate, "AdvancedOptions/Common/Resampling");
-LAMEXP_MAKE_ID(neroAACEnable2Pass, "AdvancedOptions/AACEnc/Enable2Pass");
-LAMEXP_MAKE_ID(aacEncProfile, "AdvancedOptions/AACEnc/ForceProfile");
-LAMEXP_MAKE_ID(opusOptimizeFor, "AdvancedOptions/Opus/OptimizeForSignalType");
-LAMEXP_MAKE_ID(opusComplexity, "AdvancedOptions/Opus/EncodingComplexity");
-LAMEXP_MAKE_ID(opusFramesize, "AdvancedOptions/Opus/FrameSize");
-LAMEXP_MAKE_ID(opusDisableResample, "AdvancedOptions/Opus/DisableResample");
-LAMEXP_MAKE_ID(normalizationFilterEnabled, "AdvancedOptions/VolumeNormalization/Enabled");
-LAMEXP_MAKE_ID(normalizationFilterMaxVolume, "AdvancedOptions/VolumeNormalization/MaxVolume");
-LAMEXP_MAKE_ID(normalizationFilterEqualizationMode, "AdvancedOptions/VolumeNormalization/EqualizationMode");
-LAMEXP_MAKE_ID(toneAdjustBass, "AdvancedOptions/ToneAdjustment/Bass");
-LAMEXP_MAKE_ID(toneAdjustTreble, "AdvancedOptions/ToneAdjustment/Treble");
-LAMEXP_MAKE_ID(customParametersLAME, "AdvancedOptions/CustomParameters/LAME");
-LAMEXP_MAKE_ID(customParametersOggEnc, "AdvancedOptions/CustomParameters/OggEnc");
+LAMEXP_MAKE_ID(aftenFastBitAllocation, "AdvancedOptions/Aften/FastBitAllocation");
+LAMEXP_MAKE_ID(antivirNotificationsEnabled, "Flags/EnableAntivirusNotifications");
+LAMEXP_MAKE_ID(autoUpdateCheckBeta, "AutoUpdate/CheckForBetaVersions");
+LAMEXP_MAKE_ID(autoUpdateEnabled, "AutoUpdate/Enabled");
+LAMEXP_MAKE_ID(autoUpdateLastCheck, "AutoUpdate/LastCheck");
+LAMEXP_MAKE_ID(bitrateManagementEnabled, "AdvancedOptions/BitrateManagement/Enabled");
+LAMEXP_MAKE_ID(bitrateManagementMaxRate, "AdvancedOptions/BitrateManagement/MaxRate");
+LAMEXP_MAKE_ID(bitrateManagementMinRate, "AdvancedOptions/BitrateManagement/MinRate");
+LAMEXP_MAKE_ID(compressionBitrateAacEnc, "Compression/Bitrate/AacEnc");
+LAMEXP_MAKE_ID(compressionBitrateAften, "Compression/Bitrate/Aften");
+LAMEXP_MAKE_ID(compressionBitrateDcaEnc, "Compression/Bitrate/DcaEnc");
+LAMEXP_MAKE_ID(compressionBitrateLAME, "Compression/Bitrate/LAME");
+LAMEXP_MAKE_ID(compressionBitrateOggEnc, "Compression/Bitrate/OggEnc");
+LAMEXP_MAKE_ID(compressionBitrateOpusEnc, "Compression/Bitrate/OpusEnc");
+LAMEXP_MAKE_ID(compressionEncoder, "Compression/Encoder");
+LAMEXP_MAKE_ID(compressionRCModeAacEnc, "Compression/RCMode/AacEnc");
+LAMEXP_MAKE_ID(compressionRCModeAften, "Compression/RCMode/Aften");
+LAMEXP_MAKE_ID(compressionRCModeLAME, "Compression/RCMode/LAME");
+LAMEXP_MAKE_ID(compressionRCModeOggEnc, "Compression/RCMode/OggEnc");
+LAMEXP_MAKE_ID(compressionRCModeOpusEnc, "Compression/RCMode/OpusEnc");
+LAMEXP_MAKE_ID(compressionVbrLevelAacEnc, "Compression/VbrLevel/AacEnc");
+LAMEXP_MAKE_ID(compressionVbrLevelAften, "Compression/VbrLevel/Aften");
+LAMEXP_MAKE_ID(compressionVbrLevelFLAC, "Compression/VbrLevel/FLAC");
+LAMEXP_MAKE_ID(compressionVbrLevelLAME, "Compression/VbrLevel/LAME");
+LAMEXP_MAKE_ID(compressionVbrLevelOggEnc, "Compression/VbrLevel/OggEnc");
+LAMEXP_MAKE_ID(createPlaylist, "Flags/AutoCreatePlaylist");
+LAMEXP_MAKE_ID(currentLanguage, "Localization/Language");
+LAMEXP_MAKE_ID(currentLanguageFile, "Localization/UseQMFile");
LAMEXP_MAKE_ID(customParametersAacEnc, "AdvancedOptions/CustomParameters/AacEnc");
LAMEXP_MAKE_ID(customParametersAften, "AdvancedOptions/CustomParameters/Aften");
LAMEXP_MAKE_ID(customParametersFLAC, "AdvancedOptions/CustomParameters/FLAC");
+LAMEXP_MAKE_ID(customParametersLAME, "AdvancedOptions/CustomParameters/LAME");
+LAMEXP_MAKE_ID(customParametersOggEnc, "AdvancedOptions/CustomParameters/OggEnc");
LAMEXP_MAKE_ID(customParametersOpus, "AdvancedOptions/CustomParameters/OpusEnc");
-LAMEXP_MAKE_ID(renameOutputFilesEnabled, "AdvancedOptions/RenameOutputFiles/Enabled");
-LAMEXP_MAKE_ID(renameOutputFilesPattern, "AdvancedOptions/RenameOutputFiles/Pattern");
-LAMEXP_MAKE_ID(overwriteMode, "AdvancedOptions/OverwriteMode");
-LAMEXP_MAKE_ID(hibernateComputer, "AdvancedOptions/HibernateComputerOnShutdown");
-LAMEXP_MAKE_ID(metaInfoPosition, "MetaInformation/PlaylistPosition");
-LAMEXP_MAKE_ID(maximumInstances, "AdvancedOptions/Threading/MaximumInstances");
LAMEXP_MAKE_ID(customTempPath, "AdvancedOptions/TempDirectory/CustomPath");
LAMEXP_MAKE_ID(customTempPathEnabled, "AdvancedOptions/TempDirectory/UseCustomPath");
+LAMEXP_MAKE_ID(dropBoxWidgetEnabled, "Flags/EnableDropBoxWidget");
+LAMEXP_MAKE_ID(favoriteOutputFolders, "OutputDirectory/Favorites");
+LAMEXP_MAKE_ID(forceStereoDownmix, "AdvancedOptions/StereoDownmix/Force");
+LAMEXP_MAKE_ID(hibernateComputer, "AdvancedOptions/HibernateComputerOnShutdown");
+LAMEXP_MAKE_ID(interfaceStyle, "InterfaceStyle");
+LAMEXP_MAKE_ID(lameAlgoQuality, "AdvancedOptions/LAME/AlgorithmQuality");
+LAMEXP_MAKE_ID(lameChannelMode, "AdvancedOptions/LAME/ChannelMode");
+LAMEXP_MAKE_ID(licenseAccepted, "LicenseAccepted");
+LAMEXP_MAKE_ID(maximumInstances, "AdvancedOptions/Threading/MaximumInstances");
+LAMEXP_MAKE_ID(metaInfoPosition, "MetaInformation/PlaylistPosition");
+LAMEXP_MAKE_ID(mostRecentInputPath, "InputDirectory/MostRecentPath");
+LAMEXP_MAKE_ID(neroAACEnable2Pass, "AdvancedOptions/AACEnc/Enable2Pass");
+LAMEXP_MAKE_ID(neroAacNotificationsEnabled, "Flags/EnableNeroAacNotifications");
+LAMEXP_MAKE_ID(normalizationFilterEnabled, "AdvancedOptions/VolumeNormalization/Enabled");
+LAMEXP_MAKE_ID(normalizationFilterEqualizationMode, "AdvancedOptions/VolumeNormalization/EqualizationMode");
+LAMEXP_MAKE_ID(normalizationFilterMaxVolume, "AdvancedOptions/VolumeNormalization/MaxVolume");
+LAMEXP_MAKE_ID(opusComplexity, "AdvancedOptions/Opus/EncodingComplexity");
+LAMEXP_MAKE_ID(opusDisableResample, "AdvancedOptions/Opus/DisableResample");
+LAMEXP_MAKE_ID(opusFramesize, "AdvancedOptions/Opus/FrameSize");
+LAMEXP_MAKE_ID(opusOptimizeFor, "AdvancedOptions/Opus/OptimizeForSignalType");
+LAMEXP_MAKE_ID(outputDir, "OutputDirectory/SelectedPath");
+LAMEXP_MAKE_ID(outputToSourceDir, "OutputDirectory/OutputToSourceFolder");
+LAMEXP_MAKE_ID(overwriteMode, "AdvancedOptions/OverwriteMode");
+LAMEXP_MAKE_ID(prependRelativeSourcePath, "OutputDirectory/PrependRelativeSourcePath");
+LAMEXP_MAKE_ID(renameOutputFilesEnabled, "AdvancedOptions/RenameOutputFiles/Enabled");
+LAMEXP_MAKE_ID(renameOutputFilesPattern, "AdvancedOptions/RenameOutputFiles/Pattern");
+LAMEXP_MAKE_ID(samplingRate, "AdvancedOptions/Common/Resampling");
+LAMEXP_MAKE_ID(shellIntegrationEnabled, "Flags/EnableShellIntegration");
LAMEXP_MAKE_ID(slowStartup, "Flags/SlowStartupDetected");
+LAMEXP_MAKE_ID(soundsEnabled, "Flags/EnableSounds");
+LAMEXP_MAKE_ID(toneAdjustBass, "AdvancedOptions/ToneAdjustment/Bass");
+LAMEXP_MAKE_ID(toneAdjustTreble, "AdvancedOptions/ToneAdjustment/Treble");
+LAMEXP_MAKE_ID(versionNumber, "VersionNumber");
+LAMEXP_MAKE_ID(writeMetaTags, "Flags/WriteMetaTags");
//LUT
const int SettingsModel::mp3Bitrates[15] = {32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1};
@@ -199,6 +213,14 @@ SettingsModel::SettingsModel(void)
m_settings->beginGroup(groupKey);
m_settings->setValue(g_settingsId_versionNumber, QApplication::applicationVersion());
m_settings->sync();
+
+ const bool isDefined = m_settings->contains(g_settingsId_outputDir);
+ qWarning("Value '%s' is currently: %s\n", g_settingsId_outputDir, (isDefined ? "defined" : "un-defined"));
+ if(isDefined)
+ {
+ qWarning("It's value is:\n%s\n", m_settings->value(g_settingsId_outputDir).toString().toUtf8().constData());
+ }
+ qWarning("Current output directory is:\n%s\n", outputDir().toUtf8().constData());
}
////////////////////////////////////////////////////////////
@@ -215,17 +237,27 @@ SettingsModel::~SettingsModel(void)
// Public Functions
////////////////////////////////////////////////////////////
+#define CHECK_RCMODE(NAME) do\
+{ \
+ if(this->compressionRCMode##NAME() < SettingsModel::VBRMode || this->compressionRCMode##NAME() >= SettingsModel::RCMODE_COUNT) \
+ { \
+ this->compressionRCMode##NAME(SettingsModel::VBRMode); \
+ } \
+} \
+while(0)
+
void SettingsModel::validate(void)
{
- if(this->compressionEncoder() < SettingsModel::MP3Encoder || this->compressionEncoder() > SettingsModel::PCMEncoder)
+ if(this->compressionEncoder() < SettingsModel::MP3Encoder || this->compressionEncoder() >= SettingsModel::ENCODER_COUNT)
{
this->compressionEncoder(SettingsModel::MP3Encoder);
}
- if(this->compressionRCMode() < SettingsModel::VBRMode || this->compressionRCMode() > SettingsModel::CBRMode)
- {
- this->compressionEncoder(SettingsModel::VBRMode);
- }
+ CHECK_RCMODE(LAME);
+ CHECK_RCMODE(OggEnc);
+ CHECK_RCMODE(AacEnc);
+ CHECK_RCMODE(Aften);
+ CHECK_RCMODE(OpusEnc);
if(!(lamexp_check_tool("neroAacEnc.exe") && lamexp_check_tool("neroAacDec.exe") && lamexp_check_tool("neroAacTag.exe")))
{
@@ -244,6 +276,7 @@ void SettingsModel::validate(void)
if(this->outputDir().isEmpty() || !QFileInfo(this->outputDir()).isDir())
{
+ qWarning("Output directory not set yet or does NOT exist anymore -> Resetting to QDesktopServices::MusicLocation");
QString musicLocation = QDesktopServices::storageLocation(QDesktopServices::MusicLocation);
this->outputDir(musicLocation.isEmpty() ? QDesktopServices::storageLocation(QDesktopServices::HomeLocation) : musicLocation);
}
@@ -383,62 +416,76 @@ QString SettingsModel::initDirectory(const QString &path)
// Getter and Setter
////////////////////////////////////////////////////////////
-LAMEXP_MAKE_OPTION_I(licenseAccepted, 0)
-LAMEXP_MAKE_OPTION_I(interfaceStyle, 0)
-LAMEXP_MAKE_OPTION_I(compressionEncoder, 0)
-LAMEXP_MAKE_OPTION_I(compressionRCMode, 0)
-LAMEXP_MAKE_OPTION_I(compressionBitrate, 7)
-LAMEXP_MAKE_OPTION_S(outputDir, QDesktopServices::storageLocation(QDesktopServices::MusicLocation))
-LAMEXP_MAKE_OPTION_B(outputToSourceDir, false)
-LAMEXP_MAKE_OPTION_B(prependRelativeSourcePath, false)
-LAMEXP_MAKE_OPTION_S(favoriteOutputFolders, QString());
-LAMEXP_MAKE_OPTION_B(writeMetaTags, true)
-LAMEXP_MAKE_OPTION_B(createPlaylist, true)
-LAMEXP_MAKE_OPTION_S(autoUpdateLastCheck, "Never")
-LAMEXP_MAKE_OPTION_B(autoUpdateEnabled, true)
-LAMEXP_MAKE_OPTION_B(autoUpdateCheckBeta, false)
-LAMEXP_MAKE_OPTION_B(soundsEnabled, true)
-LAMEXP_MAKE_OPTION_B(neroAacNotificationsEnabled, true)
+LAMEXP_MAKE_OPTION_I(aacEncProfile, 0)
+LAMEXP_MAKE_OPTION_I(aftenAudioCodingMode, 0)
+LAMEXP_MAKE_OPTION_I(aftenDynamicRangeCompression, 5)
+LAMEXP_MAKE_OPTION_I(aftenExponentSearchSize, 8)
+LAMEXP_MAKE_OPTION_B(aftenFastBitAllocation, false)
LAMEXP_MAKE_OPTION_B(antivirNotificationsEnabled, true)
-LAMEXP_MAKE_OPTION_B(dropBoxWidgetEnabled, true)
-LAMEXP_MAKE_OPTION_B(shellIntegrationEnabled, !lamexp_portable_mode())
+LAMEXP_MAKE_OPTION_B(autoUpdateCheckBeta, false)
+LAMEXP_MAKE_OPTION_B(autoUpdateEnabled, true)
+LAMEXP_MAKE_OPTION_S(autoUpdateLastCheck, "Never")
+LAMEXP_MAKE_OPTION_B(bitrateManagementEnabled, false)
+LAMEXP_MAKE_OPTION_I(bitrateManagementMaxRate, 500)
+LAMEXP_MAKE_OPTION_I(bitrateManagementMinRate, 32)
+LAMEXP_MAKE_OPTION_I(compressionBitrateAacEnc, 20)
+LAMEXP_MAKE_OPTION_I(compressionBitrateAften, 15)
+LAMEXP_MAKE_OPTION_I(compressionBitrateDcaEnc, 47)
+LAMEXP_MAKE_OPTION_I(compressionBitrateLAME, 10)
+LAMEXP_MAKE_OPTION_I(compressionBitrateOggEnc, 20)
+LAMEXP_MAKE_OPTION_I(compressionBitrateOpusEnc, 16)
+LAMEXP_MAKE_OPTION_I(compressionEncoder, 0)
+LAMEXP_MAKE_OPTION_I(compressionRCModeAacEnc, 0)
+LAMEXP_MAKE_OPTION_I(compressionRCModeAften, 0)
+LAMEXP_MAKE_OPTION_I(compressionRCModeLAME, 0)
+LAMEXP_MAKE_OPTION_I(compressionRCModeOggEnc, 0)
+LAMEXP_MAKE_OPTION_I(compressionRCModeOpusEnc, 0)
+LAMEXP_MAKE_OPTION_I(compressionVbrLevelAacEnc, 10)
+LAMEXP_MAKE_OPTION_I(compressionVbrLevelAften, 8)
+LAMEXP_MAKE_OPTION_I(compressionVbrLevelFLAC, 8)
+LAMEXP_MAKE_OPTION_I(compressionVbrLevelLAME, 7)
+LAMEXP_MAKE_OPTION_I(compressionVbrLevelOggEnc, 5)
+LAMEXP_MAKE_OPTION_B(createPlaylist, true)
LAMEXP_MAKE_OPTION_S(currentLanguage, defaultLanguage())
LAMEXP_MAKE_OPTION_S(currentLanguageFile, QString())
+LAMEXP_MAKE_OPTION_S(customParametersAacEnc, QString())
+LAMEXP_MAKE_OPTION_S(customParametersAften, QString())
+LAMEXP_MAKE_OPTION_S(customParametersFLAC, QString())
+LAMEXP_MAKE_OPTION_S(customParametersLAME, QString())
+LAMEXP_MAKE_OPTION_S(customParametersOggEnc, QString())
+LAMEXP_MAKE_OPTION_S(customParametersOpus, QString())
+LAMEXP_MAKE_OPTION_S(customTempPath, QDesktopServices::storageLocation(QDesktopServices::TempLocation))
+LAMEXP_MAKE_OPTION_B(customTempPathEnabled, false)
+LAMEXP_MAKE_OPTION_B(dropBoxWidgetEnabled, true)
+LAMEXP_MAKE_OPTION_S(favoriteOutputFolders, QString())
+LAMEXP_MAKE_OPTION_B(forceStereoDownmix, false)
+LAMEXP_MAKE_OPTION_B(hibernateComputer, false)
+LAMEXP_MAKE_OPTION_I(interfaceStyle, 0)
LAMEXP_MAKE_OPTION_I(lameAlgoQuality, 2)
LAMEXP_MAKE_OPTION_I(lameChannelMode, 0)
-LAMEXP_MAKE_OPTION_B(forceStereoDownmix, false)
-LAMEXP_MAKE_OPTION_B(bitrateManagementEnabled, false)
-LAMEXP_MAKE_OPTION_I(bitrateManagementMinRate, 32)
-LAMEXP_MAKE_OPTION_I(bitrateManagementMaxRate, 500)
-LAMEXP_MAKE_OPTION_I(samplingRate, 0)
+LAMEXP_MAKE_OPTION_I(licenseAccepted, 0)
+LAMEXP_MAKE_OPTION_U(maximumInstances, 0)
+LAMEXP_MAKE_OPTION_U(metaInfoPosition, UINT_MAX)
+LAMEXP_MAKE_OPTION_S(mostRecentInputPath, QDesktopServices::storageLocation(QDesktopServices::MusicLocation))
LAMEXP_MAKE_OPTION_B(neroAACEnable2Pass, true)
-LAMEXP_MAKE_OPTION_I(aacEncProfile, 0)
-LAMEXP_MAKE_OPTION_I(aftenAudioCodingMode, 0);
-LAMEXP_MAKE_OPTION_I(aftenDynamicRangeCompression, 5);
-LAMEXP_MAKE_OPTION_B(aftenFastBitAllocation, false);
-LAMEXP_MAKE_OPTION_I(aftenExponentSearchSize, 8);
-LAMEXP_MAKE_OPTION_I(opusOptimizeFor, 0);
-LAMEXP_MAKE_OPTION_I(opusComplexity, 10);
-LAMEXP_MAKE_OPTION_I(opusFramesize, 3);
-LAMEXP_MAKE_OPTION_B(opusDisableResample, false);
+LAMEXP_MAKE_OPTION_B(neroAacNotificationsEnabled, true)
LAMEXP_MAKE_OPTION_B(normalizationFilterEnabled, false)
+LAMEXP_MAKE_OPTION_I(normalizationFilterEqualizationMode, 0)
LAMEXP_MAKE_OPTION_I(normalizationFilterMaxVolume, -50)
-LAMEXP_MAKE_OPTION_I(normalizationFilterEqualizationMode, 0);
+LAMEXP_MAKE_OPTION_I(opusComplexity, 10)
+LAMEXP_MAKE_OPTION_B(opusDisableResample, false)
+LAMEXP_MAKE_OPTION_I(opusFramesize, 3)
+LAMEXP_MAKE_OPTION_I(opusOptimizeFor, 0)
+LAMEXP_MAKE_OPTION_S(outputDir, QDesktopServices::storageLocation(QDesktopServices::MusicLocation))
+LAMEXP_MAKE_OPTION_B(outputToSourceDir, false)
+LAMEXP_MAKE_OPTION_I(overwriteMode, Overwrite_KeepBoth)
+LAMEXP_MAKE_OPTION_B(prependRelativeSourcePath, false)
+LAMEXP_MAKE_OPTION_B(renameOutputFilesEnabled, false)
+LAMEXP_MAKE_OPTION_S(renameOutputFilesPattern, "[] - ")
+LAMEXP_MAKE_OPTION_I(samplingRate, 0)
+LAMEXP_MAKE_OPTION_B(shellIntegrationEnabled, !lamexp_portable_mode())
+LAMEXP_MAKE_OPTION_B(slowStartup, false)
+LAMEXP_MAKE_OPTION_B(soundsEnabled, true)
LAMEXP_MAKE_OPTION_I(toneAdjustBass, 0)
LAMEXP_MAKE_OPTION_I(toneAdjustTreble, 0)
-LAMEXP_MAKE_OPTION_S(customParametersLAME, QString());
-LAMEXP_MAKE_OPTION_S(customParametersOggEnc, QString());
-LAMEXP_MAKE_OPTION_S(customParametersAacEnc, QString());
-LAMEXP_MAKE_OPTION_S(customParametersAften, QString());
-LAMEXP_MAKE_OPTION_S(customParametersFLAC, QString());
-LAMEXP_MAKE_OPTION_S(customParametersOpus, QString());
-LAMEXP_MAKE_OPTION_B(renameOutputFilesEnabled, false);
-LAMEXP_MAKE_OPTION_S(renameOutputFilesPattern, "[] - ");
-LAMEXP_MAKE_OPTION_I(overwriteMode, Overwrite_KeepBoth);
-LAMEXP_MAKE_OPTION_U(metaInfoPosition, UINT_MAX);
-LAMEXP_MAKE_OPTION_U(maximumInstances, 0);
-LAMEXP_MAKE_OPTION_S(customTempPath, QDesktopServices::storageLocation(QDesktopServices::TempLocation));
-LAMEXP_MAKE_OPTION_B(customTempPathEnabled, false);
-LAMEXP_MAKE_OPTION_B(slowStartup, false);
-LAMEXP_MAKE_OPTION_S(mostRecentInputPath, QDesktopServices::storageLocation(QDesktopServices::MusicLocation));
-LAMEXP_MAKE_OPTION_B(hibernateComputer, false);
+LAMEXP_MAKE_OPTION_B(writeMetaTags, true)
diff --git a/src/Model_Settings.h b/src/Model_Settings.h
index 95ce3ddf..fc756d8d 100644
--- a/src/Model_Settings.h
+++ b/src/Model_Settings.h
@@ -64,14 +64,18 @@ public:
FLACEncoder = 4,
OpusEncoder = 5,
DCAEncoder = 6,
- PCMEncoder = 7
+ PCMEncoder = 7,
+ ENCODER_COUNT = 8
};
+
enum RCMode
{
VBRMode = 0,
ABRMode = 1,
- CBRMode = 2
+ CBRMode = 2,
+ RCMODE_COUNT = 3
};
+
enum Overwrite
{
Overwrite_KeepBoth = 0,
@@ -85,65 +89,79 @@ public:
static const int samplingRates[8];
//Getters & setters
- LAMEXP_MAKE_OPTION_I(licenseAccepted);
- LAMEXP_MAKE_OPTION_I(interfaceStyle);
- LAMEXP_MAKE_OPTION_I(compressionEncoder);
- LAMEXP_MAKE_OPTION_I(compressionRCMode);
- LAMEXP_MAKE_OPTION_I(compressionBitrate);
- LAMEXP_MAKE_OPTION_S(outputDir);
- LAMEXP_MAKE_OPTION_B(outputToSourceDir);
- LAMEXP_MAKE_OPTION_B(prependRelativeSourcePath);
- LAMEXP_MAKE_OPTION_S(favoriteOutputFolders);
- LAMEXP_MAKE_OPTION_B(writeMetaTags);
- LAMEXP_MAKE_OPTION_B(createPlaylist);
- LAMEXP_MAKE_OPTION_S(autoUpdateLastCheck);
- LAMEXP_MAKE_OPTION_B(autoUpdateEnabled);
- LAMEXP_MAKE_OPTION_B(autoUpdateCheckBeta);
- LAMEXP_MAKE_OPTION_B(soundsEnabled);
- LAMEXP_MAKE_OPTION_B(neroAacNotificationsEnabled);
- LAMEXP_MAKE_OPTION_B(antivirNotificationsEnabled);
- LAMEXP_MAKE_OPTION_B(dropBoxWidgetEnabled);
- LAMEXP_MAKE_OPTION_B(shellIntegrationEnabled);
- LAMEXP_MAKE_OPTION_S(currentLanguage);
- LAMEXP_MAKE_OPTION_S(currentLanguageFile);
- LAMEXP_MAKE_OPTION_I(lameAlgoQuality);
- LAMEXP_MAKE_OPTION_I(lameChannelMode);
- LAMEXP_MAKE_OPTION_B(forceStereoDownmix);
- LAMEXP_MAKE_OPTION_B(bitrateManagementEnabled);
- LAMEXP_MAKE_OPTION_I(bitrateManagementMinRate);
- LAMEXP_MAKE_OPTION_I(bitrateManagementMaxRate);
- LAMEXP_MAKE_OPTION_I(samplingRate);
- LAMEXP_MAKE_OPTION_B(neroAACEnable2Pass);
- LAMEXP_MAKE_OPTION_I(aacEncProfile);
- LAMEXP_MAKE_OPTION_I(aftenAudioCodingMode);
- LAMEXP_MAKE_OPTION_I(aftenDynamicRangeCompression);
- LAMEXP_MAKE_OPTION_B(aftenFastBitAllocation);
- LAMEXP_MAKE_OPTION_I(aftenExponentSearchSize);
- LAMEXP_MAKE_OPTION_I(opusOptimizeFor);
- LAMEXP_MAKE_OPTION_I(opusComplexity);
- LAMEXP_MAKE_OPTION_I(opusFramesize);
- LAMEXP_MAKE_OPTION_B(opusDisableResample);
- LAMEXP_MAKE_OPTION_B(normalizationFilterEnabled);
- LAMEXP_MAKE_OPTION_I(normalizationFilterMaxVolume);
- LAMEXP_MAKE_OPTION_I(normalizationFilterEqualizationMode);
- LAMEXP_MAKE_OPTION_I(toneAdjustBass);
- LAMEXP_MAKE_OPTION_I(toneAdjustTreble);
- LAMEXP_MAKE_OPTION_S(customParametersLAME);
- LAMEXP_MAKE_OPTION_S(customParametersOggEnc);
- LAMEXP_MAKE_OPTION_S(customParametersAacEnc);
- LAMEXP_MAKE_OPTION_S(customParametersAften);
- LAMEXP_MAKE_OPTION_S(customParametersFLAC);
- LAMEXP_MAKE_OPTION_S(customParametersOpus);
- LAMEXP_MAKE_OPTION_B(renameOutputFilesEnabled);
- LAMEXP_MAKE_OPTION_S(renameOutputFilesPattern);
- LAMEXP_MAKE_OPTION_I(overwriteMode);
- LAMEXP_MAKE_OPTION_U(metaInfoPosition);
- LAMEXP_MAKE_OPTION_U(maximumInstances);
- LAMEXP_MAKE_OPTION_S(customTempPath);
- LAMEXP_MAKE_OPTION_B(customTempPathEnabled);
- LAMEXP_MAKE_OPTION_B(slowStartup);
- LAMEXP_MAKE_OPTION_S(mostRecentInputPath);
- LAMEXP_MAKE_OPTION_B(hibernateComputer);
+ LAMEXP_MAKE_OPTION_I(aacEncProfile)
+ LAMEXP_MAKE_OPTION_I(aftenAudioCodingMode)
+ LAMEXP_MAKE_OPTION_I(aftenDynamicRangeCompression)
+ LAMEXP_MAKE_OPTION_I(aftenExponentSearchSize)
+ LAMEXP_MAKE_OPTION_B(aftenFastBitAllocation)
+ LAMEXP_MAKE_OPTION_B(antivirNotificationsEnabled)
+ LAMEXP_MAKE_OPTION_B(autoUpdateCheckBeta)
+ LAMEXP_MAKE_OPTION_B(autoUpdateEnabled)
+ LAMEXP_MAKE_OPTION_S(autoUpdateLastCheck)
+ LAMEXP_MAKE_OPTION_B(bitrateManagementEnabled)
+ LAMEXP_MAKE_OPTION_I(bitrateManagementMaxRate)
+ LAMEXP_MAKE_OPTION_I(bitrateManagementMinRate)
+ LAMEXP_MAKE_OPTION_I(compressionBitrateAacEnc)
+ LAMEXP_MAKE_OPTION_I(compressionBitrateAften)
+ LAMEXP_MAKE_OPTION_I(compressionBitrateDcaEnc)
+ LAMEXP_MAKE_OPTION_I(compressionBitrateLAME)
+ LAMEXP_MAKE_OPTION_I(compressionBitrateOggEnc)
+ LAMEXP_MAKE_OPTION_I(compressionBitrateOpusEnc)
+ LAMEXP_MAKE_OPTION_I(compressionEncoder)
+ LAMEXP_MAKE_OPTION_I(compressionRCModeAacEnc)
+ LAMEXP_MAKE_OPTION_I(compressionRCModeAften)
+ LAMEXP_MAKE_OPTION_I(compressionRCModeLAME)
+ LAMEXP_MAKE_OPTION_I(compressionRCModeOggEnc)
+ LAMEXP_MAKE_OPTION_I(compressionRCModeOpusEnc)
+ LAMEXP_MAKE_OPTION_I(compressionVbrLevelAacEnc)
+ LAMEXP_MAKE_OPTION_I(compressionVbrLevelAften)
+ LAMEXP_MAKE_OPTION_I(compressionVbrLevelFLAC)
+ LAMEXP_MAKE_OPTION_I(compressionVbrLevelLAME)
+ LAMEXP_MAKE_OPTION_I(compressionVbrLevelOggEnc)
+ LAMEXP_MAKE_OPTION_B(createPlaylist)
+ LAMEXP_MAKE_OPTION_S(currentLanguage)
+ LAMEXP_MAKE_OPTION_S(currentLanguageFile)
+ LAMEXP_MAKE_OPTION_S(customParametersAacEnc)
+ LAMEXP_MAKE_OPTION_S(customParametersAften)
+ LAMEXP_MAKE_OPTION_S(customParametersFLAC)
+ LAMEXP_MAKE_OPTION_S(customParametersLAME)
+ LAMEXP_MAKE_OPTION_S(customParametersOggEnc)
+ LAMEXP_MAKE_OPTION_S(customParametersOpus)
+ LAMEXP_MAKE_OPTION_S(customTempPath)
+ LAMEXP_MAKE_OPTION_B(customTempPathEnabled)
+ LAMEXP_MAKE_OPTION_B(dropBoxWidgetEnabled)
+ LAMEXP_MAKE_OPTION_S(favoriteOutputFolders)
+ LAMEXP_MAKE_OPTION_B(forceStereoDownmix)
+ LAMEXP_MAKE_OPTION_B(hibernateComputer)
+ LAMEXP_MAKE_OPTION_I(interfaceStyle)
+ LAMEXP_MAKE_OPTION_I(lameAlgoQuality)
+ LAMEXP_MAKE_OPTION_I(lameChannelMode)
+ LAMEXP_MAKE_OPTION_I(licenseAccepted)
+ LAMEXP_MAKE_OPTION_U(maximumInstances)
+ LAMEXP_MAKE_OPTION_U(metaInfoPosition)
+ LAMEXP_MAKE_OPTION_S(mostRecentInputPath)
+ LAMEXP_MAKE_OPTION_B(neroAACEnable2Pass)
+ LAMEXP_MAKE_OPTION_B(neroAacNotificationsEnabled)
+ LAMEXP_MAKE_OPTION_B(normalizationFilterEnabled)
+ LAMEXP_MAKE_OPTION_I(normalizationFilterEqualizationMode)
+ LAMEXP_MAKE_OPTION_I(normalizationFilterMaxVolume)
+ LAMEXP_MAKE_OPTION_I(opusComplexity)
+ LAMEXP_MAKE_OPTION_B(opusDisableResample)
+ LAMEXP_MAKE_OPTION_I(opusFramesize)
+ LAMEXP_MAKE_OPTION_I(opusOptimizeFor)
+ LAMEXP_MAKE_OPTION_S(outputDir)
+ LAMEXP_MAKE_OPTION_B(outputToSourceDir)
+ LAMEXP_MAKE_OPTION_I(overwriteMode)
+ LAMEXP_MAKE_OPTION_B(prependRelativeSourcePath)
+ LAMEXP_MAKE_OPTION_B(renameOutputFilesEnabled)
+ LAMEXP_MAKE_OPTION_S(renameOutputFilesPattern)
+ LAMEXP_MAKE_OPTION_I(samplingRate)
+ LAMEXP_MAKE_OPTION_B(shellIntegrationEnabled)
+ LAMEXP_MAKE_OPTION_B(slowStartup)
+ LAMEXP_MAKE_OPTION_B(soundsEnabled)
+ LAMEXP_MAKE_OPTION_I(toneAdjustBass)
+ LAMEXP_MAKE_OPTION_I(toneAdjustTreble)
+ LAMEXP_MAKE_OPTION_B(writeMetaTags)
//Misc
void validate(void);