Merge pull request #1 from lordmulder/master

1
This commit is contained in:
456vv 2014-05-20 11:49:56 +08:00
commit c96b79bb8a
63 changed files with 2298 additions and 2361 deletions

View File

@ -88,7 +88,7 @@
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>qtmaind.lib;QtCored4.lib;QtGuid4.lib;Winmm.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2010.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>qtmaind.lib;QtCored4.lib;QtGuid4.lib;Winmm.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2010.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
@ -144,7 +144,7 @@ copy /Y "$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\bin\Win32\*.manifes
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>qtmain.lib;QtCore4.lib;QtGui4.lib;Winmm.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;Psapi.lib;QKeccakHash_VS2010.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>qtmain.lib;QtCore4.lib;QtGui4.lib;Winmm.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;Psapi.lib;QKeccakHash_VS2010.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ShowProgress>LinkVerboseLib</ShowProgress> <ShowProgress>LinkVerboseLib</ShowProgress>
<Version> <Version>
</Version> </Version>
@ -216,10 +216,9 @@ del "$(TargetDir)imageformats\q???d4.dll"
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>qtmain.lib;QtCore.lib;QtGui.lib;QtSvg.lib;qsvg.lib;qico.lib;qtga.lib;Winmm.lib;imm32.lib;ws2_32.lib;Shlwapi.lib;Wininet.lib;PowrProf.lib;Psapi.lib;QKeccakHash_VS2010.lib;EncodePointer.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>qtmain.lib;QtCore.lib;QtGui.lib;QtSvg.lib;qsvg.lib;qico.lib;qtga.lib;Winmm.lib;imm32.lib;ws2_32.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;Psapi.lib;QKeccakHash_VS2010.lib;EncodePointer.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ShowProgress>LinkVerboseLib</ShowProgress> <ShowProgress>LinkVerboseLib</ShowProgress>
<AdditionalLibraryDirectories>$(SolutionDir)\etc\Prerequisites\z_old\qt4_static.VS2010\lib;$(SolutionDir)\etc\Prerequisites\z_old\qt4_static.VS2010\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\EncodePointer\lib;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(SolutionDir)\etc\Prerequisites\qt4_static.VS2010\lib;$(SolutionDir)\etc\Prerequisites\qt4_static.VS2010\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\EncodePointer\lib;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
<AssemblyDebug> <AssemblyDebug>
</AssemblyDebug> </AssemblyDebug>
@ -282,6 +281,7 @@ del "$(TargetDir)imageformats\q???d4.dll"
<ClCompile Include="src\Encoder_AC3.cpp" /> <ClCompile Include="src\Encoder_AC3.cpp" />
<ClCompile Include="src\Encoder_DCA.cpp" /> <ClCompile Include="src\Encoder_DCA.cpp" />
<ClCompile Include="src\Encoder_FLAC.cpp" /> <ClCompile Include="src\Encoder_FLAC.cpp" />
<ClCompile Include="src\Encoder_MAC.cpp" />
<ClCompile Include="src\Encoder_MP3.cpp" /> <ClCompile Include="src\Encoder_MP3.cpp" />
<ClCompile Include="src\Encoder_Opus.cpp" /> <ClCompile Include="src\Encoder_Opus.cpp" />
<ClCompile Include="src\Encoder_Vorbis.cpp" /> <ClCompile Include="src\Encoder_Vorbis.cpp" />
@ -292,7 +292,12 @@ del "$(TargetDir)imageformats\q???d4.dll"
<ClCompile Include="src\Filter_Resample.cpp" /> <ClCompile Include="src\Filter_Resample.cpp" />
<ClCompile Include="src\Filter_ToneAdjust.cpp" /> <ClCompile Include="src\Filter_ToneAdjust.cpp" />
<ClCompile Include="src\Genres.cpp" /> <ClCompile Include="src\Genres.cpp" />
<ClCompile Include="src\Global.cpp" /> <ClCompile Include="src\Global_IPC.cpp" />
<ClCompile Include="src\Global_Tools.cpp" />
<ClCompile Include="src\Global_Utils.cpp" />
<ClCompile Include="src\Global_Version.cpp" />
<ClCompile Include="src\Global_Win32.cpp" />
<ClCompile Include="src\Global_Zero.cpp" />
<ClCompile Include="src\JobObject.cpp" /> <ClCompile Include="src\JobObject.cpp" />
<ClCompile Include="src\LockedFile.cpp" /> <ClCompile Include="src\LockedFile.cpp" />
<ClCompile Include="src\Main.cpp" /> <ClCompile Include="src\Main.cpp" />
@ -308,6 +313,7 @@ del "$(TargetDir)imageformats\q???d4.dll"
<ClCompile Include="src\Registry_Decoder.cpp" /> <ClCompile Include="src\Registry_Decoder.cpp" />
<ClCompile Include="src\Registry_Encoder.cpp" /> <ClCompile Include="src\Registry_Encoder.cpp" />
<ClCompile Include="src\ShellIntegration.cpp" /> <ClCompile Include="src\ShellIntegration.cpp" />
<ClCompile Include="src\Thread_CheckUpdate.cpp" />
<ClCompile Include="src\Thread_CPUObserver.cpp" /> <ClCompile Include="src\Thread_CPUObserver.cpp" />
<ClCompile Include="src\Thread_CueSplitter.cpp" /> <ClCompile Include="src\Thread_CueSplitter.cpp" />
<ClCompile Include="src\Thread_DiskObserver.cpp" /> <ClCompile Include="src\Thread_DiskObserver.cpp" />
@ -340,6 +346,7 @@ del "$(TargetDir)imageformats\q???d4.dll"
<ClCompile Include="tmp\MOC_Encoder_AC3.cpp" /> <ClCompile Include="tmp\MOC_Encoder_AC3.cpp" />
<ClCompile Include="tmp\MOC_Encoder_DCA.cpp" /> <ClCompile Include="tmp\MOC_Encoder_DCA.cpp" />
<ClCompile Include="tmp\MOC_Encoder_FLAC.cpp" /> <ClCompile Include="tmp\MOC_Encoder_FLAC.cpp" />
<ClCompile Include="tmp\MOC_Encoder_MAC.cpp" />
<ClCompile Include="tmp\MOC_Encoder_MP3.cpp" /> <ClCompile Include="tmp\MOC_Encoder_MP3.cpp" />
<ClCompile Include="tmp\MOC_Encoder_Opus.cpp" /> <ClCompile Include="tmp\MOC_Encoder_Opus.cpp" />
<ClCompile Include="tmp\MOC_Encoder_Vorbis.cpp" /> <ClCompile Include="tmp\MOC_Encoder_Vorbis.cpp" />
@ -352,6 +359,7 @@ del "$(TargetDir)imageformats\q???d4.dll"
<ClCompile Include="tmp\MOC_Model_Progress.cpp" /> <ClCompile Include="tmp\MOC_Model_Progress.cpp" />
<ClCompile Include="tmp\MOC_Registry_Decoder.cpp" /> <ClCompile Include="tmp\MOC_Registry_Decoder.cpp" />
<ClCompile Include="tmp\MOC_ShellIntegration.cpp" /> <ClCompile Include="tmp\MOC_ShellIntegration.cpp" />
<ClCompile Include="tmp\MOC_Thread_CheckUpdate.cpp" />
<ClCompile Include="tmp\MOC_Thread_CPUObserver.cpp" /> <ClCompile Include="tmp\MOC_Thread_CPUObserver.cpp" />
<ClCompile Include="tmp\MOC_Thread_CueSplitter.cpp" /> <ClCompile Include="tmp\MOC_Thread_CueSplitter.cpp" />
<ClCompile Include="tmp\MOC_Thread_DiskObserver.cpp" /> <ClCompile Include="tmp\MOC_Thread_DiskObserver.cpp" />
@ -369,9 +377,15 @@ del "$(TargetDir)imageformats\q???d4.dll"
<ClCompile Include="tmp\QRC_Icons.cpp" /> <ClCompile Include="tmp\QRC_Icons.cpp" />
<ClCompile Include="tmp\QRC_Images.cpp" /> <ClCompile Include="tmp\QRC_Images.cpp" />
<ClCompile Include="tmp\QRC_Localization.cpp" /> <ClCompile Include="tmp\QRC_Localization.cpp" />
<ClCompile Include="tmp\QRC_Sounds.cpp" />
<ClCompile Include="tmp\QRC_Tools_Decd.cpp" /> <ClCompile Include="tmp\QRC_Tools_Decd.cpp" />
<ClCompile Include="tmp\QRC_Tools_Encd.cpp" /> <ClCompile Include="tmp\QRC_Tools_Encd_A.cpp" />
<ClCompile Include="tmp\QRC_Tools_Misc.cpp" /> <ClCompile Include="tmp\QRC_Tools_Encd_B.cpp" />
<ClCompile Include="tmp\QRC_Tools_Encd_C.cpp" />
<ClCompile Include="tmp\QRC_Tools_Encd_D.cpp" />
<ClCompile Include="tmp\QRC_Tools_Misc_A.cpp" />
<ClCompile Include="tmp\QRC_Tools_Misc_B.cpp" />
<ClCompile Include="tmp\QRC_Tools_Misc_C.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="etc\Prerequisites\strnatcmp\include\strnatcmp.h" /> <ClInclude Include="etc\Prerequisites\strnatcmp\include\strnatcmp.h" />
@ -511,8 +525,30 @@ del "$(TargetDir)imageformats\q???d4.dll"
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild> </CustomBuild>
<ClInclude Include="src\Decoder_Opus.h" /> <ClInclude Include="src\Decoder_Opus.h" />
<CustomBuild Include="src\Encoder_MAC.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MOC "$(SolutionDir)tmp\MOC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">MOC "$(SolutionDir)tmp\MOC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MOC "$(SolutionDir)tmp\MOC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<ClInclude Include="src\JobObject.h" /> <ClInclude Include="src\JobObject.h" />
<ClInclude Include="src\Registry_Encoder.h" /> <ClInclude Include="src\Registry_Encoder.h" />
<CustomBuild Include="src\Thread_CheckUpdate.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MOC "$(SolutionDir)tmp\MOC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">MOC "$(SolutionDir)tmp\MOC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MOC "$(SolutionDir)tmp\MOC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<ClInclude Include="src\Tools.h" /> <ClInclude Include="src\Tools.h" />
<CustomBuild Include="src\Tool_WaveProperties.h"> <CustomBuild Include="src\Tool_WaveProperties.h">
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command>
@ -1013,17 +1049,14 @@ del "$(TargetDir)imageformats\q???d4.dll"
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message> <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"
</Command> </Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)\res\localization\LameXP_DE.qm;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message> <Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" <Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"
</Command> </Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(ProjectDir)\res\localization\LameXP_DE.qm;%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message> <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)" <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"
</Command> </Command>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalInputs)</AdditionalInputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild> </CustomBuild>
<CustomBuild Include="gui\CueSheetImport.ui"> <CustomBuild Include="gui\CueSheetImport.ui">
@ -1173,29 +1206,101 @@ del "$(TargetDir)imageformats\q???d4.dll"
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message> <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
</CustomBuild> </CustomBuild>
<CustomBuild Include="res\Tools_Encd.qrc"> <CustomBuild Include="res\Tools_Encd_A.qrc">
<FileType>Document</FileType> <FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild> </CustomBuild>
<CustomBuild Include="res\Tools_Misc.qrc"> <CustomBuild Include="res\Tools_Encd_B.qrc">
<FileType>Document</FileType> <FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command> <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="res\Tools_Encd_C.qrc">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="res\Tools_Encd_D.qrc">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="res\Tools_Misc_A.qrc">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="res\Tools_Misc_B.qrc">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="res\Tools_Misc_C.qrc">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="res\Sounds.qrc">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\QRC_%(Filename).cpp" -name "%(Filename)" "%(FullPath)"</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\QRC_%(Filename).cpp"</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\QRC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild> </CustomBuild>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,9 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<ClCompile Include="src\Global.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Main.cpp"> <ClCompile Include="src\Main.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
@ -316,12 +313,6 @@
<ClCompile Include="tmp\QRC_Tools_Decd.cpp"> <ClCompile Include="tmp\QRC_Tools_Decd.cpp">
<Filter>Generated Files\QRC</Filter> <Filter>Generated Files\QRC</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="tmp\QRC_Tools_Encd.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="tmp\QRC_Tools_Misc.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="src\Thread_CPUObserver.cpp"> <ClCompile Include="src\Thread_CPUObserver.cpp">
<Filter>Source Files\Threads</Filter> <Filter>Source Files\Threads</Filter>
</ClCompile> </ClCompile>
@ -379,6 +370,60 @@
<ClCompile Include="src\JobObject.cpp"> <ClCompile Include="src\JobObject.cpp">
<Filter>Source Files\Misc</Filter> <Filter>Source Files\Misc</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="tmp\QRC_Tools_Encd_A.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="tmp\QRC_Tools_Encd_B.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="tmp\QRC_Tools_Encd_C.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="tmp\QRC_Tools_Encd_D.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="tmp\QRC_Tools_Misc_A.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="tmp\QRC_Tools_Misc_B.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="tmp\QRC_Tools_Misc_C.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="src\Global_IPC.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Global_Tools.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Global_Utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Global_Version.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Global_Win32.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Global_Zero.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\Thread_CheckUpdate.cpp">
<Filter>Source Files\Threads</Filter>
</ClCompile>
<ClCompile Include="tmp\MOC_Thread_CheckUpdate.cpp">
<Filter>Generated Files\MOC</Filter>
</ClCompile>
<ClCompile Include="src\Encoder_MAC.cpp">
<Filter>Source Files\Encoders</Filter>
</ClCompile>
<ClCompile Include="tmp\MOC_Encoder_MAC.cpp">
<Filter>Generated Files\MOC</Filter>
</ClCompile>
<ClCompile Include="tmp\QRC_Sounds.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="src\Config.h"> <ClInclude Include="src\Config.h">
@ -668,12 +713,6 @@
<CustomBuild Include="src\Encoder_AAC_FHG.h"> <CustomBuild Include="src\Encoder_AAC_FHG.h">
<Filter>Header Files\Encoders</Filter> <Filter>Header Files\Encoders</Filter>
</CustomBuild> </CustomBuild>
<CustomBuild Include="res\Tools_Encd.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools_Misc.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools_Decd.qrc"> <CustomBuild Include="res\Tools_Decd.qrc">
<Filter>Resources</Filter> <Filter>Resources</Filter>
</CustomBuild> </CustomBuild>
@ -704,6 +743,36 @@
<CustomBuild Include="gui\AboutDialog.ui"> <CustomBuild Include="gui\AboutDialog.ui">
<Filter>Dialogs</Filter> <Filter>Dialogs</Filter>
</CustomBuild> </CustomBuild>
<CustomBuild Include="res\Tools_Misc_B.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools_Misc_A.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools_Encd_D.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools_Encd_C.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools_Encd_B.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools_Misc_C.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools_Encd_A.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="src\Thread_CheckUpdate.h">
<Filter>Header Files\Threads</Filter>
</CustomBuild>
<CustomBuild Include="src\Encoder_MAC.h">
<Filter>Header Files\Encoders</Filter>
</CustomBuild>
<CustomBuild Include="res\Sounds.qrc">
<Filter>Resources</Filter>
</CustomBuild>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="res\MainIcon.ico" /> <None Include="res\MainIcon.ico" />

View File

@ -90,7 +90,7 @@
<OpenMPSupport>false</OpenMPSupport> <OpenMPSupport>false</OpenMPSupport>
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>QtCored4.lib;QtGuid4.lib;Winmm.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2013.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>QtCored4.lib;QtGuid4.lib;Winmm.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2013.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(QTDIR)\lib;$(QTDIR)\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
@ -154,7 +154,7 @@ copy /Y "$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\bin\Win32\*.manifes
<ProgramDataBaseFileName /> <ProgramDataBaseFileName />
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>QtCore4.lib;QtGui4.lib;Winmm.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2013.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>QtCore4.lib;QtGui4.lib;Winmm.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2013.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ShowProgress>LinkVerboseLib</ShowProgress> <ShowProgress>LinkVerboseLib</ShowProgress>
<Version> <Version>
@ -234,10 +234,10 @@ del "$(TargetDir)imageformats\q???d4.dll"
<ProgramDataBaseFileName /> <ProgramDataBaseFileName />
</ClCompile> </ClCompile>
<Link> <Link>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type=%27win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27 processorArchitecture=%27*%27" %(AdditionalOptions)</AdditionalOptions> <AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>QtCore.lib;QtGui.lib;QtSvg.lib;qtmain.lib;qsvg.lib;qico.lib;qtga.lib;Winmm.lib;imm32.lib;ws2_32.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2013.lib;EncodePointer.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>QtCore.lib;QtGui.lib;QtSvg.lib;qtmain.lib;qsvg.lib;qico.lib;qtga.lib;Winmm.lib;imm32.lib;ws2_32.lib;Shlwapi.lib;Sensapi.lib;PowrProf.lib;psapi.lib;QKeccakHash_VS2013.lib;EncodePointer.lib;%(AdditionalDependencies)</AdditionalDependencies>
<ShowProgress>LinkVerboseLib</ShowProgress> <ShowProgress>LinkVerboseLib</ShowProgress>
<AdditionalLibraryDirectories>$(SolutionDir)\etc\Prerequisites\qt4_static.VS2013\lib;$(SolutionDir)\etc\Prerequisites\qt4_static.VS2013\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\EncodePointer\lib;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> <AdditionalLibraryDirectories>$(SolutionDir)\etc\Prerequisites\qt4_static\lib;$(SolutionDir)\etc\Prerequisites\qt4_static\plugins\imageformats;$(SolutionDir)\etc\Prerequisites\EncodePointer\lib;$(SolutionDir)\etc\Prerequisites\VisualLeakDetector\lib\Win32;$(SolutionDir)\etc\Prerequisites\keccak\lib\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> <IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>false</GenerateDebugInformation> <GenerateDebugInformation>false</GenerateDebugInformation>
<AssemblyDebug> <AssemblyDebug>

View File

@ -564,9 +564,6 @@
<ClInclude Include="etc\Prerequisites\strnatcmp\include\strnatcmp.h"> <ClInclude Include="etc\Prerequisites\strnatcmp\include\strnatcmp.h">
<Filter>Header Files\Misc\3rd Party</Filter> <Filter>Header Files\Misc\3rd Party</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="src\Encoder_MAC.h">
<Filter>Header Files\Encoders</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<CustomBuild Include="gui\DropBox.ui"> <CustomBuild Include="gui\DropBox.ui">
@ -776,6 +773,9 @@
<CustomBuild Include="src\Thread_CheckUpdate.h"> <CustomBuild Include="src\Thread_CheckUpdate.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</CustomBuild> </CustomBuild>
<CustomBuild Include="src\Encoder_MAC.h">
<Filter>Header Files\Encoders</Filter>
</CustomBuild>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="ReadMe.txt" /> <None Include="ReadMe.txt" />

View File

@ -17,7 +17,17 @@ a:visited { color: #0000EE; }
<body> <body>
<h3>LameXP - Version History</h3><br> <h3>LameXP - Version History</h3><br>
<a name="4.09"></a>Changes between v4.08 and v4.09 [<font color="darkred">unreleased</font>]:<br><ul> <a name="4.10"></a>Changes between v4.09 and v4.10 [<font color="darkred">unreleased</font>]:<br><ul>
<li>Upgraded build environment to Microsoft Visual Studio 2013 with Update-2
<li>Updated Qt runtime libraries to v4.8.6 (2014-04-25), compiled with MSVC 12.0
<li>Updated Opus libraries v1.1.x and Opus-Tools v0.1.8 to latest Git Master (2014-04-13)
<li>Updated MediaInfo to v0.7.69 (2014-04-26), compiled with ICL 14.0 and MSVC 12.0
<li>Updated mpg123 decoder to v1.19.0 (2014-03-08), compiled with GCC 4.8.2
<li>Fixed a bug that could cause the cover artwork to be lost under certain circumstances
<li>Added command-line options to adjust the LameXP font size (see <a href="FAQ.html#c8870a0a" target="_blank">FAQ doc</a> for details)
</ul><br>
<a name="4.09"></a>Changes between v4.08 and v4.09 [2014-01-26]:<br><ul>
<li>Upgraded build environment to Microsoft Visual Studio 2013 RTM <li>Upgraded build environment to Microsoft Visual Studio 2013 RTM
<li>Complete overhaul of the file analyzer, resulting in up to 2.5x faster file import speed <li>Complete overhaul of the file analyzer, resulting in up to 2.5x faster file import speed
<li>Reworked the application initialization code, resulting in notably faster startup speed <li>Reworked the application initialization code, resulting in notably faster startup speed
@ -33,6 +43,8 @@ a:visited { color: #0000EE; }
<li>Updated MediaInfo to v0.7.67 (2014-01-10), compiled with ICL 14.0 and MSVC 12.0 <li>Updated MediaInfo to v0.7.67 (2014-01-10), compiled with ICL 14.0 and MSVC 12.0
<li>Updated GNU Wget binary to v1.14.0 (2012-08-05), compiled with GCC 4.8.1 <li>Updated GNU Wget binary to v1.14.0 (2012-08-05), compiled with GCC 4.8.1
<li>Updated GnuPG to v1.4.16 (2013-12-13), compiled with GCC 4.8.1 <li>Updated GnuPG to v1.4.16 (2013-12-13), compiled with GCC 4.8.1
<li>Updated the QAAC add-in for LameXP to QAAC v2.33 (2014-01-14), compiled with MSVC 12.0
<li>Updated language files (big thank-you to all contributors !!!)
<li>Fixed a resource (file descriptor) leak in "static" builds, didn't cause much harm though <li>Fixed a resource (file descriptor) leak in "static" builds, didn't cause much harm though
<li>Various bugfixes and code improvements <li>Various bugfixes and code improvements
</ul><br> </ul><br>

View File

@ -41,6 +41,7 @@ a:visited { color: #0000EE; }
<li><a href="#df406578">The LameXP startup (splash screen) takes very long on my system. What can I do?</a> <li><a href="#df406578">The LameXP startup (splash screen) takes very long on my system. What can I do?</a>
<li><a href="#a923d407">Why is there a time limit (expiration) in my version of LameXP?</a> <li><a href="#a923d407">Why is there a time limit (expiration) in my version of LameXP?</a>
<li><a href="#900a2a6c">Is there a way to hide/show the LameXP console ("DOS Box") window?</a> <li><a href="#900a2a6c">Is there a way to hide/show the LameXP console ("DOS Box") window?</a>
<li><a href="#c8870a0a">How can I change the font size in the LameXP window?</a>
<li><a href="#9b0a5c32">Why does application 'xyz' not open the Wave files created by LameXP?</a> <li><a href="#9b0a5c32">Why does application 'xyz' not open the Wave files created by LameXP?</a>
<li><a href="#89cbd3d0">Why does LameXP run (only) N instances/threads in parallel on my computer?</a> <li><a href="#89cbd3d0">Why does LameXP run (only) N instances/threads in parallel on my computer?</a>
<li><a href="#454e51dd">Why does LameXP try to connect to the web-server at 'xyz.com' secretly?</a> <li><a href="#454e51dd">Why does LameXP try to connect to the web-server at 'xyz.com' secretly?</a>
@ -504,8 +505,9 @@ QAAC encoder, then you have to install QuickTime v7.7.1 (or newer). Alternativel
be installed. Both, QuickTime and iTunes, can be <a href="http://www.apple.com/quicktime/download/" target="_blank">downloaded for free</a> from the official Apple web-site.<br> be installed. Both, QuickTime and iTunes, can be <a href="http://www.apple.com/quicktime/download/" target="_blank">downloaded for free</a> from the official Apple web-site.<br>
<br> <br>
In order to enable the QAAC Encoder support you will also need the 'QAAC Encoder Add-in' for LameXP:<br><ul> In order to enable the QAAC Encoder support you will also need the 'QAAC Encoder Add-in' for LameXP:<br><ul>
<li><a href="http://www.mediafire.com/file/o5is7bqporboa7b/LameXP.qaac-addin.2012-08-05.zip" target="_blank">http://www.mediafire.com/file/o5is7bqporboa7b/LameXP.qaac-addin.2012-08-05.zip</a> <li><a href="http://www.mediafire.com/download/38nv297501obvwv/LameXP.qaac-addin.2014-01-19.zip" target="_blank">http://www.mediafire.com/download/38nv297501obvwv/LameXP.qaac-addin.2014-01-19.zip</a>
<li><a href="http://muldersoft.com/misc/lamexp/add-ins/LameXP.qaac-addin.2012-08-05.zip" target="_blank">http://muldersoft.com/misc/lamexp/add-ins/LameXP.qaac-addin.2012-08-05.zip</a></ul> <li><a href="http://sf.net/projects/lamexp/files/Miscellaneous/Add-ins/qaac/LameXP.qaac-addin.2014-01-19.zip/download" target="_blank">http://sf.net/projects/lamexp/files/Miscellaneous/Add-ins/qaac/LameXP.qaac-addin.2014-01-19.zip</a>
<li><a href="http://muldersoft.com/misc/lamexp/add-ins/LameXP.qaac-addin.2014-01-19.zip" target="_blank">http://muldersoft.com/misc/lamexp/add-ins/LameXP.qaac-addin.2014-01-19.zip</a></ul>
<br> <br>
Please follow the install instructions that are included with the 'QAAC Encoder Add-in' download package!<br> Please follow the install instructions that are included with the 'QAAC Encoder Add-in' download package!<br>
Note that you do NOT need to install this Add-in, if you only want to use the Nero AAC Encoder.<br> Note that you do NOT need to install this Add-in, if you only want to use the Nero AAC Encoder.<br>
@ -514,13 +516,15 @@ Note that you do NOT need to install this Add-in, if you only want to use the Ne
FHG AAC Encoder<br> FHG AAC Encoder<br>
<br> <br>
Optionally LameXP also supports the FHG AAC Encoder now. Just like the Nero encoder, the FHG encoder can NOT<br> Optionally LameXP also supports the FHG AAC Encoder now. Just like the Nero encoder, the FHG encoder can NOT<br>
be redistributed along with LameXP. However the FHG AAC Encoder is included with Winamp v5.62, which is<br> be redistributed along with LameXP. However the FHG AAC Encoder is included with Winamp (v5.62+), which is<br>
available as a free download (you don't need to buy the "Pro" version!) from the official Winamp web-site at:<br><ul> available as a free download (you don't need to buy the "Pro" version!) from the official Winamp web-site at:<br><ul>
<li><a href="http://www.winamp.com/media-player/" target="_blank">http://www.winamp.com/media-player/</a> <li><a href="http://www.winamp.com/media-player/en" target="_blank">http://www.winamp.com/media-player/en</a>
<li><a href="http://download.nullsoft.com/winamp/client/winamp5623_full_emusic-7plus_all.exe" target="_blank">http://download.nullsoft.com/winamp/client/winamp5623_full_emusic-7plus_all.exe</a></ul> <li><a href="http://download.nullsoft.com/winamp/client/winamp5666_full_en-us.exe" target="_blank">http://download.nullsoft.com/winamp/client/winamp5666_full_en-us.exe</a>
<li><a href="http://www.free-codecs.com/winamp_download.htm" target="_blank">http://www.free-codecs.com/winamp_download.htm</a></ul>
<br> <br>
In order to enable the FHG AAC Encoder support you will also need the 'FHG AAC Encoder Add-in' for LameXP:<br><ul> In order to enable the FHG AAC Encoder support you will also need the 'FHG AAC Encoder Add-in' for LameXP:<br><ul>
<li><a href="http://www.mediafire.com/file/ni7w4323pqub9x3/LameXP.fhgaacenc-addin.2012-08-06.zip" target="_blank">http://www.mediafire.com/file/ni7w4323pqub9x3/LameXP.fhgaacenc-addin.2012-08-06.zip</a> <li><a href="http://www.mediafire.com/file/ni7w4323pqub9x3/LameXP.fhgaacenc-addin.2012-08-06.zip" target="_blank">http://www.mediafire.com/file/ni7w4323pqub9x3/LameXP.fhgaacenc-addin.2012-08-06.zip</a>
<li><a href="http://sf.net/projects/lamexp/files/Miscellaneous/Add-ins/fhgaac/LameXP.fhgaacenc-addin.2012-08-06.zip/download" target="_blank">http://sf.net/projects/lamexp/files/Miscellaneous/Add-ins/fhgaac/LameXP.fhgaacenc-addin.2012-08-06.zip</a>
<li><a href="http://muldersoft.com/misc/lamexp/add-ins/LameXP.fhgaacenc-addin.2012-08-06.zip" target="_blank">http://muldersoft.com/misc/lamexp/add-ins/LameXP.fhgaacenc-addin.2012-08-06.zip</a></ul> <li><a href="http://muldersoft.com/misc/lamexp/add-ins/LameXP.fhgaacenc-addin.2012-08-06.zip" target="_blank">http://muldersoft.com/misc/lamexp/add-ins/LameXP.fhgaacenc-addin.2012-08-06.zip</a></ul>
<br> <br>
Please follow the install instructions that are included with the 'FHG AAC Encoder Add-in' download package!<br> Please follow the install instructions that are included with the 'FHG AAC Encoder Add-in' download package!<br>
@ -661,6 +665,25 @@ WARNING: Any attempt to close the LameXP console window will kill the applicatio
<br><br> <br><br>
<a name="c8870a0a"></a><b>How can I change the font size in the LameXP window?</b><br>
<br>
Sometimes it may be required to adjust the font size, e.g. when working on a "high DPI" screen. The best way<br>
to adjust the font size is tweaking the DPI settings of your system. On modern Windows operating systems,<br>
this option can be found at the "Display" options at the Control Panel. Simply select, e.g., "Medium" (125%)<br>
or "Larger" (150%) to increase the size of all GUI widgets, including larger fonts. LameXP is based on Qt and<br>
therefore is fully "DPI aware". This means it will respect the system's DPI settings - without(!) blurring.<br>
<br>
In rare cases you may which to adjust the font-size only inside the LameXP window, but *not* effect any other<br>
applications. For this particular purpose, LameXP offers the following command-line options:<br>
<blockquote><table>
<tr><td><font class="code">--tiny-font </font></td><td>&nbsp;</td><td>Enforces very small font size (75%)</td></tr>
<tr><td><font class="code">--small-font</font></td><td>&nbsp;</td><td>Enforces smaller font size (87.5%)</td></tr>
<tr><td><font class="code">--big-font </font></td><td>&nbsp;</td><td>Enforces larger font size (125%)</td></tr>
<tr><td><font class="code">--huge-font </font></td><td>&nbsp;</td><td>Enforces very large font size (150%)</td></tr>
</table></blockquote>
<br><br>
<a name="9b0a5c32"></a><b>Why does application 'xyz' not open the Wave files created by LameXP?</b><br> <a name="9b0a5c32"></a><b>Why does application 'xyz' not open the Wave files created by LameXP?</b><br>
<br> <br>
Some of the decoders used in LameXP will insert an additional 'JUNK' chunk into the Wave/RIFF file, right<br> Some of the decoders used in LameXP will insert an additional 'JUNK' chunk into the Wave/RIFF file, right<br>
@ -701,7 +724,7 @@ cores, the maximum number of parallel instances is six. On systems with 16 cores
parallel instances is eight. On systems with 32 cores, the maximum number of parallel instances is eleven.<br> parallel instances is eight. On systems with 32 cores, the maximum number of parallel instances is eleven.<br>
And on systems with 64 cores, the maximum number of parallel instances is 16. 16 is the upper limit.<br> And on systems with 64 cores, the maximum number of parallel instances is 16. 16 is the upper limit.<br>
<br> <br>
<a href="http://img853.imageshack.us/img853/1428/corestoinstancesbig.png" target="_blank"><img src="http://img853.imageshack.us/img853/1428/corestoinstancesbig.th.png" border="0" alt="thumb"></a><br> <a href="http://i.imgur.com/QbS47Wi.png" target="_blank"><img src="http://i.imgur.com/QbS47Wis.png" border="1px" alt="thumb"></a><br>
<br> <br>
You may wonder why LameXP doesn't always create one instance for each CPU core. In theory, the more instances<br> You may wonder why LameXP doesn't always create one instance for each CPU core. In theory, the more instances<br>
we run in parallel, the more CPU cores can be utilized - until all CPU cores are busy and the overall CPU<br> we run in parallel, the more CPU cores can be utilized - until all CPU cores are busy and the overall CPU<br>
@ -832,7 +855,7 @@ filter will be applied in order to recover a continuous signal from these indivi
reconstructed analogue signal it is possible to have voltages that are higher than the highest digital sample<br> reconstructed analogue signal it is possible to have voltages that are higher than the highest digital sample<br>
in the audio track! This is illustrated in the following image (samples are represented as tiny squares):<br> in the audio track! This is illustrated in the following image (samples are represented as tiny squares):<br>
<br> <br>
<a target="_blank" href="http://img3.imageshack.us/img3/9153/sine0dbfs.png"><img src="http://img3.imageshack.us/img3/9153/sine0dbfs.th.png" border="0" alt="thumb"></a><br> <a target="_blank" href="http://i.imgur.com/5dmIUOZ.png"><img src="http://i.imgur.com/5dmIUOZs.png" border="1px" alt="thumb"></a><br>
<br> <br>
Consequently normalizing the sample values to 0dBFS is NOT a very good idea, as this may very well result in<br> Consequently normalizing the sample values to 0dBFS is NOT a very good idea, as this may very well result in<br>
a reconstructed analogue signal which exceeds(!) 0dBFS. And, as the analogue parts of the playback equipment<br> a reconstructed analogue signal which exceeds(!) 0dBFS. And, as the analogue parts of the playback equipment<br>
@ -959,7 +982,7 @@ switching to the 'Compatibility' tab and un-checking the 'Run this program in co
<a name="01922741"></a><b>Why do I get the error 'LameXP.exe is not a valid Win32 application' on startup?</b><br> <a name="01922741"></a><b>Why do I get the error 'LameXP.exe is not a valid Win32 application' on startup?</b><br>
<br> <br>
You are trying to run LameXP on a platform that is NOT supported, such as Windows 95, Windows 98, Windows<br> You are trying to run LameXP on a platform that is NOT supported, such as Windows 95, Windows 98, Windows<br>
Millennium Edition, Windows NT 4.0 or Windows 2000. There is nothing you can do about that, except for Millennium Edition, Windows NT 4.0 or Windows 2000. There is nothing you can do about that, except for<br>
updating to a less antiquated OS. Running an outdated and unsupported OS is a severe security risk anyway!<br> updating to a less antiquated OS. Running an outdated and unsupported OS is a severe security risk anyway!<br>
<br> <br>
Note: This error can also occur, if your system has been configured to run LameXP in <a href="#e7c9ae2b">compatibility mode</a>.<br><br> Note: This error can also occur, if your system has been configured to run LameXP in <a href="#e7c9ae2b">compatibility mode</a>.<br><br>
@ -1002,12 +1025,14 @@ Please see the guide for translators at:<br><ul>
<a name="8dba381f"></a><b>Where can I download the latest version of LameXP?</b><br> <a name="8dba381f"></a><b>Where can I download the latest version of LameXP?</b><br>
<br> <br>
The latest "official" release of LameXP can be found on the following mirrors:<br><ul> The latest "official" release of LameXP can be found on the following mirrors:<br><ul>
<li><a href="https://github.com/lordmulder/LameXP/releases/latest" target="_blank">https://github.com/lordmulder/LameXP/releases/latest</a>
<li><a href="http://sourceforge.net/projects/lamexp/files/" target="_blank">http://sourceforge.net/projects/lamexp/files/</a> <li><a href="http://sourceforge.net/projects/lamexp/files/" target="_blank">http://sourceforge.net/projects/lamexp/files/</a>
<li><a href="http://developer.berlios.de/project/showfiles.php?group_id=13288" target="_blank">http://developer.berlios.de/project/showfiles.php?group_id=13288</a> <li><a href="http://developer.berlios.de/project/showfiles.php?group_id=13288" target="_blank">http://developer.berlios.de/project/showfiles.php?group_id=13288</a>
<li><a href="https://lamexp.codeplex.com/releases/view/113532" target="_blank">https://lamexp.codeplex.com/releases/view/113532</a> <li><a href="https://lamexp.codeplex.com/releases/" target="_blank">https://lamexp.codeplex.com/releases/</a>
<li><a href="https://code.google.com/p/mulder/downloads/list" target="_blank">http://code.google.com/p/mulder/downloads/list</a>
<li><a href="https://bitbucket.org/lord_mulder/lamexp/downloads" target="_blank">https://bitbucket.org/lord_mulder/lamexp/downloads</a> <li><a href="https://bitbucket.org/lord_mulder/lamexp/downloads" target="_blank">https://bitbucket.org/lord_mulder/lamexp/downloads</a>
<li><a href="http://www.free-codecs.com/lamexp_download.htm" target="_blank">http://www.free-codecs.com/lamexp_download.htm</a></ul> <li><a href="https://www.assembla.com/spaces/lamexp/documents" target="_blank">https://www.assembla.com/spaces/lamexp/documents</a>
<li><a href="http://www.free-codecs.com/lamexp_download.htm" target="_blank">http://www.free-codecs.com/lamexp_download.htm</a>
<li><a href="http://www.videohelp.com/tools/LameXP" target="_blank">http://www.videohelp.com/tools/LameXP</a></ul>
<br><br> <br><br>
<a name="9c2e273d"></a><b>Where can I submit bug reports or feature requests?</b><br> <a name="9c2e273d"></a><b>Where can I submit bug reports or feature requests?</b><br>
@ -1033,10 +1058,11 @@ application framework and offers full Unicode support. For the time being LameXP
LameXP is developed using the <a href="http://en.wikipedia.org/wiki/Git_(software)" target="_blank">Git</a> revision control system. You can access one of the public mirrors:<br><ul> LameXP is developed using the <a href="http://en.wikipedia.org/wiki/Git_(software)" target="_blank">Git</a> revision control system. You can access one of the public mirrors:<br><ul>
<li><font class="code">git clone git://git.code.sf.net/p/lamexp/code lamexp-src</font> (<a href="http://sourceforge.net/p/lamexp/code/" target="_blank">Browse</a>) <li><font class="code">git clone git://git.code.sf.net/p/lamexp/code lamexp-src</font> (<a href="http://sourceforge.net/p/lamexp/code/" target="_blank">Browse</a>)
<li><font class="code">git clone git://git.berlios.de/lamexp lamexp-src</font> (<a href="http://git.berlios.de/cgi-bin/gitweb.cgi?p=lamexp" target="_blank">Browse</a>) <li><font class="code">git clone git://git.berlios.de/lamexp lamexp-src</font> (<a href="http://git.berlios.de/cgi-bin/gitweb.cgi?p=lamexp" target="_blank">Browse</a>)
<li><font class="code">git clone https://git01.codeplex.com/lamexp lamexp-src</font> (<a href="https://lamexp.codeplex.com/SourceControl/latest" target="_blank">Browse</a>)
<li><font class="code">git clone https://github.com/lordmulder/LameXP.git lamexp-src</font> (<a href="https://github.com/lordmulder/LameXP" target="_blank">Browse</a>) <li><font class="code">git clone https://github.com/lordmulder/LameXP.git lamexp-src</font> (<a href="https://github.com/lordmulder/LameXP" target="_blank">Browse</a>)
<li><font class="code">git clone https://git01.codeplex.com/lamexp lamexp-src</font> (<a href="https://lamexp.codeplex.com/SourceControl/latest" target="_blank">Browse</a>)
<li><font class="code">git clone https://bitbucket.org/lord_mulder/lamexp.git lamexp-src</font> (<a href="https://bitbucket.org/lord_mulder/lamexp/src" target="_blank">Browse</a>) <li><font class="code">git clone https://bitbucket.org/lord_mulder/lamexp.git lamexp-src</font> (<a href="https://bitbucket.org/lord_mulder/lamexp/src" target="_blank">Browse</a>)
<li><font class="code">git clone git://gitorious.org/lamexp/lamexp.git lamexp-src</font> (<a href="http://gitorious.org/lamexp/lamexp/trees/master" target="_blank">Browse</a>)</ul> <li><font class="code">git clone git://gitorious.org/lamexp/lamexp.git lamexp-src</font> (<a href="http://gitorious.org/lamexp/lamexp/trees/master" target="_blank">Browse</a>)
<li><font class="code">git clone git://git.assembla.com/lamexp.git lamexp-src</font> (<a href="https://www.assembla.com/code/lamexp/git/nodes" target="_blank">Browse</a>)</ul>
<br> <br>
In case you are new to Git or want to extend your knowledge, have a look at the <a href="http://git-scm.com/book/en" target="_blank">Pro Git</a> book by Scott Chacon!<br> In case you are new to Git or want to extend your knowledge, have a look at the <a href="http://git-scm.com/book/en" target="_blank">Pro Git</a> book by Scott Chacon!<br>
For Windows users, we highly recommend using <a href="http://msysgit.github.com/" target="_blank">MSYS Git</a> in conjunction with the superb <a href="http://tortoisegit.googlecode.com/" target="_blank">Tortoise Git</a> front-end.<br><br> For Windows users, we highly recommend using <a href="http://msysgit.github.com/" target="_blank">MSYS Git</a> in conjunction with the superb <a href="http://tortoisegit.googlecode.com/" target="_blank">Tortoise Git</a> front-end.<br><br>

View File

@ -27,5 +27,8 @@ Sorry, there is no LameXP user manual (yet), but we have an extensive <b><a href
Please have a look at <b><a href="FAQ.html">F.A.Q.</a></b> document, it will probably answer your question...<br> Please have a look at <b><a href="FAQ.html">F.A.Q.</a></b> document, it will probably answer your question...<br>
<br> <br>
<br> <br>
<font style="color:darkred">Note: If you are willing to contribute an in-depth LameXP manual, then please contact us!</font><br>
<br>
<br>
eof eof
</body></html> </body></html>

View File

@ -13,20 +13,34 @@ a:visited { color: #0000EE; }
</style> </style>
</head> </head>
<body> <body>
<!-- ============================= -->
<h1>Howto: Translate LameXP</h1> <h1>Howto: Translate LameXP</h1>
<p><b>If you are willing to contribute a new LameXP v4.xx translation or update/fix an existing translation, then this guide will help you to do so :-)</b></p> <p><b>If you are willing to contribute a new LameXP v4.xx translation or improve an existing translation, then this guide will help you to do so :-)</b></p>
<br> <br>
<img src="http://lamexp.sourceforge.net/lamexp.png" alt="Screenshot"><br> <img src="http://lamexp.sourceforge.net/lamexp.png" alt="Screenshot"><br>
<br> <br>
<h3>Prerequisites:</h3> <!-- ============================= -->
<p>LameXP v4.xx is a complete re-write of LameXP. This time LameXP is developed in C++ and it is based on the <a href="http://qt.nokia.com/products/" target="_blank">Qt</a> cross-platform application framework. The good news for translators is that Qt provides <i>full Unicode support</i>, which was also one of the main reasons for the re-write. Consequently there will be no more headache with different Codepages! Furthermore the Qt framework provides a sophisticated translation system, which allows for easy internationalization and localization. There even is an easy-to-use graphical tool for translating Qt application, the <a href="http://doc.qt.nokia.com/latest/linguist-manual.html" target="_blank">Qt Linguist</a>. So before you start translating, you should make yourself familiar with the <i>Qt Linguist</i> application. As a translator, having a quick look at the <a href="http://doc.qt.nokia.com/latest/linguist-translators.html" target="_blank">guide for translators</a> is sufficient.</p> <h3>Introduction:</h3>
<p>You can download <i>Qt Linguist</i> as a part of the "Qt SDK" or the "Qt libraries", which are available as a free download from the <a href="http://qt-project.org/downloads" target="_blank">Qt download site</a>. We recommend picking the "Qt SDK" and download the "Online installer" (&sim;15 MB), but you do <b>not</b> need to worry about a "commercial" license. In the Qt SDK Setup wizard, make sure you select the "Custom" install type. Then un-check all components, except for "Qt SDK" &rArr; "Development Tools" &rArr; "Qt Liguist". Alternatively, if you don't want to install the Qt SDK on your computer, you can find Qt Linguist for Windows as a <i>stand-alone</i> download at <a href="http://sourceforge.net/projects/lamexp/files/Miscellaneous/Qt%20Linguist/" target="_blank"><b>this</b></a> location (only &sim;4 MB). This stand-alone version of Linguist has been built using <i>static</i> Qt libraries and thus should work "out of the box" <i>without</i> any dependencies - just unzip the ZIP file and run the "linguist.exe" file.</p> <p>LameXP v4.xx is a complete re-write of LameXP. This time LameXP is developed in C++ and it is based on the <a href="http://qt-project.org/" target="_blank"><b>Qt</b></a> cross-platform application framework. The good news for translators is that Qt provides <i>full Unicode support</i>, which was also one of the main reasons for the re-write. Consequently there will be <b>no</b> more headache with different Codepages! Furthermore the Qt framework provides a sophisticated <i>translation system</i>, which allows for easy internationalization and localization. There even is an easy-to-use <i>graphical tool</i> for translating Qt application, which is called <b>Qt Linguist</b>. Consequently, before you start translating, you should make yourself familiar with the <i>Qt Linguist</i> application. As a translator, having a quick look at the <a href="http://qt-project.org/doc/qt-4.8/linguist-translators.html" target="_blank"><i>Qt Linguist manual for translators</i></a> should be sufficient.</p>
<br> <br>
<!-- ============================= -->
<h3>Prerequisites:</h3>
<p>You can obtain the <i>Qt Linguist</i> application as a part of the <b>Qt</b> cross-platform application framework, which is available as a <i>free</i> download from the <a href="cross-platform application framework" target="_blank">Qt Project web-site</a>. We recommend choosing the "Qt libraries 4.8.6 for Windows (VS 2010)" download. Note that, in order to find the desired download link, you may need to click on the "Show Downloads" button first and then scroll down. In any case, the <i>free</i> "OpenSource" edition of Qt is perfectly sufficient, i.e. you do <b>not</b> need to buy the <i>commercial</i> edition of Qt offered by Digia Inc.</p>
<p>Alternatively, if you do <b>not</b> want to download and install the <i>complete</i> Qt framework, you can download Qt Linguist (and some other Qt-related tools) as a <i>stand-alone</i> package at <a href="http://sourceforge.net/projects/lamexp/files/Miscellaneous/Qt%20Linguist/" target="_blank"><b>this</b></a> location. This stand-alone version will work "out of the box" <i>without</i> installation.</p>
<br>
<!-- ============================= -->
<h3>Editing the language file:</h3> <h3>Editing the language file:</h3>
<p>LameXP v4.xx translations are created as TS (translation) files, which can be edited using the <i>Qt Linguist</i> application. For new translations an empty TS file ("Blank.ts") is provided in the LameXP Git repository. When you open the empty TS file for the first time, Qt Linguist will ask for some basic settings. Here you must keep the "Source language" options at "English" and "Any Country". Change the "Target language" options to whatever language (region) you are going to translate to. Once you have edited all (or some) text strings, you can save your work to a TS file again. It is recommended to save your work to "LameXP_XX.ts", where <i>XX</i> should be replaced with the suitable upper-case <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php" target="_blank">ISO 639-1</a> Code for the representation of names of languages (for example the German translation is saved as "LameXP_DE.ts", because the corresponding ISO 639-1 code is DE). You can re-open your TS file at any time in order to continue with your work. In case you want to improve an existing LameXP translation, simply download the corresponding TS file from the LameXP Git repository and edit it using the Qt Linguist tool.</p> <p>LameXP v4.xx translations are created as TS (translation) files, which can be edited using the <i>Qt Linguist</i> application. For new translations an empty TS file ("Blank.ts") is provided in the LameXP Git repository. When you open the empty TS file for the first time, Qt Linguist will ask for some basic settings. Here you must keep the "Source language" options at "English" and "Any Country". Change the "Target language" options to whatever language (region) you are going to translate to. Once you have edited all (or some) text strings, you can save your work to a TS file again. It is recommended to save your work to "LameXP_XX.ts", where <i>XX</i> should be replaced with the suitable upper-case <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php" target="_blank">ISO 639-1</a> Code for the representation of names of languages (for example the German translation is saved as "LameXP_DE.ts", because the corresponding ISO 639-1 code is DE). You can re-open your TS file at any time in order to continue with your work. In case you want to improve an existing LameXP translation, simply download the corresponding TS file from the LameXP Git repository and edit it using the Qt Linguist tool.</p>
<p>The latest translation (TS) files can always be found in the LameXP Git repository at:<br>&bull; <a href="https://github.com/lordmulder/LameXP/tree/master/etc/Translation" target="_blank">https://github.com/lordmulder/LameXP/tree/master/etc/Translation</a><br>&bull; <a href="https://bitbucket.org/lord_mulder/lamexp/src/master/etc/Translation" target="_blank">https://bitbucket.org/lord_mulder/lamexp/src/master/etc/Translation</a><span style="font-size:0.42em"><br><br></span>After you have chosen a file from the directory tree (by left-click!), you can download the file by right-clicking on <b>"raw"</b> button/link (in the upper right corner) an choosing "Save Link As...".<br><img src="http://img192.imageshack.us/img192/803/rawy.png" alt="Raw"><br>(As people seem to have problems here: Please be sure to download the actual file content, by using the "raw" button/link. Do <i>not</i> save the page as shown in the browser, as that would only save the HTML preview of the file rather than the file itself! Also, in the directory tree view, do <i>not</i> right-click &plus; "Save Link As..." on one of the TS files, as that would only save the HTML preview. Instead, left-click on the link to open/preview the TS file in the browser, <i>then</i> use the "raw" button/link!)</p> <p>The latest translation (TS) files can always be found in the LameXP Git repository at:</p>
<p style="border-width:2px;border-style:solid;border-color:darkred;margin-top:2em"><font color="darkred"><b>IMPORTANT:</b> Before you start to create a new translation, always make sure you downloaded the <i>latest</i> "Blank.ts" file from the LameXP Git repository. Also before you start editing or updating an <i>existing</i> translation, including translations you have created yourself, make sure you downloaded the <i>latest</i> TS file from the LameXP Git repository. <i>Never</i> do any translations based on an old working copy (TS file) from your local system! The translation files (TS) in the Git repository will be updated/extended continuously, as the development proceeds. We cannot accept translations based on an <i>outdated</i> TS file!</font></p> <ul>
<li><a href="https://github.com/lordmulder/LameXP/tree/master/etc/Translation" target="_blank">https://github.com/lordmulder/LameXP/tree/master/etc/Translation</a>
<li><a href="https://bitbucket.org/lord_mulder/lamexp/src/master/etc/Translation" target="_blank">https://bitbucket.org/lord_mulder/lamexp/src/master/etc/Translation</a>
</ul>
<p>After you have chosen a file from the directory tree, by <i>left</i>-click, you can download the file by <i>right</i>-clicking on <b>Raw</b> button/link (in the upper right corner) an then choosing "Save Link As..." from the context menu.<br><img style="margin-top:0.25em" src="http://i.imgur.com/FYeggvn.png" alt="Raw Button"></p>
<p>(As many people seem to have problems here: Please be sure to download the <i>actual file content</i>, by using the "Raw" button. Please do <i>not</i> save the page as shown in the browser, as that would only save the HTML preview of the file rather than the file itself! Also, in the directory tree view, do <i>not</i> right-click &#43; "Save Link As..." on one of the TS files, as that would only save the HTML preview. Instead, <i>left</i>-click on the link to open the TS file in the browser. <i>Then</i> use the "Raw" button as described above!)</p>
<p style="border-width:2px;border-style:solid;border-color:darkred;margin-top:2em"><font color="darkred"><b>IMPORTANT:</b> Before you start to create a new translation, <i>always</i> make sure you downloaded the <u>latest</u> "Blank.ts" file from the LameXP Git repository. Also, before you start editing or updating an <i>existing</i> translation, make sure you downloaded the <u>latest</u> TS file from the LameXP Git repository. <u>Never</u> do any translations based on some working copies that you kept on your local system! The translation files (TS) in the Git repository will be updated <i>continuously</i>, as the development proceeds. We can <b>not</b> accept translations based on an <i>outdated</i> TS file!</font></p>
<br> <br>
<!-- ============================= -->
<h3>Language file editing rules:</h3> <h3>Language file editing rules:</h3>
Only language files that have been edited according to the following rules can be accepted: Only language files that have been edited according to the following rules can be accepted:
<ul> <ul>
@ -40,6 +54,7 @@ Only language files that have been edited according to the following rules can b
<li>Note that the red <font style="color:darkred;font-weight:bold">!</font> icon and the yellow <font style="color:#AA8B0F">&#10004;</font> icon indicate that there is some problem with your translation, which needs to be resolved! <li>Note that the red <font style="color:darkred;font-weight:bold">!</font> icon and the yellow <font style="color:#AA8B0F">&#10004;</font> icon indicate that there is some problem with your translation, which needs to be resolved!
</ul> </ul>
<br> <br>
<!-- ============================= -->
<h3>Examples:</h3> <h3>Examples:</h3>
Here are a few examples of properly translated strings: Here are a few examples of properly translated strings:
<ul> <ul>
@ -48,20 +63,24 @@ Here are a few examples of properly translated strings:
<li><b>Example #3</b><table><tr><td>&bull; Original:</td><td>&nbsp;</td><td><tt><font style="color:darkred">%n</font> minute(s)</tt></td></tr><tr><td>&bull; Translated (Singular):</td><td>&nbsp;</td><td><tt><font style="color:darkred">%n</font> Minute</tt></td></tr><tr><td>&bull; Translated (Plural):</td><td>&nbsp;</td><td><tt><font style="color:darkred">%n</font> Minuten</tt></td></tr></table> <li><b>Example #3</b><table><tr><td>&bull; Original:</td><td>&nbsp;</td><td><tt><font style="color:darkred">%n</font> minute(s)</tt></td></tr><tr><td>&bull; Translated (Singular):</td><td>&nbsp;</td><td><tt><font style="color:darkred">%n</font> Minute</tt></td></tr><tr><td>&bull; Translated (Plural):</td><td>&nbsp;</td><td><tt><font style="color:darkred">%n</font> Minuten</tt></td></tr></table>
</ul> </ul>
<br> <br>
<!-- ============================= -->
<h3>Testing your translation:</h3> <h3>Testing your translation:</h3>
<p>LameXP v4.xx needs to be re-built from the sources in order to integrate a new translation or to update one of the "built-in" translations. However there is an easy method to test your translation file <i>without</i> re-building LameXP: Open your current translation (TS) file in the <i>Qt Linguist</i> application and go to "File" &rArr; "Release As...", which allows you to save your translation as a "release" (QM) file. Once saved as a QM file, you can load your translation in LameXP. This is <i>not</i> possible with the TS file. In LameXP, just goto "View" &rArr; "Language" &rArr; "From File..." and choose the QM file that you have saved in Linguist before. Your translation should be in effect immediately. If you notice that your translation needs further modifications, please go back to the TS file for editing (don't try to edit the QM file!), in the <i>Qt Linguist</i> application. Then, for your next test run, create a <i>new</i> QM file from the updated TS file. Also note that, in newer versions of LameXP, you can press <tt>CTRL&plus;F5</tt> to re-load your current QM file (works only in the "Main" window!).</p> <p>LameXP v4.xx needs to be re-built from the sources in order to integrate a new translation or to update one of the "built-in" translations. However there is an easy method to test your translation file <i>without</i> re-building LameXP: Open your current translation (TS) file in the <i>Qt Linguist</i> application and go to "File" &rArr; "Release As...", which allows you to save your translation as a "release" (QM) file. Once saved as a QM file, you can load your translation in LameXP. This is <i>not</i> possible with the TS file. In LameXP, just goto "View" &rArr; "Language" &rArr; "From File..." and choose the QM file that you have saved in Linguist before. Your translation should be in effect immediately. If you notice that your translation needs further modifications, please go back to the TS file for editing (don't try to edit the QM file!), in the <i>Qt Linguist</i> application. Then, for your next test run, create a <i>new</i> QM file from the updated TS file. Also note that, in newer versions of LameXP, you can press <tt>CTRL&#43;F5</tt> to re-load your current QM file (works only in the "Main" window!).</p>
<br> <br>
<!-- ============================= -->
<h3>Submitting your translation:</h3> <h3>Submitting your translation:</h3>
<p>Once you are done with your translation (i.e. all items and all contexts have a green <font style="color:darkgreen">&#10004;</font> icon), you can submit it, so it can be integrated into the next LameXP release. You can contact me by e-mail:<br><b><a href="mailto:mulder2%20[at]%20gmx%20[dot]%20de">mulder2<font color="dimgray">[at]</font>gmx<font color="dimgray">[dot]</font>de</a></b></p> <p>Once you are done with your translation (i.e. all items and all contexts have a green <font style="color:darkgreen">&#10004;</font> icon), you can submit it, so it can be integrated into the next LameXP release. You can contact me by e-mail:<br><b><a href="mailto:mulder2%20[at]%20gmx%20[dot]%20de">mulder2<font color="dimgray">[at]</font>gmx<font color="dimgray">[dot]</font>de</a></b></p>
<p>Please do <i>not</i> submit translations that have any items/context with <font style="color:#AA8B0F">&#10004;</font>, <font style="color:#AA8B0F;font-weight:bold">?</font>, <font style="color:#427D7E;font-weight:bold">?</font> or even <font style="color:darkred;font-weight:bold">!</font> icon left. Also do <i>not</i> submit QM files, do <i>not</i> compress the submitted file (ZIP, RAR, etc) and do <i>not</i> attach a flag icon file. It is perfectly sufficient to submit <i>only</i> the translation (TS) file.</p> <p>Please do <i>not</i> submit translations that have any items/context with <font style="color:#AA8B0F">&#10004;</font>, <font style="color:#AA8B0F;font-weight:bold">?</font>, <font style="color:#427D7E;font-weight:bold">?</font> or even <font style="color:darkred;font-weight:bold">!</font> icon left. Also do <i>not</i> submit QM files, do <i>not</i> compress the submitted file (ZIP, RAR, etc) and do <i>not</i> attach a flag icon file. It is perfectly sufficient to submit <i>only</i> the translation (TS) file.</p>
<p><b><u>Legal notice:</u></b> By submitting LameXP translations, all translators agree that their work will be incorporated into the LameXP software and, from then on, will be published and redistributed under the terms of the GNU General Public License. If you do <i>not</i> agree, please do <i>not</i> submit! <p><b><i>Legal notice:</i></b><br>By submitting LameXP translations, all translators agree that their work will be incorporated into the LameXP software. All translations will be published and redistributed under the terms of the <i>GNU General Public License</i>. If you do <b>not</b> agree, please do <b>not</b> submit!
<p>(Advanced translators can get write-access to the Git repository, so they can keep their translations up-to-date easily. If you need Git access, just drop me a note!)</p> <p>(Advanced translators can get write-access to the Git repository, so they can keep their translations up-to-date easily. If you need Git access, just drop me a note!)</p>
<p style="border-width:2px;border-style:solid;border-color:darkred;margin-top:2em"><font color="darkred"><b>IMPORTANT:</b> Before you start to create a new translation, always make sure you downloaded the <i>latest</i> "Blank.ts" file from the LameXP Git repository. Also before you start editing or updating an <i>existing</i> translation, including translations you have created yourself, make sure you downloaded the <i>latest</i> TS file from the LameXP Git repository. <i>Never</i> do any translations based on an old working copy (TS file) from your local system! The translation files (TS) in the Git repository will be updated/extended continuously, as the development proceeds. We cannot accept translations based on an <i>outdated</i> TS file!</font></p> <p style="border-width:2px;border-style:solid;border-color:darkred;margin-top:2em"><font color="darkred"><b>IMPORTANT:</b> Before you start to create a new translation, <i>always</i> make sure you downloaded the <u>latest</u> "Blank.ts" file from the LameXP Git repository. Also, before you start editing or updating an <i>existing</i> translation, make sure you downloaded the <u>latest</u> TS file from the LameXP Git repository. <u>Never</u> do any translations based on some working copies that you kept on your local system! The translation files (TS) in the Git repository will be updated <i>continuously</i>, as the development proceeds. We can <b>not</b> accept translations based on an <i>outdated</i> TS file!</font></p>
<br> <br>
<!-- ============================= -->
<h3>Personalization:</h3> <h3>Personalization:</h3>
<p>Usually all translators will be mentioned in the "About..." dialogue of LameXP. If you don't want your (nick)name and/or e-mail address to appear there, please tell us that you whish to stay anonymous!</p> <p>Usually all translators will be mentioned in the "About..." dialogue of LameXP. If you don't want your (nick)name and/or e-mail address to appear there, please tell us that you wish to stay anonymous!</p>
<br> <br>
<br> <br>
Thanks in advance !!!<br><br><img src="http://forum.doom9.org/images/smilies/thanks-t.gif" alt="emoticon"> Thanks in advance !!!<br><br><img src="http://forum.doom9.org/images/smilies/thanks-t.gif" alt="emoticon">
<!-- ============================= -->
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

View File

@ -239,38 +239,6 @@
<source>Special thanks to:</source> <source>Special thanks to:</source>
<translation>Besonderen Dank an:</translation> <translation>Besonderen Dank an:</translation>
</message> </message>
<message>
<source>Doom9&apos;s Forum</source>
<translation></translation>
</message>
<message>
<source>Gleitz | German Doom9</source>
<translation></translation>
</message>
<message>
<source>Hydrogenaudio Forums</source>
<translation></translation>
</message>
<message>
<source>RareWares</source>
<translation></translation>
</message>
<message>
<source>GitHub</source>
<translation></translation>
</message>
<message>
<source>SourceForge</source>
<translation></translation>
</message>
<message>
<source>Qt Developer Network</source>
<translation></translation>
</message>
<message>
<source>Marius Hudea</source>
<translation></translation>
</message>
<message> <message>
<source>UPX - The Ultimate Packer for eXecutables</source> <source>UPX - The Ultimate Packer for eXecutables</source>
<translation></translation> <translation></translation>
@ -288,16 +256,8 @@
<translation>Valdec aus den AC3Filter Tools - AC3/DTS Decoder</translation> <translation>Valdec aus den AC3Filter Tools - AC3/DTS Decoder</translation>
</message> </message>
<message> <message>
<source>Codecs.com</source> <source>Official Mirrors:</source>
<translation></translation> <translation>Offizielle Spiegelserver:</translation>
</message>
<message>
<source>BerliOS Developer</source>
<translation></translation>
</message>
<message>
<source>CodePlex</source>
<translation></translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -31,7 +31,7 @@
<context> <context>
<name>MainWindow</name> <name>MainWindow</name>
<message numerus="yes"> <message numerus="yes">
<location filename="../../src/Dialog_MainWindow.cpp" line="779"/> <location filename="../../src/Dialog_MainWindow.cpp" line="801"/>
<source>%n file(s) have been rejected, because read access was not granted!</source> <source>%n file(s) have been rejected, because read access was not granted!</source>
<translation> <translation>
<numerusform>%n file have been rejected, because read access was not granted!</numerusform> <numerusform>%n file have been rejected, because read access was not granted!</numerusform>
@ -39,7 +39,7 @@
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../../src/Dialog_MainWindow.cpp" line="783"/> <location filename="../../src/Dialog_MainWindow.cpp" line="805"/>
<source>%n file(s) have been rejected, because they are dummy CDDA files!</source> <source>%n file(s) have been rejected, because they are dummy CDDA files!</source>
<translation> <translation>
<numerusform>%n file have been rejected, because they are dummy CDDA files!</numerusform> <numerusform>%n file have been rejected, because they are dummy CDDA files!</numerusform>
@ -47,7 +47,7 @@
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../../src/Dialog_MainWindow.cpp" line="787"/> <location filename="../../src/Dialog_MainWindow.cpp" line="809"/>
<source>%n file(s) have been rejected, because they appear to be Cue Sheet images!</source> <source>%n file(s) have been rejected, because they appear to be Cue Sheet images!</source>
<translation> <translation>
<numerusform>%n file have been rejected, because they appear to be Cue Sheet images!</numerusform> <numerusform>%n file have been rejected, because they appear to be Cue Sheet images!</numerusform>
@ -55,7 +55,7 @@
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../../src/Dialog_MainWindow.cpp" line="791"/> <location filename="../../src/Dialog_MainWindow.cpp" line="813"/>
<source>%n file(s) have been rejected, because the file format could not be recognized!</source> <source>%n file(s) have been rejected, because the file format could not be recognized!</source>
<translation> <translation>
<numerusform>%n file have been rejected, because the file format could not be recognized!</numerusform> <numerusform>%n file have been rejected, because the file format could not be recognized!</numerusform>
@ -63,7 +63,7 @@
</translation> </translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../../src/Dialog_MainWindow.cpp" line="3848"/> <location filename="../../src/Dialog_MainWindow.cpp" line="3906"/>
<source>%n Instance(s)</source> <source>%n Instance(s)</source>
<translation> <translation>
<numerusform>%n Instance</numerusform> <numerusform>%n Instance</numerusform>

View File

@ -239,38 +239,6 @@
<source>Special thanks to:</source> <source>Special thanks to:</source>
<translation>Agradecimientos a:</translation> <translation>Agradecimientos a:</translation>
</message> </message>
<message>
<source>Doom9&apos;s Forum</source>
<translation>Doom9&apos;s Forum</translation>
</message>
<message>
<source>Gleitz | German Doom9</source>
<translation>Gleitz | German Doom9</translation>
</message>
<message>
<source>Hydrogenaudio Forums</source>
<translation>Hydrogenaudio Forums</translation>
</message>
<message>
<source>RareWares</source>
<translation>RareWares</translation>
</message>
<message>
<source>GitHub</source>
<translation>GitHub</translation>
</message>
<message>
<source>SourceForge</source>
<translation>SourceForge</translation>
</message>
<message>
<source>Qt Developer Network</source>
<translation>Qt Developer Network</translation>
</message>
<message>
<source>Marius Hudea</source>
<translation>Marius Hudea</translation>
</message>
<message> <message>
<source>UPX - The Ultimate Packer for eXecutables</source> <source>UPX - The Ultimate Packer for eXecutables</source>
<translation>UPX - The Ultimate Packer for eXecutables</translation> <translation>UPX - The Ultimate Packer for eXecutables</translation>
@ -288,15 +256,7 @@
<translation>Valdec de AC3Filter Tools - Decodificador AC3/DTS</translation> <translation>Valdec de AC3Filter Tools - Decodificador AC3/DTS</translation>
</message> </message>
<message> <message>
<source>Codecs.com</source> <source>Official Mirrors:</source>
<translation>Codecs.com</translation>
</message>
<message>
<source>BerliOS Developer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CodePlex</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>

View File

@ -243,38 +243,6 @@
<source>Special thanks to:</source> <source>Special thanks to:</source>
<translation>Grand merci à :</translation> <translation>Grand merci à :</translation>
</message> </message>
<message>
<source>Doom9&apos;s Forum</source>
<translation>Forum Doom9&apos;s</translation>
</message>
<message>
<source>Gleitz | German Doom9</source>
<translation>Gleitz | German Doom9</translation>
</message>
<message>
<source>Hydrogenaudio Forums</source>
<translation>Forums Hydrogenaudi</translation>
</message>
<message>
<source>RareWares</source>
<translation>RareWares</translation>
</message>
<message>
<source>GitHub</source>
<translation>GitHub</translation>
</message>
<message>
<source>SourceForge</source>
<translation>SourceForge</translation>
</message>
<message>
<source>Qt Developer Network</source>
<translation>Qt Developer Network</translation>
</message>
<message>
<source>Marius Hudea</source>
<translation>Marius Hudea</translation>
</message>
<message> <message>
<source>UPX - The Ultimate Packer for eXecutables</source> <source>UPX - The Ultimate Packer for eXecutables</source>
<translation>UPX - The Ultimate Packer for eXecutable</translation> <translation>UPX - The Ultimate Packer for eXecutable</translation>
@ -292,15 +260,7 @@
<translation>Valdec depuis les outils AC3Filter - Décodeur AC3/DTS</translation> <translation>Valdec depuis les outils AC3Filter - Décodeur AC3/DTS</translation>
</message> </message>
<message> <message>
<source>Codecs.com</source> <source>Official Mirrors:</source>
<translation>Codecs.com</translation>
</message>
<message>
<source>BerliOS Developer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CodePlex</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -2024,15 +1984,15 @@ Ouvrir le dossier récursivement...</translation>
</message> </message>
<message> <message>
<source>Current Encoder: %1</source> <source>Current Encoder: %1</source>
<translation type="unfinished"></translation> <translation>Encodeur actuel r: %1</translation>
</message> </message>
<message> <message>
<source>Loading dropped files or folders, please wait...</source> <source>Loading dropped files or folders, please wait...</source>
<translation type="unfinished"></translation> <translation>Chargement des fichiers ou dossiers déposés, patientez...</translation>
</message> </message>
<message> <message>
<source>APE</source> <source>APE</source>
<translation type="unfinished"></translation> <translation>APE</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2618,7 +2578,7 @@ Ouvrir le dossier récursivement...</translation>
</message> </message>
<message> <message>
<source>Executable &apos;%1&apos; requires Windows XP or later.</source> <source>Executable &apos;%1&apos; requires Windows XP or later.</source>
<translation type="unfinished"></translation> <translation>&apos;%1&apos; requiert Windows XP ou une version ultérieure.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2751,23 +2711,23 @@ Ouvrir le dossier récursivement...</translation>
</message> </message>
<message> <message>
<source>Initializing, please wait...</source> <source>Initializing, please wait...</source>
<translation type="unfinished">Initialisation, patientez...</translation> <translation>Initialisation, patientez...</translation>
</message> </message>
<message> <message>
<source>Discard</source> <source>Discard</source>
<translation type="unfinished">Abandonner</translation> <translation>Abandonner</translation>
</message> </message>
<message> <message>
<source>Ignore</source> <source>Ignore</source>
<translation type="unfinished">Ignorer</translation> <translation>Ignorer</translation>
</message> </message>
<message> <message>
<source>Sorry, but only users in the &quot;Administrators&quot; group can install updates.</source> <source>Sorry, but only users in the &quot;Administrators&quot; group can install updates.</source>
<translation type="unfinished"></translation> <translation>Désolé, mais seuls les « Administrateurs » peuvent installer les mises à jour.</translation>
</message> </message>
<message> <message>
<source>Please start application from an administrator account and try again!</source> <source>Please start application from an administrator account and try again!</source>
<translation type="unfinished"></translation> <translation>Veuillez démarrer l&apos;application depuis un compte administrateur, puis réessayez !</translation>
</message> </message>
</context> </context>
</TS> </TS>

View File

@ -239,38 +239,6 @@
<source>Special thanks to:</source> <source>Special thanks to:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Doom9&apos;s Forum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Gleitz | German Doom9</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Hydrogenaudio Forums</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>RareWares</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>GitHub</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>SourceForge</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Qt Developer Network</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Marius Hudea</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>UPX - The Ultimate Packer for eXecutables</source> <source>UPX - The Ultimate Packer for eXecutables</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -288,15 +256,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<source>Codecs.com</source> <source>Official Mirrors:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>BerliOS Developer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CodePlex</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>

View File

@ -239,38 +239,6 @@
<source>Special thanks to:</source> <source>Special thanks to:</source>
<translation type="unfinished"> :</translation> <translation type="unfinished"> :</translation>
</message> </message>
<message>
<source>Doom9&apos;s Forum</source>
<translation type="unfinished">Doom9 </translation>
</message>
<message>
<source>Gleitz | German Doom9</source>
<translation type="unfinished">Gleitz | German Doom9</translation>
</message>
<message>
<source>Hydrogenaudio Forums</source>
<translation type="unfinished">Hydrogenaudio </translation>
</message>
<message>
<source>RareWares</source>
<translation type="unfinished">RareWares</translation>
</message>
<message>
<source>GitHub</source>
<translation type="unfinished">GitHub</translation>
</message>
<message>
<source>SourceForge</source>
<translation type="unfinished">SourceForge</translation>
</message>
<message>
<source>Qt Developer Network</source>
<translation type="unfinished">Qt </translation>
</message>
<message>
<source>Marius Hudea</source>
<translation type="unfinished">Marius Hudea</translation>
</message>
<message> <message>
<source>UPX - The Ultimate Packer for eXecutables</source> <source>UPX - The Ultimate Packer for eXecutables</source>
<translation type="unfinished">UPX - The Ultimate Packer for eXecutables</translation> <translation type="unfinished">UPX - The Ultimate Packer for eXecutables</translation>
@ -289,15 +257,7 @@
<translation type="unfinished">AC3Filter Valdec - AC3/DTS Decoder</translation> <translation type="unfinished">AC3Filter Valdec - AC3/DTS Decoder</translation>
</message> </message>
<message> <message>
<source>Codecs.com</source> <source>Official Mirrors:</source>
<translation type="unfinished">Codecs.com</translation>
</message>
<message>
<source>BerliOS Developer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>CodePlex</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
@ -2008,15 +1968,15 @@
</message> </message>
<message> <message>
<source>Current Encoder: %1</source> <source>Current Encoder: %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"> : %1</translation>
</message> </message>
<message> <message>
<source>Loading dropped files or folders, please wait...</source> <source>Loading dropped files or folders, please wait...</source>
<translation type="unfinished"></translation> <translation type="unfinished"> , ...</translation>
</message> </message>
<message> <message>
<source>APE</source> <source>APE</source>
<translation type="unfinished"></translation> <translation type="unfinished">APE</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2590,7 +2550,7 @@
</message> </message>
<message> <message>
<source>Executable &apos;%1&apos; requires Windows XP or later.</source> <source>Executable &apos;%1&apos; requires Windows XP or later.</source>
<translation type="unfinished"></translation> <translation type="unfinished">&apos;%1&apos; Windows XP .</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2608,7 +2568,7 @@
<name>SplashScreen</name> <name>SplashScreen</name>
<message> <message>
<source>LameXP is launching...</source> <source>LameXP is launching...</source>
<translation type="unfinished">LameXP ...</translation> <translation type="unfinished">LameXP ...</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2735,11 +2695,11 @@
</message> </message>
<message> <message>
<source>Sorry, but only users in the &quot;Administrators&quot; group can install updates.</source> <source>Sorry, but only users in the &quot;Administrators&quot; group can install updates.</source>
<translation type="unfinished"></translation> <translation type="unfinished"> .</translation>
</message> </message>
<message> <message>
<source>Please start application from an administrator account and try again!</source> <source>Please start application from an administrator account and try again!</source>
<translation type="unfinished"></translation> <translation type="unfinished"> !</translation>
</message> </message>
</context> </context>
</TS> </TS>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -239,38 +239,6 @@
<source>Special thanks to:</source> <source>Special thanks to:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message>
<source>Doom9&apos;s Forum</source>
<translation>Doom9論壇</translation>
</message>
<message>
<source>Gleitz | German Doom9</source>
<translation> | Doom9</translation>
</message>
<message>
<source>Hydrogenaudio Forums</source>
<translation>Hydrogenaudio論壇</translation>
</message>
<message>
<source>RareWares</source>
<translation>RareWares</translation>
</message>
<message>
<source>GitHub</source>
<translation>GitHub</translation>
</message>
<message>
<source>SourceForge</source>
<translation>SourceForge</translation>
</message>
<message>
<source>Qt Developer Network</source>
<translation>Qt的開發者網絡</translation>
</message>
<message>
<source>Marius Hudea</source>
<translation>Marius Hudea</translation>
</message>
<message> <message>
<source>UPX - The Ultimate Packer for eXecutables</source> <source>UPX - The Ultimate Packer for eXecutables</source>
<translation>UPX - </translation> <translation>UPX - </translation>
@ -288,16 +256,8 @@
<translation>Valdec AC3Filter工具 - AC3/DTS解碼器</translation> <translation>Valdec AC3Filter工具 - AC3/DTS解碼器</translation>
</message> </message>
<message> <message>
<source>Codecs.com</source> <source>Official Mirrors:</source>
<translation>Codecs.com</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>BerliOS Developer</source>
<translation>BerliOS Developer</translation>
</message>
<message>
<source>CodePlex</source>
<translation>CodePlex</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -240,38 +240,6 @@
<source>Special thanks to:</source> <source>Special thanks to:</source>
<translation>Окрема подяка:</translation> <translation>Окрема подяка:</translation>
</message> </message>
<message>
<source>Doom9&apos;s Forum</source>
<translation>Форум Doom9</translation>
</message>
<message>
<source>Gleitz | German Doom9</source>
<translation>Gleitz | Німецький Doom9</translation>
</message>
<message>
<source>Hydrogenaudio Forums</source>
<translation>Форуми Hydrogenaudio</translation>
</message>
<message>
<source>RareWares</source>
<translation>RareWares</translation>
</message>
<message>
<source>GitHub</source>
<translation>GitHub</translation>
</message>
<message>
<source>SourceForge</source>
<translation>SourceForge</translation>
</message>
<message>
<source>Qt Developer Network</source>
<translation>Мережа розробників Qt</translation>
</message>
<message>
<source>Marius Hudea</source>
<translation>Marius Hudea</translation>
</message>
<message> <message>
<source>UPX - The Ultimate Packer for eXecutables</source> <source>UPX - The Ultimate Packer for eXecutables</source>
<translation>UPX - The Ultimate Packer for eXecutables</translation> <translation>UPX - The Ultimate Packer for eXecutables</translation>
@ -284,21 +252,13 @@
<source>The ALAC reference implementation by Apple is available under the Apache license.</source> <source>The ALAC reference implementation by Apple is available under the Apache license.</source>
<translation>Оригінальна реалізація ALAC від Apple доступна під ліцензією Apache.</translation> <translation>Оригінальна реалізація ALAC від Apple доступна під ліцензією Apache.</translation>
</message> </message>
<message>
<source>Codecs.com</source>
<translation>Codecs.com</translation>
</message>
<message> <message>
<source>Valdec from AC3Filter Tools - AC3/DTS Decoder</source> <source>Valdec from AC3Filter Tools - AC3/DTS Decoder</source>
<translation>Valdec зі складу AC3Filter Tools - декодер AC3/DTS</translation> <translation>Valdec зі складу AC3Filter Tools - декодер AC3/DTS</translation>
</message> </message>
<message> <message>
<source>BerliOS Developer</source> <source>Official Mirrors:</source>
<translation>BerliOS Developer</translation> <translation>Офіційні дзеркала:</translation>
</message>
<message>
<source>CodePlex</source>
<translation>CodePlex</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -239,38 +239,6 @@
<source>Special thanks to:</source> <source>Special thanks to:</source>
<translation>:</translation> <translation>:</translation>
</message> </message>
<message>
<source>Doom9&apos;s Forum</source>
<translation>Doom9论坛</translation>
</message>
<message>
<source>Gleitz | German Doom9</source>
<translation> | Doom9</translation>
</message>
<message>
<source>Hydrogenaudio Forums</source>
<translation>Hydrogenaudio论坛</translation>
</message>
<message>
<source>RareWares</source>
<translation>RareWares</translation>
</message>
<message>
<source>GitHub</source>
<translation>GitHub</translation>
</message>
<message>
<source>SourceForge</source>
<translation>SourceForge</translation>
</message>
<message>
<source>Qt Developer Network</source>
<translation>Qt的开发者网络</translation>
</message>
<message>
<source>Marius Hudea</source>
<translation>Marius Hudea</translation>
</message>
<message> <message>
<source>UPX - The Ultimate Packer for eXecutables</source> <source>UPX - The Ultimate Packer for eXecutables</source>
<translation>UPX - </translation> <translation>UPX - </translation>
@ -288,16 +256,8 @@
<translation>AC3Filter工具 Valdec - AC3/DTS </translation> <translation>AC3Filter工具 Valdec - AC3/DTS </translation>
</message> </message>
<message> <message>
<source>Codecs.com</source> <source>Official Mirrors:</source>
<translation>Codecs.com</translation> <translation type="unfinished"></translation>
</message>
<message>
<source>BerliOS Developer</source>
<translation>BerliOS开发者平台</translation>
</message>
<message>
<source>CodePlex</source>
<translation>CodePlex</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -50,6 +50,7 @@
<file>icons/drive_link.png</file> <file>icons/drive_link.png</file>
<file>icons/drive_network.png</file> <file>icons/drive_network.png</file>
<file>icons/exclamation.png</file> <file>icons/exclamation.png</file>
<file>icons/exclamation_small.png</file>
<file>icons/error.png</file> <file>icons/error.png</file>
<file>icons/error_big.png</file> <file>icons/error_big.png</file>
<file>icons/feed.png</file> <file>icons/feed.png</file>
@ -97,6 +98,7 @@
<file>icons/script.png</file> <file>icons/script.png</file>
<file>icons/script_edit.png</file> <file>icons/script_edit.png</file>
<file>icons/script_go.png</file> <file>icons/script_go.png</file>
<file>icons/server_database.png</file>
<file>icons/server_error.png</file> <file>icons/server_error.png</file>
<file>icons/shield_admin.png</file> <file>icons/shield_admin.png</file>
<file>icons/shield_blue.png</file> <file>icons/shield_blue.png</file>

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -31,12 +31,12 @@
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#define VER_LAMEXP_MAJOR 4 #define VER_LAMEXP_MAJOR 4
#define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_HI 1
#define VER_LAMEXP_MINOR_LO 9 #define VER_LAMEXP_MINOR_LO 0
#define VER_LAMEXP_TYPE RC #define VER_LAMEXP_TYPE RC
#define VER_LAMEXP_PATCH 1 #define VER_LAMEXP_PATCH 1
#define VER_LAMEXP_BUILD 1519 #define VER_LAMEXP_BUILD 1549
#define VER_LAMEXP_CONFG 1348 #define VER_LAMEXP_CONFG 1528
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// LameXP Build Options // LameXP Build Options
@ -51,8 +51,8 @@
#define VER_LAMEXP_TOOL_NEROAAC 1540 #define VER_LAMEXP_TOOL_NEROAAC 1540
#define VER_LAMEXP_TOOL_FHGAACENC 20120806 #define VER_LAMEXP_TOOL_FHGAACENC 20120806
#define VER_LAMEXP_TOOL_QAAC 139 #define VER_LAMEXP_TOOL_QAAC 233
#define VER_LAMEXP_TOOL_COREAUDIO 7710 #define VER_LAMEXP_TOOL_COREAUDIO 7900
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Helper macros (aka: having fun with the C pre-processor) // Helper macros (aka: having fun with the C pre-processor)

View File

@ -84,6 +84,46 @@ g_lamexp_translators[] =
{NULL, NULL, NULL, NULL} {NULL, NULL, NULL, NULL}
}; };
//Special Thanks
static const struct
{
char* pcName;
char *pcAddress;
}
g_lamexp_specialThanks[] =
{
{ "Doom9's Forum", "http://forum.doom9.org/" },
{ "Gleitz | German Doom9", "http://forum.gleitz.info/" },
{ "Hydrogenaudio Forums", "http://www.hydrogenaudio.org/" },
{ "RareWares", "http://www.rarewares.org/" },
{ "GitHub", "http://github.com/" },
{ "SourceForge", "http://sourceforge.net/" },
{ "Qt Developer Network", "http://qt-project.org/" },
{ "BerliOS Developer", "http://developer.berlios.de/" },
{ "CodePlex", "http://www.codeplex.com/" },
{ "Marius Hudea", "http://savedonthe.net/" },
{ "Codecs.com", "http://www.codecs.com/" },
{ NULL, NULL }
};
//Mirrors
static const struct
{
char* pcName;
char *pcAddress;
}
g_lamexp_mirrors[] =
{
{ "GitHub.com", "https://github.com/lordmulder/LameXP" },
{ "SourceForge.net", "http://sourceforge.net/p/lamexp/code/" },
{ "Bitbucket.org", "https://bitbucket.org/lord_mulder/lamexp" },
{ "Gitorious.org", "https://gitorious.org/lamexp" },
{ "Codeplex.com", "https://lamexp.codeplex.com/SourceControl/latest" },
{ "Berlios.de", "http://git.berlios.de/cgi-bin/gitweb.cgi?p=lamexp" },
{ "Assembla.com", "https://www.assembla.com/spaces/lamexp/" },
{ NULL, NULL }
};
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// Constructor // Constructor
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -575,7 +615,7 @@ void AboutDialog::initContributorsTab(void)
QString icon = QString("<img src=\":/icons/%1.png\">").arg("user_gray"); QString icon = QString("<img src=\":/icons/%1.png\">").arg("user_gray");
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(icon, spaces); contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(icon, spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td>").arg(tr("Project Leader"), spaces); contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td>").arg(tr("Project Leader"), spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td><a href=\"mailto:%2\">&lt;%3&gt;</a></td></tr>").arg("LoRd_MuldeR", spaces, "MuldeR2@GMX.de"); contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td><a href=\"mailto:%3\">&lt;%3&gt;</a></td></tr>").arg("LoRd_MuldeR", spaces, "MuldeR2@GMX.de");
contributorsAboutText += QString("<tr><td colspan=\"7\"><b>&nbsp;</b></td></tr>"); contributorsAboutText += QString("<tr><td colspan=\"7\"><b>&nbsp;</b></td></tr>");
contributorsAboutText += QString("<tr><td colspan=\"7\"><b>%1</b>%2</td></tr>").arg(tr("Translators:"), extraVSpace); contributorsAboutText += QString("<tr><td colspan=\"7\"><b>%1</b>%2</td></tr>").arg(tr("Translators:"), extraVSpace);
@ -584,35 +624,28 @@ void AboutDialog::initContributorsTab(void)
QString flagIcon = (strlen(g_lamexp_translators[i].pcFlag) > 0) ? QString("<img src=\":/flags/%1.png\">").arg(g_lamexp_translators[i].pcFlag) : QString(); QString flagIcon = (strlen(g_lamexp_translators[i].pcFlag) > 0) ? QString("<img src=\":/flags/%1.png\">").arg(g_lamexp_translators[i].pcFlag) : QString();
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(flagIcon, spaces); contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(flagIcon, spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td>").arg(WCHAR2QSTR(g_lamexp_translators[i].pcLanguage), spaces); contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td>").arg(WCHAR2QSTR(g_lamexp_translators[i].pcLanguage), spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td><a href=\"mailto:%2\">&lt;%3&gt;</a></td></tr>").arg(WCHAR2QSTR(g_lamexp_translators[i].pcName), spaces, g_lamexp_translators[i].pcMail); contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td><a href=\"mailto:%3\">&lt;%3&gt;</a></td></tr>").arg(WCHAR2QSTR(g_lamexp_translators[i].pcName), spaces, g_lamexp_translators[i].pcMail);
} }
contributorsAboutText += QString("<tr><td colspan=\"7\"><b>&nbsp;</b></td></tr>"); contributorsAboutText += QString("<tr><td colspan=\"7\"><b>&nbsp;</b></td></tr>");
contributorsAboutText += QString("<tr><td colspan=\"7\"><b>%1</b>%2</td></tr>").arg(tr("Special thanks to:"), extraVSpace); contributorsAboutText += QString("<tr><td colspan=\"7\"><b>%1</b>%2</td></tr>").arg(tr("Special thanks to:"), extraVSpace);
QString webIcon = QString("<img src=\":/icons/%1.png\">").arg("world"); QString webIcon = QString("<img src=\":/icons/%1.png\">").arg("world");
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces); for(int i = 0; g_lamexp_specialThanks[i].pcName; i++)
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("Doom9's Forum"), spaces, "http://forum.doom9.org/"); {
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces); contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("Gleitz | German Doom9"), spaces, "http://forum.gleitz.info/"); contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(QString::fromLatin1(g_lamexp_specialThanks[i].pcName), spaces, QString::fromLatin1(g_lamexp_specialThanks[i].pcAddress));
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces); }
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("Hydrogenaudio Forums"), spaces, "http://www.hydrogenaudio.org/");
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces); contributorsAboutText += QString("<tr><td colspan=\"7\"><b>&nbsp;</b></td></tr>");
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("RareWares"), spaces, "http://www.rarewares.org/"); contributorsAboutText += QString("<tr><td colspan=\"7\"><b>%1</b>%2</td></tr>").arg(tr("Official Mirrors:"), extraVSpace);
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("GitHub"), spaces, "http://github.com/"); QString serverIcon = QString("<img src=\":/icons/%1.png\">").arg("server_database");
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces); for(int i = 0; g_lamexp_mirrors[i].pcName; i++)
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("SourceForge"), spaces, "http://sourceforge.net/"); {
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces); contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(serverIcon, spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("Qt Developer Network"), spaces, "http://qt-project.org/"); contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(QString::fromLatin1(g_lamexp_mirrors[i].pcName), spaces, QString::fromLatin1(g_lamexp_mirrors[i].pcAddress));
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces); }
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("BerliOS Developer"), spaces, "http://developer.berlios.de/");
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("CodePlex"), spaces, "http://www.codeplex.com/");
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("Marius Hudea"), spaces, "http://savedonthe.net/");
contributorsAboutText += QString("<tr><td valign=\"middle\">%1</td><td>%2</td>").arg(webIcon, spaces);
contributorsAboutText += QString("<td valign=\"middle\">%1</td><td>%2</td><td valign=\"middle\" colspan=\"3\"><a href=\"%3\">%3</td></tr>").arg(tr("Codecs.com"), spaces, "http://www.codecs.com/");
contributorsAboutText += "</table><br><br><br>"; contributorsAboutText += "</table><br><br><br>";
contributorsAboutText += QString("<i>%1</i><br>").arg(NOBR(tr("If you are willing to contribute a LameXP translation, feel free to contact us!"))); contributorsAboutText += QString("<i>%1</i><br>").arg(NOBR(tr("If you are willing to contribute a LameXP translation, feel free to contact us!")));

View File

@ -115,7 +115,7 @@ while(0)
#define ABORT_IF_BUSY do \ #define ABORT_IF_BUSY do \
{ \ { \
if(BANNER_VISIBLE || m_delayedFileTimer->isActive()) \ if(BANNER_VISIBLE || m_delayedFileTimer->isActive() || (QApplication::activeModalWidget() != NULL)) \
{ \ { \
lamexp_beep(lamexp_beep_warning); \ lamexp_beep(lamexp_beep_warning); \
return; \ return; \
@ -198,6 +198,15 @@ while(0)
} \ } \
while(0) while(0)
#define SHOW_CORNER_WIDGET(FLAG) do \
{ \
if(QWidget *cornerWidget = ui->menubar->cornerWidget()) \
{ \
cornerWidget->setVisible((FLAG)); \
} \
} \
while(0)
#define LINK(URL) QString("<a href=\"%1\">%2</a>").arg(URL).arg(QString(URL).replace("-", "&minus;")) #define LINK(URL) QString("<a href=\"%1\">%2</a>").arg(URL).arg(QString(URL).replace("-", "&minus;"))
#define FSLINK(PATH) QString("<a href=\"file:///%1\">%2</a>").arg(PATH).arg(QString(PATH).replace("-", "&minus;")) #define FSLINK(PATH) QString("<a href=\"file:///%1\">%2</a>").arg(PATH).arg(QString(PATH).replace("-", "&minus;"))
#define CENTER_CURRENT_OUTPUT_FOLDER_DELAYED QTimer::singleShot(125, this, SLOT(centerOutputFolderModel())) #define CENTER_CURRENT_OUTPUT_FOLDER_DELAYED QTimer::singleShot(125, this, SLOT(centerOutputFolderModel()))
@ -238,7 +247,7 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel_MetaInfo *me
//Enabled main buttons //Enabled main buttons
connect(ui->buttonAbout, SIGNAL(clicked()), this, SLOT(aboutButtonClicked())); connect(ui->buttonAbout, SIGNAL(clicked()), this, SLOT(aboutButtonClicked()));
connect(ui->buttonStart, SIGNAL(clicked()), this, SLOT(encodeButtonClicked())); connect(ui->buttonStart, SIGNAL(clicked()), this, SLOT(encodeButtonClicked()));
connect(ui->buttonQuit, SIGNAL(clicked()), this, SLOT(closeButtonClicked())); connect(ui->buttonQuit, SIGNAL(clicked()), this, SLOT(closeButtonClicked()));
//Setup tab widget //Setup tab widget
ui->tabWidget->setCurrentIndex(0); ui->tabWidget->setCurrentIndex(0);
@ -247,6 +256,17 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel_MetaInfo *me
//Add system menu //Add system menu
lamexp_append_sysmenu(this, IDM_ABOUTBOX, "About..."); lamexp_append_sysmenu(this, IDM_ABOUTBOX, "About...");
//Setup corner widget
QLabel *cornerWidget = new QLabel(ui->menubar);
m_evenFilterCornerWidget = new CustomEventFilter;
cornerWidget->setText("N/A");
cornerWidget->setFixedHeight(ui->menubar->height());
cornerWidget->setCursor(QCursor(Qt::PointingHandCursor));
cornerWidget->hide();
cornerWidget->installEventFilter(m_evenFilterCornerWidget);
connect(m_evenFilterCornerWidget, SIGNAL(eventOccurred(QWidget*, QEvent*)), this, SLOT(cornerWidgetEventOccurred(QWidget*, QEvent*)));
ui->menubar->setCornerWidget(cornerWidget);
//-------------------------------- //--------------------------------
// Setup "Source" tab // Setup "Source" tab
//-------------------------------- //--------------------------------
@ -268,23 +288,24 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel_MetaInfo *me
m_exportCsvContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/table_save.png"), "N/A"); m_exportCsvContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/table_save.png"), "N/A");
m_importCsvContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/folder_table.png"), "N/A"); m_importCsvContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/folder_table.png"), "N/A");
SET_FONT_BOLD(m_showDetailsContextAction, true); SET_FONT_BOLD(m_showDetailsContextAction, true);
connect(ui->buttonAddFiles, SIGNAL(clicked()), this, SLOT(addFilesButtonClicked()));
connect(ui->buttonRemoveFile, SIGNAL(clicked()), this, SLOT(removeFileButtonClicked())); connect(ui->buttonAddFiles, SIGNAL(clicked()), this, SLOT(addFilesButtonClicked()));
connect(ui->buttonClearFiles, SIGNAL(clicked()), this, SLOT(clearFilesButtonClicked())); connect(ui->buttonRemoveFile, SIGNAL(clicked()), this, SLOT(removeFileButtonClicked()));
connect(ui->buttonFileUp, SIGNAL(clicked()), this, SLOT(fileUpButtonClicked())); connect(ui->buttonClearFiles, SIGNAL(clicked()), this, SLOT(clearFilesButtonClicked()));
connect(ui->buttonFileDown, SIGNAL(clicked()), this, SLOT(fileDownButtonClicked())); connect(ui->buttonFileUp, SIGNAL(clicked()), this, SLOT(fileUpButtonClicked()));
connect(ui->buttonShowDetails, SIGNAL(clicked()), this, SLOT(showDetailsButtonClicked())); connect(ui->buttonFileDown, SIGNAL(clicked()), this, SLOT(fileDownButtonClicked()));
connect(m_fileListModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(sourceModelChanged())); connect(ui->buttonShowDetails, SIGNAL(clicked()), this, SLOT(showDetailsButtonClicked()));
connect(m_fileListModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(sourceModelChanged())); connect(m_fileListModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(sourceModelChanged()));
connect(m_fileListModel, SIGNAL(modelReset()), this, SLOT(sourceModelChanged())); connect(m_fileListModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(sourceModelChanged()));
connect(ui->sourceFileView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(sourceFilesContextMenu(QPoint))); connect(m_fileListModel, SIGNAL(modelReset()), this, SLOT(sourceModelChanged()));
connect(ui->sourceFileView->verticalScrollBar(), SIGNAL(sliderMoved(int)), this, SLOT(sourceFilesScrollbarMoved(int))); connect(ui->sourceFileView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(sourceFilesContextMenu(QPoint)));
connect(ui->sourceFileView->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(sourceFilesScrollbarMoved(int))); connect(ui->sourceFileView->verticalScrollBar(), SIGNAL(sliderMoved(int)), this, SLOT(sourceFilesScrollbarMoved(int)));
connect(m_showDetailsContextAction, SIGNAL(triggered(bool)), this, SLOT(showDetailsButtonClicked())); connect(ui->sourceFileView->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(sourceFilesScrollbarMoved(int)));
connect(m_previewContextAction, SIGNAL(triggered(bool)), this, SLOT(previewContextActionTriggered())); connect(m_showDetailsContextAction, SIGNAL(triggered(bool)), this, SLOT(showDetailsButtonClicked()));
connect(m_findFileContextAction, SIGNAL(triggered(bool)), this, SLOT(findFileContextActionTriggered())); connect(m_previewContextAction, SIGNAL(triggered(bool)), this, SLOT(previewContextActionTriggered()));
connect(m_exportCsvContextAction, SIGNAL(triggered(bool)), this, SLOT(exportCsvContextActionTriggered())); connect(m_findFileContextAction, SIGNAL(triggered(bool)), this, SLOT(findFileContextActionTriggered()));
connect(m_importCsvContextAction, SIGNAL(triggered(bool)), this, SLOT(importCsvContextActionTriggered())); connect(m_exportCsvContextAction, SIGNAL(triggered(bool)), this, SLOT(exportCsvContextActionTriggered()));
connect(m_importCsvContextAction, SIGNAL(triggered(bool)), this, SLOT(importCsvContextActionTriggered()));
//-------------------------------- //--------------------------------
// Setup "Output" tab // Setup "Output" tab
@ -714,6 +735,7 @@ MainWindow::~MainWindow(void)
LAMEXP_DELETE(m_outputFolderFavoritesMenu); LAMEXP_DELETE(m_outputFolderFavoritesMenu);
LAMEXP_DELETE(m_outputFolderContextMenu); LAMEXP_DELETE(m_outputFolderContextMenu);
LAMEXP_DELETE(m_dropBox); LAMEXP_DELETE(m_dropBox);
LAMEXP_DELETE(m_evenFilterCornerWidget);
LAMEXP_DELETE(m_evenFilterCustumParamsHelp); LAMEXP_DELETE(m_evenFilterCustumParamsHelp);
LAMEXP_DELETE(m_evenFilterOutputFolderMouse); LAMEXP_DELETE(m_evenFilterOutputFolderMouse);
LAMEXP_DELETE(m_evenFilterOutputFolderView); LAMEXP_DELETE(m_evenFilterOutputFolderView);
@ -864,6 +886,7 @@ bool MainWindow::checkForUpdates(void)
if(updateDialog->getSuccess()) if(updateDialog->getSuccess())
{ {
SHOW_CORNER_WIDGET(false);
m_settings->autoUpdateLastCheck(QDate::currentDate().toString(Qt::ISODate)); m_settings->autoUpdateLastCheck(QDate::currentDate().toString(Qt::ISODate));
bReadyToInstall = updateDialog->updateReadyToInstall(); bReadyToInstall = updateDialog->updateReadyToInstall();
} }
@ -1005,78 +1028,93 @@ void MainWindow::showEvent(QShowEvent *event)
*/ */
void MainWindow::changeEvent(QEvent *e) void MainWindow::changeEvent(QEvent *e)
{ {
if(e->type() == QEvent::LanguageChange) QMainWindow::changeEvent(e);
if(e->type() != QEvent::LanguageChange)
{ {
/*qWarning("\nMainWindow::changeEvent()\n");*/ return;
int comboBoxIndex[8];
//Backup combobox indices, as retranslateUi() resets
comboBoxIndex[0] = ui->comboBoxMP3ChannelMode->currentIndex();
comboBoxIndex[1] = ui->comboBoxSamplingRate->currentIndex();
comboBoxIndex[2] = ui->comboBoxAACProfile->currentIndex();
comboBoxIndex[3] = ui->comboBoxAftenCodingMode->currentIndex();
comboBoxIndex[4] = ui->comboBoxAftenDRCMode->currentIndex();
comboBoxIndex[5] = ui->comboBoxNormalizationMode->currentIndex();
comboBoxIndex[6] = 0; //comboBoxOpusOptimize->currentIndex();
comboBoxIndex[7] = ui->comboBoxOpusFramesize->currentIndex();
//Re-translate from UIC
ui->retranslateUi(this);
//Restore combobox indices
ui->comboBoxMP3ChannelMode->setCurrentIndex(comboBoxIndex[0]);
ui->comboBoxSamplingRate->setCurrentIndex(comboBoxIndex[1]);
ui->comboBoxAACProfile->setCurrentIndex(comboBoxIndex[2]);
ui->comboBoxAftenCodingMode->setCurrentIndex(comboBoxIndex[3]);
ui->comboBoxAftenDRCMode->setCurrentIndex(comboBoxIndex[4]);
ui->comboBoxNormalizationMode->setCurrentIndex(comboBoxIndex[5]);
//comboBoxOpusOptimize->setCurrentIndex(comboBoxIndex[6]);
ui->comboBoxOpusFramesize->setCurrentIndex(comboBoxIndex[7]);
//Update the window title
if(LAMEXP_DEBUG)
{
setWindowTitle(QString("%1 [!!! DEBUG BUILD !!!]").arg(windowTitle()));
}
else if(lamexp_version_demo())
{
setWindowTitle(QString("%1 [%2]").arg(windowTitle(), tr("DEMO VERSION")));
}
//Manually re-translate widgets that UIC doesn't handle
m_outputFolderNoteBox->setText(tr("Initializing directory outline, please be patient..."));
m_dropNoteLabel->setText(QString("<br><img src=\":/images/DropZone.png\"><br><br>%1").arg(tr("You can drop in audio files here!")));
m_showDetailsContextAction->setText(tr("Show Details"));
m_previewContextAction->setText(tr("Open File in External Application"));
m_findFileContextAction->setText(tr("Browse File Location"));
m_showFolderContextAction->setText(tr("Browse Selected Folder"));
m_refreshFolderContextAction->setText(tr("Refresh Directory Outline"));
m_goUpFolderContextAction->setText(tr("Go To Parent Directory"));
m_addFavoriteFolderAction->setText(tr("Bookmark Current Output Folder"));
m_exportCsvContextAction->setText(tr("Export Meta Tags to CSV File"));
m_importCsvContextAction->setText(tr("Import Meta Tags from CSV File"));
//Force GUI update
m_metaInfoModel->clearData();
m_metaInfoModel->setData(m_metaInfoModel->index(4, 1), m_settings->metaInfoPosition());
updateEncoder(m_settings->compressionEncoder());
updateLameAlgoQuality(ui->sliderLameAlgoQuality->value());
updateMaximumInstances(ui->sliderMaxInstances->value());
renameOutputPatternChanged(ui->lineEditRenamePattern->text(), true);
//Re-install shell integration
if(m_settings->shellIntegrationEnabled())
{
ShellIntegration::install();
}
//Translate system menu
lamexp_update_sysmenu(this, IDM_ABOUTBOX, ui->buttonAbout->text());
//Force resize, if needed
tabPageChanged(ui->tabWidget->currentIndex(), true);
} }
int comboBoxIndex[8];
//Backup combobox indices, as retranslateUi() resets
comboBoxIndex[0] = ui->comboBoxMP3ChannelMode->currentIndex();
comboBoxIndex[1] = ui->comboBoxSamplingRate->currentIndex();
comboBoxIndex[2] = ui->comboBoxAACProfile->currentIndex();
comboBoxIndex[3] = ui->comboBoxAftenCodingMode->currentIndex();
comboBoxIndex[4] = ui->comboBoxAftenDRCMode->currentIndex();
comboBoxIndex[5] = ui->comboBoxNormalizationMode->currentIndex();
comboBoxIndex[6] = 0; //comboBoxOpusOptimize->currentIndex();
comboBoxIndex[7] = ui->comboBoxOpusFramesize->currentIndex();
//Re-translate from UIC
ui->retranslateUi(this);
//Restore combobox indices
ui->comboBoxMP3ChannelMode->setCurrentIndex(comboBoxIndex[0]);
ui->comboBoxSamplingRate->setCurrentIndex(comboBoxIndex[1]);
ui->comboBoxAACProfile->setCurrentIndex(comboBoxIndex[2]);
ui->comboBoxAftenCodingMode->setCurrentIndex(comboBoxIndex[3]);
ui->comboBoxAftenDRCMode->setCurrentIndex(comboBoxIndex[4]);
ui->comboBoxNormalizationMode->setCurrentIndex(comboBoxIndex[5]);
//comboBoxOpusOptimize->setCurrentIndex(comboBoxIndex[6]);
ui->comboBoxOpusFramesize->setCurrentIndex(comboBoxIndex[7]);
//Update the window title
if(LAMEXP_DEBUG)
{
setWindowTitle(QString("%1 [!!! DEBUG BUILD !!!]").arg(windowTitle()));
}
else if(lamexp_version_demo())
{
setWindowTitle(QString("%1 [%2]").arg(windowTitle(), tr("DEMO VERSION")));
}
//Manually re-translate widgets that UIC doesn't handle
m_outputFolderNoteBox->setText(tr("Initializing directory outline, please be patient..."));
m_dropNoteLabel->setText(QString("<br><img src=\":/images/DropZone.png\"><br><br>%1").arg(tr("You can drop in audio files here!")));
if(QLabel *cornerWidget = dynamic_cast<QLabel*>(ui->menubar->cornerWidget()))
{
cornerWidget->setText(QString("<nobr><img src=\":/icons/exclamation_small.png\">&nbsp;<b style=\"color:darkred\">%1</b>&nbsp;&nbsp;&nbsp;</nobr>").arg(tr("Check for Updates")));
}
m_showDetailsContextAction->setText(tr("Show Details"));
m_previewContextAction->setText(tr("Open File in External Application"));
m_findFileContextAction->setText(tr("Browse File Location"));
m_showFolderContextAction->setText(tr("Browse Selected Folder"));
m_refreshFolderContextAction->setText(tr("Refresh Directory Outline"));
m_goUpFolderContextAction->setText(tr("Go To Parent Directory"));
m_addFavoriteFolderAction->setText(tr("Bookmark Current Output Folder"));
m_exportCsvContextAction->setText(tr("Export Meta Tags to CSV File"));
m_importCsvContextAction->setText(tr("Import Meta Tags from CSV File"));
//Force GUI update
m_metaInfoModel->clearData();
m_metaInfoModel->setData(m_metaInfoModel->index(4, 1), m_settings->metaInfoPosition());
updateEncoder(m_settings->compressionEncoder());
updateLameAlgoQuality(ui->sliderLameAlgoQuality->value());
updateMaximumInstances(ui->sliderMaxInstances->value());
renameOutputPatternChanged(ui->lineEditRenamePattern->text(), true);
//Re-install shell integration
if(m_settings->shellIntegrationEnabled())
{
ShellIntegration::install();
}
//Translate system menu
lamexp_update_sysmenu(this, IDM_ABOUTBOX, ui->buttonAbout->text());
//Force resize event
QApplication::postEvent(this, new QResizeEvent(this->size(), QSize()));
for(QObjectList::ConstIterator iter = this->children().constBegin(); iter != this->children().constEnd(); iter++)
{
if(QWidget *child = dynamic_cast<QWidget*>(*iter))
{
QApplication::postEvent(child, new QResizeEvent(child->size(), QSize()));
}
}
//Force tabe page change
tabPageChanged(ui->tabWidget->currentIndex(), true);
} }
/* /*
@ -1135,7 +1173,7 @@ void MainWindow::resizeEvent(QResizeEvent *event)
m_dropNoteLabel->setGeometry(port->geometry()); m_dropNoteLabel->setGeometry(port->geometry());
} }
if (QWidget *port = ui->outputFolderView->viewport()) if(QWidget *port = ui->outputFolderView->viewport())
{ {
m_outputFolderNoteBox->setGeometry(16, (port->height() - 64) / 2, port->width() - 32, 64); m_outputFolderNoteBox->setGeometry(16, (port->height() - 64) / 2, port->width() - 32, 64);
} }
@ -1331,6 +1369,7 @@ void MainWindow::windowShown(void)
if(lamexp_current_date_safe() >= lamexp_version_date().addYears(1)) if(lamexp_current_date_safe() >= lamexp_version_date().addYears(1))
{ {
qWarning("Binary is more than a year old, time to update!"); qWarning("Binary is more than a year old, time to update!");
SHOW_CORNER_WIDGET(true);
int ret = QMessageBox::warning(this, tr("Urgent Update"), NOBR(tr("Your version of LameXP is more than a year old. Time for an update!")), tr("Check for Updates"), tr("Exit Program"), tr("Ignore")); int ret = QMessageBox::warning(this, tr("Urgent Update"), NOBR(tr("Your version of LameXP is more than a year old. Time for an update!")), tr("Check for Updates"), tr("Exit Program"), tr("Ignore"));
switch(ret) switch(ret)
{ {
@ -1351,17 +1390,21 @@ void MainWindow::windowShown(void)
break; break;
} }
} }
else if(m_settings->autoUpdateEnabled()) else
{ {
QDate lastUpdateCheck = QDate::fromString(m_settings->autoUpdateLastCheck(), Qt::ISODate); QDate lastUpdateCheck = QDate::fromString(m_settings->autoUpdateLastCheck(), Qt::ISODate);
if(!firstRun && (!lastUpdateCheck.isValid() || lamexp_current_date_safe() >= lastUpdateCheck.addDays(14))) if((!firstRun) && ((!lastUpdateCheck.isValid()) || (lamexp_current_date_safe() >= lastUpdateCheck.addDays(14))))
{ {
if(QMessageBox::information(this, tr("Update Reminder"), NOBR(lastUpdateCheck.isValid() ? tr("Your last update check was more than 14 days ago. Check for updates now?") : tr("Your did not check for LameXP updates yet. Check for updates now?")), tr("Check for Updates"), tr("Postpone")) == 0) SHOW_CORNER_WIDGET(true);
if(m_settings->autoUpdateEnabled())
{ {
if(checkForUpdates()) if(QMessageBox::information(this, tr("Update Reminder"), NOBR(lastUpdateCheck.isValid() ? tr("Your last update check was more than 14 days ago. Check for updates now?") : tr("Your did not check for LameXP updates yet. Check for updates now?")), tr("Check for Updates"), tr("Postpone")) == 0)
{ {
QApplication::quit(); if(checkForUpdates())
return; {
QApplication::quit();
return;
}
} }
} }
} }
@ -1727,6 +1770,21 @@ void MainWindow::tabActionActivated(QAction *action)
} }
} }
// =========================================================
// Menubar slots
// =========================================================
/*
* Handle corner widget Event
*/
void MainWindow::cornerWidgetEventOccurred(QWidget *sender, QEvent *event)
{
if(event->type() == QEvent::MouseButtonPress)
{
QTimer::singleShot(0, this, SLOT(checkUpdatesActionActivated()));
}
}
// ========================================================= // =========================================================
// View menu slots // View menu slots
// ========================================================= // =========================================================

View File

@ -85,6 +85,7 @@ private slots:
void clearMetaButtonClicked(void); void clearMetaButtonClicked(void);
void closeButtonClicked(void); void closeButtonClicked(void);
void compressionTabEventOccurred(QWidget*, QEvent*); void compressionTabEventOccurred(QWidget*, QEvent*);
void cornerWidgetEventOccurred(QWidget *sender, QEvent *event);
void customParamsChanged(void); void customParamsChanged(void);
void customParamsHelpRequested(QWidget *obj, QEvent *event); void customParamsHelpRequested(QWidget *obj, QEvent *event);
void customTempFolderChanged(const QString &text); void customTempFolderChanged(const QString &text);
@ -231,6 +232,7 @@ private:
QButtonGroup *m_modeButtonGroup; QButtonGroup *m_modeButtonGroup;
QButtonGroup *m_overwriteButtonGroup; QButtonGroup *m_overwriteButtonGroup;
CustomEventFilter *m_evenFilterCornerWidget;
CustomEventFilter *m_evenFilterCustumParamsHelp; CustomEventFilter *m_evenFilterCustumParamsHelp;
CustomEventFilter *m_evenFilterOutputFolderMouse; CustomEventFilter *m_evenFilterOutputFolderMouse;
CustomEventFilter *m_evenFilterOutputFolderView; CustomEventFilter *m_evenFilterOutputFolderView;

View File

@ -152,6 +152,7 @@ ProcessingDialog::ProcessingDialog(FileListModel *fileListModel, const AudioFile
m_ramObserver(NULL), m_ramObserver(NULL),
m_progressViewFilter(-1), m_progressViewFilter(-1),
m_initThreads(0), m_initThreads(0),
m_defaultColor(new QColor()),
m_firstShow(true) m_firstShow(true)
{ {
//Init the dialog, from the .ui file //Init the dialog, from the .ui file
@ -348,6 +349,7 @@ ProcessingDialog::~ProcessingDialog(void)
LAMEXP_DELETE(m_contextMenu); LAMEXP_DELETE(m_contextMenu);
LAMEXP_DELETE(m_progressModel); LAMEXP_DELETE(m_progressModel);
LAMEXP_DELETE(m_threadPool); LAMEXP_DELETE(m_threadPool);
LAMEXP_DELETE(m_defaultColor);
WinSevenTaskbar::setOverlayIcon(this, NULL); WinSevenTaskbar::setOverlayIcon(this, NULL);
WinSevenTaskbar::setTaskbarState(this, WinSevenTaskbar::WinSevenTaskbarNoState); WinSevenTaskbar::setTaskbarState(this, WinSevenTaskbar::WinSevenTaskbarNoState);
@ -407,21 +409,19 @@ void ProcessingDialog::closeEvent(QCloseEvent *event)
bool ProcessingDialog::eventFilter(QObject *obj, QEvent *event) bool ProcessingDialog::eventFilter(QObject *obj, QEvent *event)
{ {
static QColor defaultColor = QColor();
if(obj == ui->label_versionInfo) if(obj == ui->label_versionInfo)
{ {
if(event->type() == QEvent::Enter) if(event->type() == QEvent::Enter)
{ {
QPalette palette = ui->label_versionInfo->palette(); QPalette palette = ui->label_versionInfo->palette();
defaultColor = palette.color(QPalette::Normal, QPalette::WindowText); *m_defaultColor = palette.color(QPalette::Normal, QPalette::WindowText);
palette.setColor(QPalette::Normal, QPalette::WindowText, Qt::red); palette.setColor(QPalette::Normal, QPalette::WindowText, Qt::red);
ui->label_versionInfo->setPalette(palette); ui->label_versionInfo->setPalette(palette);
} }
else if(event->type() == QEvent::Leave) else if(event->type() == QEvent::Leave)
{ {
QPalette palette = ui->label_versionInfo->palette(); QPalette palette = ui->label_versionInfo->palette();
palette.setColor(QPalette::Normal, QPalette::WindowText, defaultColor); palette.setColor(QPalette::Normal, QPalette::WindowText, *m_defaultColor);
ui->label_versionInfo->setPalette(palette); ui->label_versionInfo->setPalette(palette);
} }
else if(event->type() == QEvent::MouseButtonPress) else if(event->type() == QEvent::MouseButtonPress)

View File

@ -136,4 +136,5 @@ private:
DiskObserverThread *m_diskObserver; DiskObserverThread *m_diskObserver;
qint64 m_timerStart; qint64 m_timerStart;
int m_progressViewFilter; int m_progressViewFilter;
QColor *m_defaultColor;
}; };

View File

@ -109,7 +109,7 @@ class QAACEncoderInfo : public AbstractEncoderInfo
virtual const char *description(void) const virtual const char *description(void) const
{ {
static const char* s_description = "QAAC/QuickTime (\x0C2\x0A9 Appel)"; static const char* s_description = "QAAC/QuickTime (\x0C2\x0A9 Apple Inc.)";
return s_description; return s_description;
} }
} }
@ -121,10 +121,11 @@ static const g_qaacEncoderInfo;
QAACEncoder::QAACEncoder(void) QAACEncoder::QAACEncoder(void)
: :
m_binary_enc(lamexp_lookup_tool("qaac.exe")), m_binary_qaac(lamexp_lookup_tool("qaac.exe")),
m_binary_dll(lamexp_lookup_tool("libsoxrate.dll")) m_binary_soxr(lamexp_lookup_tool("libsoxr.dll")),
m_binary_soxc(lamexp_lookup_tool("libsoxconvolver.dll"))
{ {
if(m_binary_enc.isEmpty() || m_binary_dll.isEmpty()) if(m_binary_qaac.isEmpty() || m_binary_soxr.isEmpty() || m_binary_soxc.isEmpty())
{ {
THROW("Error initializing QAAC. Tool 'qaac.exe' is not registred!"); THROW("Error initializing QAAC. Tool 'qaac.exe' is not registred!");
} }
@ -189,7 +190,7 @@ bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInf
args << "-o" << QDir::toNativeSeparators(outputFile); args << "-o" << QDir::toNativeSeparators(outputFile);
args << QDir::toNativeSeparators(sourceFile); args << QDir::toNativeSeparators(sourceFile);
if(!startProcess(process, m_binary_enc, args)) if(!startProcess(process, m_binary_qaac, args))
{ {
return false; return false;
} }

View File

@ -45,7 +45,8 @@ public:
static const AbstractEncoderInfo *getEncoderInfo(void); static const AbstractEncoderInfo *getEncoderInfo(void);
private: private:
const QString m_binary_enc; const QString m_binary_qaac;
const QString m_binary_dll; const QString m_binary_soxr;
const QString m_binary_soxc;
int m_configProfile; int m_configProfile;
}; };

View File

@ -186,6 +186,7 @@ bool lamexp_install_translator_from_file(const QString &qmFile);
void lamexp_invalid_param_handler(const wchar_t*, const wchar_t*, const wchar_t*, unsigned int, uintptr_t); void lamexp_invalid_param_handler(const wchar_t*, const wchar_t*, const wchar_t*, unsigned int, uintptr_t);
void lamexp_ipc_read(unsigned int *command, char* message, size_t buffSize); void lamexp_ipc_read(unsigned int *command, char* message, size_t buffSize);
void lamexp_ipc_send(unsigned int command, const char* message); void lamexp_ipc_send(unsigned int command, const char* message);
bool lamexp_is_executable(const QString &path);
bool lamexp_is_hibernation_supported(void); bool lamexp_is_hibernation_supported(void);
const QString &lamexp_known_folder(lamexp_known_folder_t folder_id); const QString &lamexp_known_folder(lamexp_known_folder_t folder_id);
const QString lamexp_lookup_tool(const QString &toolName); const QString lamexp_lookup_tool(const QString &toolName);

View File

@ -106,8 +106,10 @@ static const unsigned int g_lamexp_toolver_coreaudio = VER_LAMEXP_TOOL_COREAUDIO
#if (_MSC_VER == 1800) #if (_MSC_VER == 1800)
#if (_MSC_FULL_VER < 180021005) #if (_MSC_FULL_VER < 180021005)
static const char *g_lamexp_version_compiler = "MSVC 2013-Beta"; static const char *g_lamexp_version_compiler = "MSVC 2013-Beta";
#elif (_MSC_FULL_VER == 180021005) #elif (_MSC_FULL_VER < 180030501)
static const char *g_lamexp_version_compiler = "MSVC 2013"; static const char *g_lamexp_version_compiler = "MSVC 2013";
#elif (_MSC_FULL_VER == 180030501)
static const char *g_lamexp_version_compiler = "MSVC 2013.2";
#else #else
#error Compiler version is not supported yet! #error Compiler version is not supported yet!
#endif #endif
@ -311,7 +313,7 @@ bool lamexp_portable_mode(void)
QString baseName = QFileInfo(QApplication::applicationFilePath()).completeBaseName(); QString baseName = QFileInfo(QApplication::applicationFilePath()).completeBaseName();
int idx1 = baseName.indexOf("lamexp", 0, Qt::CaseInsensitive); int idx1 = baseName.indexOf("lamexp", 0, Qt::CaseInsensitive);
int idx2 = baseName.lastIndexOf("portable", -1, Qt::CaseInsensitive); int idx2 = baseName.lastIndexOf("portable", -1, Qt::CaseInsensitive);
g_lamexp_portable.bPortableModeEnabled = (idx1 >= 0) && (idx2 >= 0) && (idx1 < idx2); g_lamexp_portable.bPortableModeEnabled = ((idx1 >= 0) && (idx2 >= 0) && (idx1 < idx2));
} }
g_lamexp_portable.bInitialized = true; g_lamexp_portable.bInitialized = true;
} }

View File

@ -1101,6 +1101,20 @@ bool lamexp_init_qt(int argc, char* argv[])
} }
} }
//Enable larger/smaller font size
double fontScaleFactor = 1.0;
if(arguments.contains("--huge-font", Qt::CaseInsensitive)) fontScaleFactor = 1.500;
if(arguments.contains("--big-font", Qt::CaseInsensitive)) fontScaleFactor = 1.250;
if(arguments.contains("--small-font", Qt::CaseInsensitive)) fontScaleFactor = 0.875;
if(arguments.contains("--tiny-font", Qt::CaseInsensitive)) fontScaleFactor = 0.750;
if(!qFuzzyCompare(fontScaleFactor, 1.0))
{
qWarning("Application font scale factor set to: %.3f\n", fontScaleFactor);
QFont appFont = application->font();
appFont.setPointSizeF(appFont.pointSizeF() * fontScaleFactor);
application->setFont(appFont);
}
//Add the default translations //Add the default translations
lamexp_translation_init(); lamexp_translation_init();
@ -2253,6 +2267,20 @@ bool lamexp_user_is_admin(void)
return isAdmin; return isAdmin;
} }
/*
* Check if file is a valid Win32/Win64 executable
*/
bool lamexp_is_executable(const QString &path)
{
bool bIsExecutable = false;
DWORD binaryType;
if(GetBinaryType(QWCHAR(QDir::toNativeSeparators(path)), &binaryType))
{
bIsExecutable = (binaryType == SCS_32BIT_BINARY || binaryType == SCS_64BIT_BINARY);
}
return bIsExecutable;
}
/* /*
* Fatal application exit * Fatal application exit
*/ */

View File

@ -41,7 +41,7 @@ public:
void setFilePath(const QString &newPath, bool isOwner = true); void setFilePath(const QString &newPath, bool isOwner = true);
void clear(void); void clear(void);
inline bool isEmpty(void) const { return (m_data != NULL); } inline bool isEmpty(void) const { return (m_data == NULL); }
private: private:
const QString m_nullString; const QString m_nullString;

View File

@ -45,6 +45,32 @@ while(0)
} \ } \
while(0) while(0)
//if((!(OTHER.NAME.isEmpty())) && ((FORCE) || (this.NAME.isEmpty()))) /*this.NAME = OTHER.NAME;*/ \
#define UPDATE_STR(OTHER, FORCE, NAME) do \
{ \
if(!(((OTHER).NAME).isEmpty())) \
{ \
if((FORCE) || ((this->NAME).isEmpty())) (this->NAME) = ((OTHER).NAME); \
} \
} \
while(0)
#define UPDATE_INT(OTHER, FORCE, NAME) do \
{ \
if(((OTHER).NAME) > 0) \
{ \
if((FORCE) || ((this->NAME) == 0)) (this->NAME) = ((OTHER).NAME); \
} \
} \
while(0)
#define ASSIGN_VAL(OTHER, NAME) do \
{ \
(this->NAME) = ((OTHER).NAME); \
} \
while(0)
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Audio File - Meta Info // Audio File - Meta Info
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -56,40 +82,42 @@ AudioFileModel_MetaInfo::AudioFileModel_MetaInfo(void)
AudioFileModel_MetaInfo::AudioFileModel_MetaInfo(const AudioFileModel_MetaInfo &model) AudioFileModel_MetaInfo::AudioFileModel_MetaInfo(const AudioFileModel_MetaInfo &model)
{ {
m_titel = model.m_titel; ASSIGN_VAL(model, m_titel);
m_artist = model.m_artist; ASSIGN_VAL(model, m_artist);
m_album = model.m_album; ASSIGN_VAL(model, m_album);
m_genre = model.m_genre; ASSIGN_VAL(model, m_genre);
m_comment = model.m_comment; ASSIGN_VAL(model, m_comment);
m_cover = model.m_cover; ASSIGN_VAL(model, m_cover);
m_year = model.m_year; ASSIGN_VAL(model, m_year);
m_position = model.m_position; ASSIGN_VAL(model, m_position);
} }
AudioFileModel_MetaInfo &AudioFileModel_MetaInfo::operator=(const AudioFileModel_MetaInfo &model) AudioFileModel_MetaInfo &AudioFileModel_MetaInfo::operator=(const AudioFileModel_MetaInfo &model)
{ {
m_titel = model.m_titel; ASSIGN_VAL(model, m_titel);
m_artist = model.m_artist; ASSIGN_VAL(model, m_artist);
m_album = model.m_album; ASSIGN_VAL(model, m_album);
m_genre = model.m_genre; ASSIGN_VAL(model, m_genre);
m_comment = model.m_comment; ASSIGN_VAL(model, m_comment);
m_cover = model.m_cover; ASSIGN_VAL(model, m_cover);
m_year = model.m_year; ASSIGN_VAL(model, m_year);
m_position = model.m_position; ASSIGN_VAL(model, m_position);
return (*this); return (*this);
} }
#define IS_EMPTY(X) ((X).isEmpty() ? "YES" : "NO")
void AudioFileModel_MetaInfo::update(const AudioFileModel_MetaInfo &model, const bool replace) void AudioFileModel_MetaInfo::update(const AudioFileModel_MetaInfo &model, const bool replace)
{ {
if((!model.m_titel.isEmpty()) && (replace || m_titel.isEmpty())) m_titel = model.m_titel; UPDATE_STR(model, replace, m_titel);
if((!model.m_artist.isEmpty()) && (replace || m_artist.isEmpty())) m_artist = model.m_artist; UPDATE_STR(model, replace, m_artist);
if((!model.m_album.isEmpty()) && (replace || m_album.isEmpty())) m_album = model.m_album; UPDATE_STR(model, replace, m_album);
if((!model.m_genre.isEmpty()) && (replace || m_genre.isEmpty())) m_genre = model.m_genre; UPDATE_STR(model, replace, m_genre);
if((!model.m_comment.isEmpty()) && (replace || m_comment.isEmpty())) m_comment = model.m_comment; UPDATE_STR(model, replace, m_comment);
if((!model.m_cover.isEmpty()) && (replace || m_cover.isEmpty())) m_cover = model.m_cover; UPDATE_STR(model, replace, m_cover);
if((model.m_year > 0) && (replace || (m_year == 0))) m_year = model.m_year; UPDATE_INT(model, replace, m_year);
if((model.m_position > 0) && (replace || (m_position == 0))) m_position = model.m_position; UPDATE_INT(model, replace, m_position);
} }
AudioFileModel_MetaInfo::~AudioFileModel_MetaInfo(void) AudioFileModel_MetaInfo::~AudioFileModel_MetaInfo(void)
@ -132,34 +160,34 @@ AudioFileModel_TechInfo::AudioFileModel_TechInfo(void)
AudioFileModel_TechInfo::AudioFileModel_TechInfo(const AudioFileModel_TechInfo &model) AudioFileModel_TechInfo::AudioFileModel_TechInfo(const AudioFileModel_TechInfo &model)
{ {
m_containerType = model.m_containerType; ASSIGN_VAL(model, m_containerType);
m_containerProfile = model.m_containerProfile; ASSIGN_VAL(model, m_containerProfile);
m_audioType = model.m_audioType; ASSIGN_VAL(model, m_audioType);
m_audioProfile = model.m_audioProfile; ASSIGN_VAL(model, m_audioProfile);
m_audioVersion = model.m_audioVersion; ASSIGN_VAL(model, m_audioVersion);
m_audioEncodeLib = model.m_audioEncodeLib; ASSIGN_VAL(model, m_audioEncodeLib);
m_audioSamplerate = model.m_audioSamplerate; ASSIGN_VAL(model, m_audioSamplerate);
m_audioChannels = model.m_audioChannels; ASSIGN_VAL(model, m_audioChannels);
m_audioBitdepth = model.m_audioBitdepth; ASSIGN_VAL(model, m_audioBitdepth);
m_audioBitrate = model.m_audioBitrate; ASSIGN_VAL(model, m_audioBitrate);
m_audioBitrateMode = model.m_audioBitrateMode; ASSIGN_VAL(model, m_audioBitrateMode);
m_duration = model.m_duration; ASSIGN_VAL(model, m_duration);
} }
AudioFileModel_TechInfo &AudioFileModel_TechInfo::operator=(const AudioFileModel_TechInfo &model) AudioFileModel_TechInfo &AudioFileModel_TechInfo::operator=(const AudioFileModel_TechInfo &model)
{ {
m_containerType = model.m_containerType; ASSIGN_VAL(model, m_containerType);
m_containerProfile = model.m_containerProfile; ASSIGN_VAL(model, m_containerProfile);
m_audioType = model.m_audioType; ASSIGN_VAL(model, m_audioType);
m_audioProfile = model.m_audioProfile; ASSIGN_VAL(model, m_audioProfile);
m_audioVersion = model.m_audioVersion; ASSIGN_VAL(model, m_audioVersion);
m_audioEncodeLib = model.m_audioEncodeLib; ASSIGN_VAL(model, m_audioEncodeLib);
m_audioSamplerate = model.m_audioSamplerate; ASSIGN_VAL(model, m_audioSamplerate);
m_audioChannels = model.m_audioChannels; ASSIGN_VAL(model, m_audioChannels);
m_audioBitdepth = model.m_audioBitdepth; ASSIGN_VAL(model, m_audioBitdepth);
m_audioBitrate = model.m_audioBitrate; ASSIGN_VAL(model, m_audioBitrate);
m_audioBitrateMode = model.m_audioBitrateMode; ASSIGN_VAL(model, m_audioBitrateMode);
m_duration = model.m_duration; ASSIGN_VAL(model, m_duration);
return (*this); return (*this);
} }
@ -199,16 +227,16 @@ AudioFileModel::AudioFileModel(const QString &path)
AudioFileModel::AudioFileModel(const AudioFileModel &model) AudioFileModel::AudioFileModel(const AudioFileModel &model)
{ {
m_filePath = model.m_filePath; ASSIGN_VAL(model, m_filePath);
m_metaInfo = model.m_metaInfo; ASSIGN_VAL(model, m_metaInfo);
m_techInfo = model.m_techInfo; ASSIGN_VAL(model, m_techInfo);
} }
AudioFileModel &AudioFileModel::operator=(const AudioFileModel &model) AudioFileModel &AudioFileModel::operator=(const AudioFileModel &model)
{ {
m_filePath = model.m_filePath; ASSIGN_VAL(model, m_filePath);
m_metaInfo = model.m_metaInfo; ASSIGN_VAL(model, m_metaInfo);
m_techInfo = model.m_techInfo; ASSIGN_VAL(model, m_techInfo);
return (*this); return (*this);
} }

View File

@ -23,6 +23,7 @@
#include "Model_Settings.h" #include "Model_Settings.h"
#include "Global.h" #include "Global.h"
#include "Registry_Encoder.h"
#include <QSettings> #include <QSettings>
#include <QDesktopServices> #include <QDesktopServices>
@ -379,18 +380,12 @@ void SettingsModel::validate(void)
CHECK_RCMODE(Aften); CHECK_RCMODE(Aften);
CHECK_RCMODE(OpusEnc); CHECK_RCMODE(OpusEnc);
if(!(lamexp_check_tool("neroAacEnc.exe") && lamexp_check_tool("neroAacDec.exe") && lamexp_check_tool("neroAacTag.exe"))) if(EncoderRegistry::getAacEncoder() == AAC_ENCODER_NONE)
{ {
if(!(lamexp_check_tool("fhgaacenc.exe") && lamexp_check_tool("enc_fhgaac.dll"))) if(this->compressionEncoder() == SettingsModel::AACEncoder)
{ {
if(!(lamexp_check_tool("qaac.exe") && lamexp_check_tool("libsoxrate.dll"))) qWarning("AAC encoder selected, but not available any more. Reverting to MP3!");
{ this->compressionEncoder(SettingsModel::MP3Encoder);
if(this->compressionEncoder() == SettingsModel::AACEncoder)
{
qWarning("AAC encoder selected, but not available any more. Reverting to MP3!");
this->compressionEncoder(SettingsModel::MP3Encoder);
}
}
} }
} }
@ -566,7 +561,7 @@ LAMEXP_MAKE_OPTION_I(aftenExponentSearchSize, 8)
LAMEXP_MAKE_OPTION_B(aftenFastBitAllocation, false) LAMEXP_MAKE_OPTION_B(aftenFastBitAllocation, false)
LAMEXP_MAKE_OPTION_B(antivirNotificationsEnabled, true) LAMEXP_MAKE_OPTION_B(antivirNotificationsEnabled, true)
LAMEXP_MAKE_OPTION_B(autoUpdateCheckBeta, false) LAMEXP_MAKE_OPTION_B(autoUpdateCheckBeta, false)
LAMEXP_MAKE_OPTION_B(autoUpdateEnabled, true) LAMEXP_MAKE_OPTION_B(autoUpdateEnabled, (!lamexp_portable_mode()));
LAMEXP_MAKE_OPTION_S(autoUpdateLastCheck, "Never") LAMEXP_MAKE_OPTION_S(autoUpdateLastCheck, "Never")
LAMEXP_MAKE_OPTION_B(bitrateManagementEnabled, false) LAMEXP_MAKE_OPTION_B(bitrateManagementEnabled, false)
LAMEXP_MAKE_OPTION_I(bitrateManagementMaxRate, 500) LAMEXP_MAKE_OPTION_I(bitrateManagementMaxRate, 500)

View File

@ -476,7 +476,7 @@ void EncoderRegistry::resetAllEncoders(SettingsModel *settings)
int EncoderRegistry::getAacEncoder(void) int EncoderRegistry::getAacEncoder(void)
{ {
if(lamexp_check_tool("qaac.exe") && lamexp_check_tool("libsoxrate.dll")) if(lamexp_check_tool("qaac.exe") && lamexp_check_tool("libsoxr.dll") && lamexp_check_tool("libsoxconvolver.dll"))
{ {
return SettingsModel::AAC_ENCODER_QAAC; return SettingsModel::AAC_ENCODER_QAAC;
} }

View File

@ -57,7 +57,6 @@ static const char *update_mirrors_prim[] =
"http://muldersoft.kilu.de/", "http://muldersoft.kilu.de/",
"http://muldersoft.zxq.net/", "http://muldersoft.zxq.net/",
"http://lamexp.sourceforge.net/", "http://lamexp.sourceforge.net/",
"http://lamexp.berlios.de/",
"http://lordmulder.github.io/LameXP/", "http://lordmulder.github.io/LameXP/",
"http://lord_mulder.bitbucket.org/", "http://lord_mulder.bitbucket.org/",
"http://www.tricksoft.de/", "http://www.tricksoft.de/",
@ -253,6 +252,7 @@ void UpdateCheckThread::checkForUpdates(void)
// ----- Test Internet Connection ----- // // ----- Test Internet Connection ----- //
int connectionScore = 0; int connectionScore = 0;
int maxConnectTries = (3 * MIN_CONNSCORE) / 2;
log("Checking internet connection..."); log("Checking internet connection...");
setStatus(UpdateStatus_CheckingConnection); setStatus(UpdateStatus_CheckingConnection);
@ -277,32 +277,22 @@ void UpdateCheckThread::checkForUpdates(void)
} }
lamexp_seed_rand(); lamexp_seed_rand();
while(!hostList.isEmpty())
while(!(hostList.isEmpty() || (connectionScore >= MIN_CONNSCORE) || (maxConnectTries < 1)))
{ {
QString currentHost = hostList.takeAt(lamexp_rand() % hostList.count()); switch(tryContactHost(hostList.takeAt(lamexp_rand() % hostList.count())))
if(connectionScore < MIN_CONNSCORE)
{ {
log("", "Testing host:", currentHost); case 01: connectionScore += 1; break;
QString outFile = QString("%1/%2.htm").arg(lamexp_temp_folder2(), lamexp_rand_str()); case 02: connectionScore += 2; break;
bool httpOk = false; default: maxConnectTries -= 1; break;
if(getFile(currentHost, outFile, 0, &httpOk))
{
connectionScore++;
setProgress(qBound(1, connectionScore + 1, MIN_CONNSCORE + 1));
lamexp_sleep(64);
}
if(httpOk)
{
connectionScore++;
setProgress(qBound(1, connectionScore + 1, MIN_CONNSCORE + 1));
lamexp_sleep(64);
}
QFile::remove(outFile);
} }
setProgress(qBound(1, connectionScore + 1, MIN_CONNSCORE + 1));
lamexp_sleep(64);
} }
if(connectionScore < MIN_CONNSCORE) if(connectionScore < MIN_CONNSCORE)
{ {
log("", "Connectivity test has failed: Internet connection appears to be broken!");
setProgress(m_maxProgress); setProgress(m_maxProgress);
setStatus(UpdateStatus_ErrorConnectionTestFailed); setStatus(UpdateStatus_ErrorConnectionTestFailed);
return; return;
@ -441,6 +431,35 @@ void UpdateCheckThread::log(const QString &str1, const QString &str2, const QStr
if(!str4.isNull()) emit messageLogged(str4); if(!str4.isNull()) emit messageLogged(str4);
} }
int UpdateCheckThread::tryContactHost(const QString &url)
{
int result = -1; bool httpOkay = false;
const QString outFile = QString("%1/%2.htm").arg(lamexp_temp_folder2(), lamexp_rand_str());
log("", "Testing host:", url);
if(getFile(url, outFile, 0, &httpOkay))
{
log("Connection to host was established successfully.");
result = 2;
}
else
{
if(httpOkay)
{
log("Connection to host timed out after HTTP OK was received.");
result = 1;
}
else
{
log("Connection failed: The host could not be reached!");
result = 0;
}
}
QFile::remove(outFile);
return result;
}
bool UpdateCheckThread::tryUpdateMirror(UpdateInfo *updateInfo, const QString &url) bool UpdateCheckThread::tryUpdateMirror(UpdateInfo *updateInfo, const QString &url)
{ {
bool success = false; bool success = false;
@ -499,7 +518,7 @@ bool UpdateCheckThread::getFile(const QString &url, const QString &outFile, unsi
lamexp_init_process(process, output.absolutePath()); lamexp_init_process(process, output.absolutePath());
QStringList args; QStringList args;
args << "--no-cache" << "--no-dns-cache" << QString().sprintf("--max-redirect=%u", maxRedir); args << "-T" << "15" << "--no-cache" << "--no-dns-cache" << QString().sprintf("--max-redirect=%u", maxRedir);
args << QString("--referer=%1://%2/").arg(QUrl(url).scheme(), QUrl(url).host()) << "-U" << USER_AGENT_STR; args << QString("--referer=%1://%2/").arg(QUrl(url).scheme(), QUrl(url).host()) << "-U" << USER_AGENT_STR;
args << "-O" << output.fileName() << url; args << "-O" << output.fileName() << url;
@ -524,10 +543,10 @@ bool UpdateCheckThread::getFile(const QString &url, const QString &outFile, unsi
timer.start(); timer.start();
while(process.state() == QProcess::Running) while(process.state() != QProcess::NotRunning)
{ {
loop.exec(); loop.exec();
bool bTimeOut = (!timer.isActive()); const bool bTimeOut = (!timer.isActive());
while(process.canReadLine()) while(process.canReadLine())
{ {
QString line = QString::fromLatin1(process.readLine()).simplified(); QString line = QString::fromLatin1(process.readLine()).simplified();

View File

@ -102,6 +102,7 @@ private:
inline void log(const QString &str1, const QString &str2 = QString(), const QString &str3 = QString(), const QString &str4 = QString()); inline void log(const QString &str1, const QString &str2 = QString(), const QString &str3 = QString(), const QString &str4 = QString());
bool getFile(const QString &url, const QString &outFile, unsigned int maxRedir = 5, bool *httpOk = NULL); bool getFile(const QString &url, const QString &outFile, unsigned int maxRedir = 5, bool *httpOk = NULL);
int tryContactHost(const QString &url);
bool tryUpdateMirror(UpdateInfo *updateInfo, const QString &url); bool tryUpdateMirror(UpdateInfo *updateInfo, const QString &url);
bool checkSignature(const QString &file, const QString &signature); bool checkSignature(const QString &file, const QString &signature);
bool parseVersionInfo(const QString &file, UpdateInfo *updateInfo); bool parseVersionInfo(const QString &file, UpdateInfo *updateInfo);

View File

@ -546,15 +546,24 @@ void InitializationThread::initNeroAac(void)
bool neroFilesFound = true; bool neroFilesFound = true;
for(int i = 0; i < 3; i++) { if(!neroFileInfo[i].exists()) neroFilesFound = false; } for(int i = 0; i < 3; i++) { if(!neroFileInfo[i].exists()) neroFilesFound = false; }
//Lock the Nero binaries
if(!neroFilesFound) if(!neroFilesFound)
{ {
qDebug("Nero encoder binaries not found -> AAC encoding support will be disabled!\n"); qDebug("Nero encoder binaries not found -> AAC encoding support will be disabled!\n");
return; return;
} }
for(int i = 0; i < 3; i++)
{
if(!lamexp_is_executable(neroFileInfo[i].canonicalFilePath()))
{
qDebug("%s executbale is invalid -> AAC encoding support will be disabled!\n", QUTF8(neroFileInfo[i].fileName()));
return;
}
}
qDebug("Found Nero AAC encoder binary:\n%s\n", QUTF8(neroFileInfo[0].canonicalFilePath())); qDebug("Found Nero AAC encoder binary:\n%s\n", QUTF8(neroFileInfo[0].canonicalFilePath()));
//Lock the Nero binaries
LockedFile *neroBin[3]; LockedFile *neroBin[3];
for(int i = 0; i < 3; i++) neroBin[i] = NULL; for(int i = 0; i < 3; i++) neroBin[i] = NULL;
@ -651,16 +660,22 @@ void InitializationThread::initFhgAac(void)
bool fhgFilesFound = true; bool fhgFilesFound = true;
for(int i = 0; i < 5; i++) { if(!fhgFileInfo[i].exists()) fhgFilesFound = false; } for(int i = 0; i < 5; i++) { if(!fhgFileInfo[i].exists()) fhgFilesFound = false; }
//Lock the FhgAacEnc binaries
if(!fhgFilesFound) if(!fhgFilesFound)
{ {
qDebug("FhgAacEnc binaries not found -> FhgAacEnc support will be disabled!\n"); qDebug("FhgAacEnc binaries not found -> FhgAacEnc support will be disabled!\n");
return; return;
} }
if(!lamexp_is_executable(fhgFileInfo[0].canonicalFilePath()))
{
qDebug("FhgAacEnc executbale is invalid -> FhgAacEnc support will be disabled!\n");
return;
}
qDebug("Found FhgAacEnc cli_exe:\n%s\n", QUTF8(fhgFileInfo[0].canonicalFilePath())); qDebug("Found FhgAacEnc cli_exe:\n%s\n", QUTF8(fhgFileInfo[0].canonicalFilePath()));
qDebug("Found FhgAacEnc enc_dll:\n%s\n", QUTF8(fhgFileInfo[1].canonicalFilePath())); qDebug("Found FhgAacEnc enc_dll:\n%s\n", QUTF8(fhgFileInfo[1].canonicalFilePath()));
//Lock the FhgAacEnc binaries
LockedFile *fhgBin[5]; LockedFile *fhgBin[5];
for(int i = 0; i < 5; i++) fhgBin[i] = NULL; for(int i = 0; i < 5; i++) fhgBin[i] = NULL;
@ -743,35 +758,43 @@ void InitializationThread::initQAac(void)
{ {
const QString appPath = QDir(QCoreApplication::applicationDirPath()).canonicalPath(); const QString appPath = QDir(QCoreApplication::applicationDirPath()).canonicalPath();
QFileInfo qaacFileInfo[2]; QFileInfo qaacFileInfo[4];
qaacFileInfo[0] = QFileInfo(QString("%1/qaac.exe").arg(appPath)); qaacFileInfo[0] = QFileInfo(QString("%1/qaac.exe").arg(appPath));
qaacFileInfo[1] = QFileInfo(QString("%1/libsoxrate.dll").arg(appPath)); qaacFileInfo[1] = QFileInfo(QString("%1/libsoxr.dll").arg(appPath));
qaacFileInfo[2] = QFileInfo(QString("%1/libsoxconvolver.dll").arg(appPath));
qaacFileInfo[3] = QFileInfo(QString("%1/libgcc_s_sjlj-1.dll").arg(appPath));
bool qaacFilesFound = true; bool qaacFilesFound = true;
for(int i = 0; i < 2; i++) { if(!qaacFileInfo[i].exists()) qaacFilesFound = false; } for(int i = 0; i < 4; i++) { if(!qaacFileInfo[i].exists()) qaacFilesFound = false; }
//Lock the QAAC binaries
if(!qaacFilesFound) if(!qaacFilesFound)
{ {
qDebug("QAAC binaries not found -> QAAC support will be disabled!\n"); qDebug("QAAC binary or companion DLL's not found -> QAAC support will be disabled!\n");
return;
}
if(!lamexp_is_executable(qaacFileInfo[0].canonicalFilePath()))
{
qDebug("QAAC executbale is invalid -> QAAC support will be disabled!\n");
return; return;
} }
qDebug("Found QAAC encoder:\n%s\n", QUTF8(qaacFileInfo[0].canonicalFilePath())); qDebug("Found QAAC encoder:\n%s\n", QUTF8(qaacFileInfo[0].canonicalFilePath()));
LockedFile *qaacBin[2]; //Lock the required QAAC binaries
for(int i = 0; i < 2; i++) qaacBin[i] = NULL; LockedFile *qaacBin[4];
for(int i = 0; i < 4; i++) qaacBin[i] = NULL;
try try
{ {
for(int i = 0; i < 2; i++) for(int i = 0; i < 4; i++)
{ {
qaacBin[i] = new LockedFile(qaacFileInfo[i].canonicalFilePath()); qaacBin[i] = new LockedFile(qaacFileInfo[i].canonicalFilePath());
} }
} }
catch(...) catch(...)
{ {
for(int i = 0; i < 2; i++) LAMEXP_DELETE(qaacBin[i]); for(int i = 0; i < 4; i++) LAMEXP_DELETE(qaacBin[i]);
qWarning("Failed to get excluive lock to QAAC binary -> QAAC support will be disabled!"); qWarning("Failed to get excluive lock to QAAC binary -> QAAC support will be disabled!");
return; return;
} }
@ -787,14 +810,19 @@ void InitializationThread::initQAac(void)
qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData()); qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData());
process.kill(); process.kill();
process.waitForFinished(-1); process.waitForFinished(-1);
for(int i = 0; i < 2; i++) LAMEXP_DELETE(qaacBin[i]); for(int i = 0; i < 4; i++) LAMEXP_DELETE(qaacBin[i]);
return; return;
} }
QRegExp qaacEncSig("qaac (\\d)\\.(\\d)(\\d)", Qt::CaseInsensitive); QRegExp qaacEncSig("qaac (\\d)\\.(\\d)(\\d)", Qt::CaseInsensitive);
QRegExp coreEncSig("CoreAudioToolbox (\\d)\\.(\\d)\\.(\\d)\\.(\\d)", Qt::CaseInsensitive); QRegExp coreEncSig("CoreAudioToolbox (\\d)\\.(\\d)\\.(\\d)\\.(\\d)", Qt::CaseInsensitive);
QRegExp soxrEncSig("libsoxr-\\d\\.\\d\\.\\d", Qt::CaseInsensitive);
QRegExp soxcEncSig("libsoxconvolver \\d\\.\\d\\.\\d", Qt::CaseInsensitive);
unsigned int qaacVersion = 0; unsigned int qaacVersion = 0;
unsigned int coreVersion = 0; unsigned int coreVersion = 0;
bool soxrFound = false;
bool soxcFound = false;
while(process.state() != QProcess::NotRunning) while(process.state() != QProcess::NotRunning)
{ {
@ -804,7 +832,7 @@ void InitializationThread::initQAac(void)
qWarning("QAAC process time out -> killing!"); qWarning("QAAC process time out -> killing!");
process.kill(); process.kill();
process.waitForFinished(-1); process.waitForFinished(-1);
for(int i = 0; i < 2; i++) LAMEXP_DELETE(qaacBin[i]); for(int i = 0; i < 4; i++) LAMEXP_DELETE(qaacBin[i]);
return; return;
} }
while(process.bytesAvailable() > 0) while(process.bytesAvailable() > 0)
@ -835,6 +863,8 @@ void InitializationThread::initQAac(void)
coreVersion = (qBound(0U, tmp[0], 9U) * 1000) + (qBound(0U, tmp[1], 9U) * 100) + (qBound(0U, tmp[2], 9U) * 10) + qBound(0U, tmp[3], 9U); coreVersion = (qBound(0U, tmp[0], 9U) * 1000) + (qBound(0U, tmp[1], 9U) * 100) + (qBound(0U, tmp[2], 9U) * 10) + qBound(0U, tmp[3], 9U);
} }
} }
if(soxcEncSig.lastIndexIn(line) >= 0) { soxcFound = true; }
if(soxrEncSig.lastIndexIn(line) >= 0) { soxrFound = true; }
} }
} }
@ -843,33 +873,41 @@ void InitializationThread::initQAac(void)
if(!(qaacVersion > 0)) if(!(qaacVersion > 0))
{ {
qWarning("QAAC version couldn't be determined -> QAAC support will be disabled!"); qWarning("QAAC version couldn't be determined -> QAAC support will be disabled!");
for(int i = 0; i < 2; i++) LAMEXP_DELETE(qaacBin[i]); for(int i = 0; i < 4; i++) LAMEXP_DELETE(qaacBin[i]);
return; return;
} }
else if(qaacVersion < lamexp_toolver_qaacenc()) else if(qaacVersion < lamexp_toolver_qaacenc())
{ {
qWarning("QAAC version is too much outdated (%s) -> QAAC support will be disabled!", lamexp_version2string("v?.??", qaacVersion, "N/A").toLatin1().constData()); qWarning("QAAC version is too much outdated (%s) -> QAAC support will be disabled!", lamexp_version2string("v?.??", qaacVersion, "N/A").toLatin1().constData());
qWarning("Minimum required QAAC version currently is: %s.\n", lamexp_version2string("v?.??", lamexp_toolver_qaacenc(), "N/A").toLatin1().constData()); qWarning("Minimum required QAAC version currently is: %s.\n", lamexp_version2string("v?.??", lamexp_toolver_qaacenc(), "N/A").toLatin1().constData());
for(int i = 0; i < 2; i++) LAMEXP_DELETE(qaacBin[i]); for(int i = 0; i < 4; i++) LAMEXP_DELETE(qaacBin[i]);
return; return;
} }
if(!(coreVersion > 0)) if(!(coreVersion > 0))
{ {
qWarning("CoreAudioToolbox version couldn't be determined -> QAAC support will be disabled!"); qWarning("CoreAudioToolbox version couldn't be determined -> QAAC support will be disabled!");
for(int i = 0; i < 2; i++) LAMEXP_DELETE(qaacBin[i]); for(int i = 0; i < 4; i++) LAMEXP_DELETE(qaacBin[i]);
return; return;
} }
else if(coreVersion < lamexp_toolver_coreaudio()) else if(coreVersion < lamexp_toolver_coreaudio())
{ {
qWarning("CoreAudioToolbox version is too much outdated (%s) -> QAAC support will be disabled!", lamexp_version2string("v?.?.?.?", coreVersion, "N/A").toLatin1().constData()); qWarning("CoreAudioToolbox version is too much outdated (%s) -> QAAC support will be disabled!", lamexp_version2string("v?.?.?.?", coreVersion, "N/A").toLatin1().constData());
qWarning("Minimum required CoreAudioToolbox version currently is: %s.\n", lamexp_version2string("v?.??", lamexp_toolver_coreaudio(), "N/A").toLatin1().constData()); qWarning("Minimum required CoreAudioToolbox version currently is: %s.\n", lamexp_version2string("v?.??", lamexp_toolver_coreaudio(), "N/A").toLatin1().constData());
for(int i = 0; i < 2; i++) LAMEXP_DELETE(qaacBin[i]); for(int i = 0; i < 4; i++) LAMEXP_DELETE(qaacBin[i]);
return;
}
if(!(soxrFound && soxcFound))
{
qWarning("libsoxr and/or libsoxconvolver not available -> QAAC support will be disabled!\n");
return; return;
} }
lamexp_register_tool(qaacFileInfo[0].fileName(), qaacBin[0], qaacVersion); lamexp_register_tool(qaacFileInfo[0].fileName(), qaacBin[0], qaacVersion);
lamexp_register_tool(qaacFileInfo[1].fileName(), qaacBin[1], qaacVersion); lamexp_register_tool(qaacFileInfo[1].fileName(), qaacBin[1], qaacVersion);
lamexp_register_tool(qaacFileInfo[2].fileName(), qaacBin[2], qaacVersion);
lamexp_register_tool(qaacFileInfo[3].fileName(), qaacBin[3], qaacVersion);
} }
void InitializationThread::selfTest(void) void InitializationThread::selfTest(void)

View File

@ -66,18 +66,18 @@ g_lamexp_tools[] =
{"53cfab3896a47d48f523315f475fa07856d468ad1aefcc8cce19c18cdf509e2f92840dab92a442995df36d941cb7a6ca", CPU_TYPE_ALL_GEN, "lame.i386.exe", 3995, "Final"}, {"53cfab3896a47d48f523315f475fa07856d468ad1aefcc8cce19c18cdf509e2f92840dab92a442995df36d941cb7a6ca", CPU_TYPE_ALL_GEN, "lame.i386.exe", 3995, "Final"},
{"9511e7ef2ad10de05386eedf7f14d637edab894a53dacd2f8f15c6f8ed582f12c25fb5bf88438e62c46b8eb92e7634b2", CPU_TYPE_ALL_SSE, "lame.sse2.exe", 3995, "Final"}, {"9511e7ef2ad10de05386eedf7f14d637edab894a53dacd2f8f15c6f8ed582f12c25fb5bf88438e62c46b8eb92e7634b2", CPU_TYPE_ALL_SSE, "lame.sse2.exe", 3995, "Final"},
{"fdbeb978025b9a5345300f37bb56446c31c7db594cf29407afdcc9ce20f4a5cec6eb8c03962c247d4f45b83c465ac705", CPU_TYPE_ALL_ALL, "mac.exe", 412, ""}, {"fdbeb978025b9a5345300f37bb56446c31c7db594cf29407afdcc9ce20f4a5cec6eb8c03962c247d4f45b83c465ac705", CPU_TYPE_ALL_ALL, "mac.exe", 412, ""},
{"b0cf3fdee3231f92035b83ade52427ffd95bd1210f4f83f8ae6c2ea069b772a93415563e787987638ebbd14b5a2f9120", CPU_TYPE_X86_ALL, "mediainfo.i386.exe", 767, ""}, {"975408454231ac8c51960907a7eea1dd4ef8f7e1269816737e8c072ab695de32d3dae433bc667f8d1343a60e95ddb38d", CPU_TYPE_X86_ALL, "mediainfo.i386.exe", 769, ""},
{"6d6db3e9ffb78784ac5f45f0fa98bfbd48af43b3400d7127038898c0b6b980a849f21f75fbfc94a54f050a7a3935f111", CPU_TYPE_X64_ALL, "mediainfo.x64.exe", 767, ""}, {"3c049cb7e149413129cfc17588346bfa455554da6a6aec549a7b8e2a6f0953fa2a7f5d3425e6f41a26ed6b379c514687", CPU_TYPE_X64_ALL, "mediainfo.x64.exe", 769, ""},
{"7e6346a057634ff07b2e1f427035324f7f02100cc996425990f87f71d767fce4c7b101588c7d944ba49cb2d7e51c9bdb", CPU_TYPE_ALL_ALL, "mpcdec.exe", 475, ""}, {"7e6346a057634ff07b2e1f427035324f7f02100cc996425990f87f71d767fce4c7b101588c7d944ba49cb2d7e51c9bdb", CPU_TYPE_ALL_ALL, "mpcdec.exe", 475, ""},
{"8f844060ed60b4d3fb8c2f2f28e13304a69fa97cde3859ee5c62fef46aea6f500e4dc74114ded901ee9231bbb5d2af64", CPU_TYPE_ALL_ALL, "mpg123.exe", 1160, ""}, {"96c6e22928f34a514d824f3d6e2fdc2cc1dcfb3e074ab109c989f54654e80c68f5f81648d1eca4199654289fd511df7f", CPU_TYPE_ALL_ALL, "mpg123.exe", 1190, ""},
{"75c39861ac82d7fc8392fbddff9f5b785e7abee29f8c1843706a9b225966e05ef4be2a160f98f389beaf5238c5de121c", CPU_TYPE_ALL_ALL, "oggdec.exe", UINT_MAX, ""}, {"75c39861ac82d7fc8392fbddff9f5b785e7abee29f8c1843706a9b225966e05ef4be2a160f98f389beaf5238c5de121c", CPU_TYPE_ALL_ALL, "oggdec.exe", UINT_MAX, ""},
{"8b68461f38410421be30cc895e94e63184daa6f2cb20eb110b66b376b48141838a09bc920efeb1c49de79dd0770ce41b", CPU_TYPE_X86_GEN, "oggenc2.i386.exe", 287603, "Beta"}, {"8b68461f38410421be30cc895e94e63184daa6f2cb20eb110b66b376b48141838a09bc920efeb1c49de79dd0770ce41b", CPU_TYPE_X86_GEN, "oggenc2.i386.exe", 287603, "Beta"},
{"20648f83cc637cada481143d48c437ced8423e9a0aae01dbce860cd97fb1ce4000e314f3a5395d1eafd8e154a8e74d08", CPU_TYPE_X86_SSE, "oggenc2.sse2.exe", 287603, "Beta"}, {"20648f83cc637cada481143d48c437ced8423e9a0aae01dbce860cd97fb1ce4000e314f3a5395d1eafd8e154a8e74d08", CPU_TYPE_X86_SSE, "oggenc2.sse2.exe", 287603, "Beta"},
{"53766251d69e0695ae7d0cbc4f19aafdce90bfebde0815e2216a5b34955f151271d97d23a00be5ce280a502b718753cc", CPU_TYPE_X64_ALL, "oggenc2.x64.exe", 287603, "Beta"}, {"53766251d69e0695ae7d0cbc4f19aafdce90bfebde0815e2216a5b34955f151271d97d23a00be5ce280a502b718753cc", CPU_TYPE_X64_ALL, "oggenc2.x64.exe", 287603, "Beta"},
{"d0899fa678b1d41aa59952e6f5790b30a6dac961390cbfaa3559c302c0da74907b39a348f79014d2ede088338f60a1f1", CPU_TYPE_ALL_GEN, "opusdec.i386.exe", 20131205, "v1.1"}, {"b8f8167ee344ada98d6cca831145c0f8f97a25875f34f8ee03395a5ac5203bfefca4e472f4c8ae5b9999bd2ded83bd7e", CPU_TYPE_ALL_GEN, "opusdec.i386.exe", 20140413, "v1.1"},
{"1ffce4de07b81a9a07746a2eb169acfac527e1f450509997283dd2ebfc534ab7516b251fc1f81873759a8e363fd7a953", CPU_TYPE_ALL_SSE, "opusdec.sse2.exe", 20131205, "v1.1"}, {"262549c5f349c984e94451666419eaff4c0f5558719a729568f9131306c6455420d2551c956d8ba2edc2bce533103d8a", CPU_TYPE_ALL_SSE, "opusdec.sse2.exe", 20140413, "v1.1"},
{"bd97b7edb69a81edf8441d07a516b16d2876e22882e302e0c8e730f860ad6d070d124e06034b9b4132022889a6d13d5f", CPU_TYPE_ALL_GEN, "opusenc.i386.exe", 20131205, "v1.1"}, {"2127979169db9a1fbfeb71fb88b59f5f85047855b25bb3e5bff6ffadc1bc31a8369cd1902ea9e9efd184a94ce1be92bd", CPU_TYPE_ALL_GEN, "opusenc.i386.exe", 20140413, "v1.1"},
{"63beefa4c2481f1e6f260bb3ef62aadc4d838665569145697f42774aa4d343636f8e657b3fa6126155a93e71b3f44203", CPU_TYPE_ALL_SSE, "opusenc.sse2.exe", 20131205, "v1.1"}, {"b38e61a5c1d57f31349d035d3891038a0ca2c9a5a8252e3ae91ad98e23436d7c9c69cedfae26043fadf6ea215b2de5de", CPU_TYPE_ALL_SSE, "opusenc.sse2.exe", 20140413, "v1.1"},
{"bdfa8dec142b6327a33af6bb314d7beb924588d1b73f2ef3f46b31fa6046fe2f4e64ca78b025b7eb9290a78320e2aa57", CPU_TYPE_ALL_ALL, "refalac.exe", 56, ""}, {"bdfa8dec142b6327a33af6bb314d7beb924588d1b73f2ef3f46b31fa6046fe2f4e64ca78b025b7eb9290a78320e2aa57", CPU_TYPE_ALL_ALL, "refalac.exe", 56, ""},
{"d041b60de6c5c6e77cbad84440db57bbeb021af59dd0f7bebd3ede047d9e2ddc2a0c14179472687ba91063743d23e337", CPU_TYPE_ALL_ALL, "shorten.exe", 361, ""}, {"d041b60de6c5c6e77cbad84440db57bbeb021af59dd0f7bebd3ede047d9e2ddc2a0c14179472687ba91063743d23e337", CPU_TYPE_ALL_ALL, "shorten.exe", 361, ""},
{"cf988bfbb53e77a1dcaefbd5c08789abb4d67cc210723f1f8ba7850f17d34ebb7d0c426b67b963e7d2290a2744865244", CPU_TYPE_ALL_ALL, "sox.exe", 1441, ""}, {"cf988bfbb53e77a1dcaefbd5c08789abb4d67cc210723f1f8ba7850f17d34ebb7d0c426b67b963e7d2290a2744865244", CPU_TYPE_ALL_ALL, "sox.exe", 1441, ""},