Updated Monkey's Audio binary to v4.12 (2013-06-26). Also added encoding support for Monkey's Audio format, including APEv2 tagging support. Since the MAC tool does NOT support tagging, a custom tagging utility support is used.

This commit is contained in:
LoRd_MuldeR 2013-12-04 22:36:19 +01:00
parent b05a7ac3ef
commit 60cb91665f
29 changed files with 1751 additions and 1268 deletions

View File

@ -317,6 +317,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" />
@ -381,6 +382,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" />
@ -571,6 +573,17 @@ 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>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs> <Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild> </CustomBuild>
<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|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>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MOC "$(SolutionDir)tmp\MOC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MOC "$(SolutionDir)tmp\MOC_%(Filename).cpp"</Message>
<Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|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|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\MOC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
<ClInclude Include="src\JobObject.h" /> <ClInclude Include="src\JobObject.h" />
<CustomBuild Include="src\Thread_CheckUpdate.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)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe" -o "$(SolutionDir)tmp\MOC_%(Filename).cpp" "%(FullPath)"</Command>

View File

@ -424,6 +424,12 @@
<ClCompile Include="tmp\QRC_Sounds.cpp"> <ClCompile Include="tmp\QRC_Sounds.cpp">
<Filter>Generated Files\QRC</Filter> <Filter>Generated Files\QRC</Filter>
</ClCompile> </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>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="src\Config.h"> <ClInclude Include="src\Config.h">
@ -558,6 +564,9 @@
<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">

View File

@ -21,10 +21,12 @@ a:visited { color: #0000EE; }
<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
<li>Added encoding support for Monkey's Audio format, including APEv2 tagging support
<li>Improved file analyzer to retain the original ordering of files imported from a playlist <li>Improved file analyzer to retain the original ordering of files imported from a playlist
<li>Improved internal encoder API, so each encoder can define its own configuration options <li>Improved internal encoder API, so each encoder can define its own configuration options
<li>Improved splash screen and working banner, using "sheet of glass" effect on supported OS <li>Improved splash screen and working banner, using "sheet of glass" effect on supported OS
<li>Improved dropbox widget, including proper multi-monitor support <li>Improved dropbox widget, including proper multi-monitor support
<li>Updated Monkey's Audio binary to v4.12 (2013-06-26)
<li>Updated mpg123 decoder to v1.16.0 (2013-10-06), compiled with GCC 4.8.1 <li>Updated mpg123 decoder to v1.16.0 (2013-10-06), 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 GNU Wget binary to v1.14.0 (2012-08-05), compiled with GCC 4.8.1
<li>Updated GnuPG to v1.4.15 (2013-10-05), compiled with GCC 4.8.1 <li>Updated GnuPG to v1.4.15 (2013-10-05), compiled with GCC 4.8.1

File diff suppressed because it is too large Load Diff

View File

@ -2022,6 +2022,10 @@
<source>Loading dropped files or folders, please wait...</source> <source>Loading dropped files or folders, please wait...</source>
<translation>Abgelegte Dateien werden geladen, bitte warten...</translation> <translation>Abgelegte Dateien werden geladen, bitte warten...</translation>
</message> </message>
<message>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

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="778"/> <location filename="../../src/Dialog_MainWindow.cpp" line="779"/>
<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="782"/> <location filename="../../src/Dialog_MainWindow.cpp" line="783"/>
<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="786"/> <location filename="../../src/Dialog_MainWindow.cpp" line="787"/>
<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="790"/> <location filename="../../src/Dialog_MainWindow.cpp" line="791"/>
<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="3846"/> <location filename="../../src/Dialog_MainWindow.cpp" line="3848"/>
<source>%n Instance(s)</source> <source>%n Instance(s)</source>
<translation> <translation>
<numerusform>%n Instance</numerusform> <numerusform>%n Instance</numerusform>

View File

@ -2021,6 +2021,10 @@
<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>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

View File

@ -2030,6 +2030,10 @@ Ouvrir le dossier récursivement...</translation>
<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>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

View File

@ -2022,6 +2022,10 @@
<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>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

View File

@ -2014,6 +2014,10 @@
<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>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

File diff suppressed because it is too large Load Diff

View File

@ -2035,6 +2035,10 @@
<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>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

File diff suppressed because it is too large Load Diff

View File

@ -2013,6 +2013,10 @@
<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>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

View File

@ -2030,6 +2030,10 @@
<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>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

View File

@ -2013,6 +2013,10 @@
<source>Loading dropped files or folders, please wait...</source> <source>Loading dropped files or folders, please wait...</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<source>APE</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>MetaInfo</name> <name>MetaInfo</name>

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>667</width> <width>676</width>
<height>443</height> <height>443</height>
</rect> </rect>
</property> </property>
@ -805,39 +805,8 @@
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0"> <item row="0" column="0">
<layout class="QGridLayout" name="gridLayout"> <layout class="QHBoxLayout" name="horizontalLayout_11">
<item row="0" column="1"> <item>
<widget class="QRadioButton" name="radioButtonEncoderMP3">
<property name="text">
<string>MP3</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QRadioButton" name="radioButtonEncoderVorbis">
<property name="text">
<string>Ogg/Vorbis</string>
</property>
</widget>
</item>
<item row="0" column="7">
<widget class="QRadioButton" name="radioButtonEncoderAAC">
<property name="text">
<string>AAC/MP4</string>
</property>
</widget>
</item>
<item row="0" column="19">
<widget class="QRadioButton" name="radioButtonEncoderPCM">
<property name="text">
<string>PCM/Wave</string>
</property>
</widget>
</item>
<item row="0" column="0">
<spacer name="horizontalSpacer_7"> <spacer name="horizontalSpacer_7">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -853,21 +822,17 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="13"> <item>
<widget class="QRadioButton" name="radioButtonEncoderAC3"> <widget class="QRadioButton" name="radioButtonEncoderMP3">
<property name="text"> <property name="text">
<string>A/52</string> <string>MP3</string>
</property>
<property name="checked">
<bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="17"> <item>
<widget class="QRadioButton" name="radioButtonEncoderDCA">
<property name="text">
<string>DCA</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_45"> <spacer name="horizontalSpacer_45">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -880,7 +845,34 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="6"> <item>
<widget class="QRadioButton" name="radioButtonEncoderVorbis">
<property name="text">
<string>Ogg/Vorbis</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_48">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QRadioButton" name="radioButtonEncoderOpus">
<property name="text">
<string>Opus</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_46"> <spacer name="horizontalSpacer_46">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -893,7 +885,14 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="8"> <item>
<widget class="QRadioButton" name="radioButtonEncoderAAC">
<property name="text">
<string>AAC/MP4</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_47"> <spacer name="horizontalSpacer_47">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -906,53 +905,34 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="16"> <item>
<spacer name="horizontalSpacer_49">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="18">
<spacer name="horizontalSpacer_50">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="20">
<spacer name="horizontalSpacer_51">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="9">
<widget class="QRadioButton" name="radioButtonEncoderFLAC"> <widget class="QRadioButton" name="radioButtonEncoderFLAC">
<property name="text"> <property name="text">
<string>FLAC</string> <string>FLAC</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="12"> <item>
<spacer name="horizontalSpacer_68">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QRadioButton" name="radioButtonEncoderAPE">
<property name="text">
<string>APE</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_55"> <spacer name="horizontalSpacer_55">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -965,15 +945,55 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="5"> <item>
<widget class="QRadioButton" name="radioButtonEncoderOpus"> <widget class="QRadioButton" name="radioButtonEncoderAC3">
<property name="text"> <property name="text">
<string>Opus</string> <string>A/52</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="4"> <item>
<spacer name="horizontalSpacer_48"> <spacer name="horizontalSpacer_49">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QRadioButton" name="radioButtonEncoderDCA">
<property name="text">
<string>DCA</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_50">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>1</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QRadioButton" name="radioButtonEncoderPCM">
<property name="text">
<string>PCM/Wave</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_51">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@ -1009,32 +1029,8 @@
</property> </property>
<layout class="QGridLayout" name="gridLayout_13"> <layout class="QGridLayout" name="gridLayout_13">
<item row="0" column="0"> <item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_12"> <layout class="QHBoxLayout" name="horizontalLayout_12">
<item row="0" column="1"> <item>
<widget class="QRadioButton" name="radioButtonModeQuality">
<property name="text">
<string>Quality-based (VBR)</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QRadioButton" name="radioButtonModeAverageBitrate">
<property name="text">
<string>Average Bitrate (ABR)</string>
</property>
</widget>
</item>
<item row="0" column="5">
<widget class="QRadioButton" name="radioButtonConstBitrate">
<property name="text">
<string>Constant Bitrate (CBR)</string>
</property>
</widget>
</item>
<item row="0" column="0">
<spacer name="horizontalSpacer_8"> <spacer name="horizontalSpacer_8">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -1050,7 +1046,17 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="2"> <item>
<widget class="QRadioButton" name="radioButtonModeQuality">
<property name="text">
<string>Quality-based (VBR)</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_52"> <spacer name="horizontalSpacer_52">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -1063,7 +1069,14 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="4"> <item>
<widget class="QRadioButton" name="radioButtonModeAverageBitrate">
<property name="text">
<string>Average Bitrate (ABR)</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_53"> <spacer name="horizontalSpacer_53">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -1076,7 +1089,14 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="0" column="6"> <item>
<widget class="QRadioButton" name="radioButtonConstBitrate">
<property name="text">
<string>Constant Bitrate (CBR)</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_54"> <spacer name="horizontalSpacer_54">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -1489,8 +1509,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>604</width> <width>602</width>
<height>1759</height> <height>1750</height>
</rect> </rect>
</property> </property>
<layout class="QGridLayout" name="gridLayout_22"> <layout class="QGridLayout" name="gridLayout_22">
@ -4286,7 +4306,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>667</width> <width>676</width>
<height>21</height> <height>21</height>
</rect> </rect>
</property> </property>

View File

@ -5,6 +5,7 @@
<file>tools/gpgv.exe</file> <file>tools/gpgv.exe</file>
<file>tools/gpgv.gpg</file> <file>tools/gpgv.gpg</file>
<file>tools/sox.exe</file> <file>tools/sox.exe</file>
<file>tools/tag.exe</file>
<file>tools/wget.exe</file> <file>tools/wget.exe</file>
<file>tools/wupdate.exe</file> <file>tools/wupdate.exe</file>
</qresource> </qresource>

Binary file not shown.

BIN
res/tools/tag.exe Normal file

Binary file not shown.

View File

@ -34,8 +34,8 @@
#define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_HI 0
#define VER_LAMEXP_MINOR_LO 9 #define VER_LAMEXP_MINOR_LO 9
#define VER_LAMEXP_TYPE Alpha #define VER_LAMEXP_TYPE Alpha
#define VER_LAMEXP_PATCH 9 #define VER_LAMEXP_PATCH 10
#define VER_LAMEXP_BUILD 1499 #define VER_LAMEXP_BUILD 1502
#define VER_LAMEXP_CONFG 1348 #define VER_LAMEXP_CONFG 1348
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

View File

@ -385,6 +385,7 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel_MetaInfo *me
m_encoderButtonGroup->addButton(ui->radioButtonEncoderAAC, SettingsModel::AACEncoder); m_encoderButtonGroup->addButton(ui->radioButtonEncoderAAC, SettingsModel::AACEncoder);
m_encoderButtonGroup->addButton(ui->radioButtonEncoderAC3, SettingsModel::AC3Encoder); m_encoderButtonGroup->addButton(ui->radioButtonEncoderAC3, SettingsModel::AC3Encoder);
m_encoderButtonGroup->addButton(ui->radioButtonEncoderFLAC, SettingsModel::FLACEncoder); m_encoderButtonGroup->addButton(ui->radioButtonEncoderFLAC, SettingsModel::FLACEncoder);
m_encoderButtonGroup->addButton(ui->radioButtonEncoderAPE, SettingsModel::MACEncoder);
m_encoderButtonGroup->addButton(ui->radioButtonEncoderOpus, SettingsModel::OpusEncoder); m_encoderButtonGroup->addButton(ui->radioButtonEncoderOpus, SettingsModel::OpusEncoder);
m_encoderButtonGroup->addButton(ui->radioButtonEncoderDCA, SettingsModel::DCAEncoder); m_encoderButtonGroup->addButton(ui->radioButtonEncoderDCA, SettingsModel::DCAEncoder);
m_encoderButtonGroup->addButton(ui->radioButtonEncoderPCM, SettingsModel::PCMEncoder); m_encoderButtonGroup->addButton(ui->radioButtonEncoderPCM, SettingsModel::PCMEncoder);
@ -1578,6 +1579,7 @@ void MainWindow::encodeButtonClicked(void)
case SettingsModel::FLACEncoder: case SettingsModel::FLACEncoder:
case SettingsModel::OpusEncoder: case SettingsModel::OpusEncoder:
case SettingsModel::DCAEncoder: case SettingsModel::DCAEncoder:
case SettingsModel::MACEncoder:
case SettingsModel::PCMEncoder: case SettingsModel::PCMEncoder:
break; break;
default: default:

302
src/Encoder_MAC.cpp Normal file
View File

@ -0,0 +1,302 @@
///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
// Copyright (C) 2004-2013 LoRd_MuldeR <MuldeR2@GMX.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version, but always including the *additional*
// restrictions defined in the "License.txt" file.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// http://www.gnu.org/licenses/gpl-2.0.txt
///////////////////////////////////////////////////////////////////////////////
#include "Encoder_MAC.h"
#include "Global.h"
#include "Model_Settings.h"
#include <QProcess>
#include <QDir>
///////////////////////////////////////////////////////////////////////////////
// Encoder Info
///////////////////////////////////////////////////////////////////////////////
class MACEncoderInfo : public AbstractEncoderInfo
{
virtual bool isModeSupported(int mode) const
{
switch(mode)
{
case SettingsModel::VBRMode:
return true;
break;
case SettingsModel::ABRMode:
case SettingsModel::CBRMode:
return false;
break;
default:
THROW("Bad RC mode specified!");
}
}
virtual int valueCount(int mode) const
{
switch(mode)
{
case SettingsModel::VBRMode:
return 5;
break;
case SettingsModel::ABRMode:
case SettingsModel::CBRMode:
return -1;
break;
default:
THROW("Bad RC mode specified!");
}
}
virtual int valueAt(int mode, int index) const
{
switch(mode)
{
case SettingsModel::VBRMode:
return qBound(0, index + 1, 8);
break;
case SettingsModel::ABRMode:
case SettingsModel::CBRMode:
return -1;
break;
default:
THROW("Bad RC mode specified!");
}
}
virtual int valueType(int mode) const
{
switch(mode)
{
case SettingsModel::VBRMode:
return TYPE_COMPRESSION_LEVEL;
break;
case SettingsModel::ABRMode:
case SettingsModel::CBRMode:
return -1;
break;
default:
THROW("Bad RC mode specified!");
}
}
virtual const char *description(void) const
{
static const char* s_description = "Monkey's Audio (MAC)";
return s_description;
}
}
static const g_macEncoderInfo;
///////////////////////////////////////////////////////////////////////////////
// Encoder implementation
///////////////////////////////////////////////////////////////////////////////
MACEncoder::MACEncoder(void)
:
m_binary_enc(lamexp_lookup_tool("mac.exe")),
m_binary_tag(lamexp_lookup_tool("tag.exe"))
{
if(m_binary_enc.isEmpty() || m_binary_tag.isEmpty())
{
THROW("Error initializing MAC encoder. Tool 'mac.exe' or 'tag.exe' is not registred!");
}
}
MACEncoder::~MACEncoder(void)
{
}
bool MACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{
QProcess process;
QStringList args;
const QString baseName = QFileInfo(outputFile).fileName();
args << QDir::toNativeSeparators(sourceFile);
args << QDir::toNativeSeparators(outputFile);
switch(m_configRCMode)
{
case SettingsModel::VBRMode:
args << QString().sprintf("-c%d", (m_configBitrate + 1) * 1000);
break;
default:
THROW("Bad rate-control mode!");
break;
}
if(!startProcess(process, m_binary_enc, args))
{
return false;
}
bool bTimeout = false;
bool bAborted = false;
int prevProgress = -1;
QRegExp regExp("Progress: (\\d+).(\\d+)%");
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("MAC process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(regExp.lastIndexIn(text) >= 0)
{
bool ok = false;
int progress = regExp.cap(1).toInt(&ok);
if(ok && (progress > prevProgress))
{
emit statusUpdated(progress);
prevProgress = qMin(progress + 2, 99);
}
}
else if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit statusUpdated(100);
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS)
{
return false;
}
emit messageLogged("\n-------------------------------\n");
args.clear();
args << "APE2" << QDir::toNativeSeparators(outputFile);
if(!metaInfo.title().isEmpty()) args << QString("Title=%1").arg(cleanTag(metaInfo.title()));
if(!metaInfo.artist().isEmpty()) args << QString("Artist=%1").arg(cleanTag(metaInfo.artist()));
if(!metaInfo.album().isEmpty()) args << QString("Album=%1").arg(cleanTag(metaInfo.album()));
if(!metaInfo.genre().isEmpty()) args << QString("Genre=%1").arg(cleanTag(metaInfo.genre()));
if(!metaInfo.comment().isEmpty()) args << QString("Comment=%1").arg(cleanTag(metaInfo.comment()));
if(metaInfo.year()) args << QString("Year=%1").arg(QString::number(metaInfo.year()));
if(metaInfo.position()) args << QString("Track=%1").arg(QString::number(metaInfo.position()));
//if(!metaInfo.cover().isEmpty()) args << QString("-add-cover:%1:%2").arg("front", metaInfo.cover());
if(!startProcess(process, m_binary_tag, args))
{
return false;
}
bTimeout = false;
while(process.state() != QProcess::NotRunning)
{
if(*abortFlag)
{
process.kill();
bAborted = true;
emit messageLogged("\nABORTED BY USER !!!");
break;
}
process.waitForReadyRead(m_processTimeoutInterval);
if(!process.bytesAvailable() && process.state() == QProcess::Running)
{
process.kill();
qWarning("Tag process timed out <-- killing!");
emit messageLogged("\nPROCESS TIMEOUT !!!");
bTimeout = true;
break;
}
while(process.bytesAvailable() > 0)
{
QByteArray line = process.readLine();
QString text = QString::fromUtf8(line.constData()).simplified();
if(!text.isEmpty())
{
emit messageLogged(text);
}
}
}
process.waitForFinished();
if(process.state() != QProcess::NotRunning)
{
process.kill();
process.waitForFinished(-1);
}
emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS)
{
return false;
}
return true;
}
QString MACEncoder::extension(void)
{
return "ape";
}
bool MACEncoder::isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion)
{
if(containerType.compare("Wave", Qt::CaseInsensitive) == 0)
{
if(formatType.compare("PCM", Qt::CaseInsensitive) == 0)
{
return true;
}
}
return false;
}
const AbstractEncoderInfo *MACEncoder::getEncoderInfo(void)
{
return &g_macEncoderInfo;
}

47
src/Encoder_MAC.h Normal file
View File

@ -0,0 +1,47 @@
///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
// Copyright (C) 2004-2013 LoRd_MuldeR <MuldeR2@GMX.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version, but always including the *additional*
// restrictions defined in the "License.txt" file.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// http://www.gnu.org/licenses/gpl-2.0.txt
///////////////////////////////////////////////////////////////////////////////
#pragma once
#include "Encoder_Abstract.h"
#include <QObject>
class MACEncoder : public AbstractEncoder
{
Q_OBJECT
public:
MACEncoder(void);
~MACEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void);
//Encoder info
static const AbstractEncoderInfo *getEncoderInfo(void);
private:
const QString m_binary_enc;
const QString m_binary_tag;
};

View File

@ -184,6 +184,7 @@ LAMEXP_MAKE_ID(compressionAbrBitrateAften, "Compression/AbrTaretBitrate/Aften"
LAMEXP_MAKE_ID(compressionAbrBitrateDcaEnc, "Compression/AbrTaretBitrate/DcaEnc"); LAMEXP_MAKE_ID(compressionAbrBitrateDcaEnc, "Compression/AbrTaretBitrate/DcaEnc");
LAMEXP_MAKE_ID(compressionAbrBitrateFLAC, "Compression/AbrTaretBitrate/FLAC"); LAMEXP_MAKE_ID(compressionAbrBitrateFLAC, "Compression/AbrTaretBitrate/FLAC");
LAMEXP_MAKE_ID(compressionAbrBitrateLAME, "Compression/AbrTaretBitrate/LAME"); LAMEXP_MAKE_ID(compressionAbrBitrateLAME, "Compression/AbrTaretBitrate/LAME");
LAMEXP_MAKE_ID(compressionAbrBitrateMacEnc, "Compression/AbrTaretBitrate/MacEnc");
LAMEXP_MAKE_ID(compressionAbrBitrateOggEnc, "Compression/AbrTaretBitrate/OggEnc"); LAMEXP_MAKE_ID(compressionAbrBitrateOggEnc, "Compression/AbrTaretBitrate/OggEnc");
LAMEXP_MAKE_ID(compressionAbrBitrateOpusEnc, "Compression/AbrTaretBitrate/OpusEnc"); LAMEXP_MAKE_ID(compressionAbrBitrateOpusEnc, "Compression/AbrTaretBitrate/OpusEnc");
LAMEXP_MAKE_ID(compressionAbrBitrateWave, "Compression/AbrTaretBitrate/Wave"); LAMEXP_MAKE_ID(compressionAbrBitrateWave, "Compression/AbrTaretBitrate/Wave");
@ -192,6 +193,7 @@ LAMEXP_MAKE_ID(compressionCbrBitrateAften, "Compression/CbrTaretBitrate/Aften"
LAMEXP_MAKE_ID(compressionCbrBitrateDcaEnc, "Compression/CbrTaretBitrate/DcaEnc"); LAMEXP_MAKE_ID(compressionCbrBitrateDcaEnc, "Compression/CbrTaretBitrate/DcaEnc");
LAMEXP_MAKE_ID(compressionCbrBitrateFLAC, "Compression/CbrTaretBitrate/FLAC"); LAMEXP_MAKE_ID(compressionCbrBitrateFLAC, "Compression/CbrTaretBitrate/FLAC");
LAMEXP_MAKE_ID(compressionCbrBitrateLAME, "Compression/CbrTaretBitrate/LAME"); LAMEXP_MAKE_ID(compressionCbrBitrateLAME, "Compression/CbrTaretBitrate/LAME");
LAMEXP_MAKE_ID(compressionCbrBitrateMacEnc, "Compression/CbrTaretBitrate/MacEnc");
LAMEXP_MAKE_ID(compressionCbrBitrateOggEnc, "Compression/CbrTaretBitrate/OggEnc"); LAMEXP_MAKE_ID(compressionCbrBitrateOggEnc, "Compression/CbrTaretBitrate/OggEnc");
LAMEXP_MAKE_ID(compressionCbrBitrateOpusEnc, "Compression/CbrTaretBitrate/OpusEnc"); LAMEXP_MAKE_ID(compressionCbrBitrateOpusEnc, "Compression/CbrTaretBitrate/OpusEnc");
LAMEXP_MAKE_ID(compressionCbrBitrateWave, "Compression/CbrTaretBitrate/Wave"); LAMEXP_MAKE_ID(compressionCbrBitrateWave, "Compression/CbrTaretBitrate/Wave");
@ -201,6 +203,7 @@ LAMEXP_MAKE_ID(compressionRCModeAften, "Compression/RCMode/Aften");
LAMEXP_MAKE_ID(compressionRCModeDcaEnc, "Compression/RCMode/DcaEnc"); LAMEXP_MAKE_ID(compressionRCModeDcaEnc, "Compression/RCMode/DcaEnc");
LAMEXP_MAKE_ID(compressionRCModeFLAC, "Compression/RCMode/FLAC"); LAMEXP_MAKE_ID(compressionRCModeFLAC, "Compression/RCMode/FLAC");
LAMEXP_MAKE_ID(compressionRCModeLAME, "Compression/RCMode/LAME"); LAMEXP_MAKE_ID(compressionRCModeLAME, "Compression/RCMode/LAME");
LAMEXP_MAKE_ID(compressionRCModeMacEnc, "Compression/RCMode/MacEnc");
LAMEXP_MAKE_ID(compressionRCModeOggEnc, "Compression/RCMode/OggEnc"); LAMEXP_MAKE_ID(compressionRCModeOggEnc, "Compression/RCMode/OggEnc");
LAMEXP_MAKE_ID(compressionRCModeOpusEnc, "Compression/RCMode/OpusEnc"); LAMEXP_MAKE_ID(compressionRCModeOpusEnc, "Compression/RCMode/OpusEnc");
LAMEXP_MAKE_ID(compressionRCModeWave, "Compression/RCMode/Wave"); LAMEXP_MAKE_ID(compressionRCModeWave, "Compression/RCMode/Wave");
@ -209,6 +212,7 @@ LAMEXP_MAKE_ID(compressionVbrQualityAften, "Compression/VbrQualityLevel/Aften"
LAMEXP_MAKE_ID(compressionVbrQualityDcaEnc, "Compression/VbrQualityLevel/DcaEnc"); LAMEXP_MAKE_ID(compressionVbrQualityDcaEnc, "Compression/VbrQualityLevel/DcaEnc");
LAMEXP_MAKE_ID(compressionVbrQualityFLAC, "Compression/VbrQualityLevel/FLAC"); LAMEXP_MAKE_ID(compressionVbrQualityFLAC, "Compression/VbrQualityLevel/FLAC");
LAMEXP_MAKE_ID(compressionVbrQualityLAME, "Compression/VbrQualityLevel/LAME"); LAMEXP_MAKE_ID(compressionVbrQualityLAME, "Compression/VbrQualityLevel/LAME");
LAMEXP_MAKE_ID(compressionVbrQualityMacEnc, "Compression/VbrQualityLevel/MacEnc");
LAMEXP_MAKE_ID(compressionVbrQualityOggEnc, "Compression/VbrQualityLevel/OggEnc"); LAMEXP_MAKE_ID(compressionVbrQualityOggEnc, "Compression/VbrQualityLevel/OggEnc");
LAMEXP_MAKE_ID(compressionVbrQualityOpusEnc, "Compression/VbrQualityLevel/OpusEnc"); LAMEXP_MAKE_ID(compressionVbrQualityOpusEnc, "Compression/VbrQualityLevel/OpusEnc");
LAMEXP_MAKE_ID(compressionVbrQualityWave, "Compression/VbrQualityLevel/Wave"); LAMEXP_MAKE_ID(compressionVbrQualityWave, "Compression/VbrQualityLevel/Wave");
@ -220,6 +224,7 @@ LAMEXP_MAKE_ID(customParametersAften, "AdvancedOptions/CustomParameters/A
LAMEXP_MAKE_ID(customParametersDcaEnc, "AdvancedOptions/CustomParameters/DcaEnc"); LAMEXP_MAKE_ID(customParametersDcaEnc, "AdvancedOptions/CustomParameters/DcaEnc");
LAMEXP_MAKE_ID(customParametersFLAC, "AdvancedOptions/CustomParameters/FLAC"); LAMEXP_MAKE_ID(customParametersFLAC, "AdvancedOptions/CustomParameters/FLAC");
LAMEXP_MAKE_ID(customParametersLAME, "AdvancedOptions/CustomParameters/LAME"); LAMEXP_MAKE_ID(customParametersLAME, "AdvancedOptions/CustomParameters/LAME");
LAMEXP_MAKE_ID(customParametersMacEnc, "AdvancedOptions/CustomParameters/MacEnc");
LAMEXP_MAKE_ID(customParametersOggEnc, "AdvancedOptions/CustomParameters/OggEnc"); LAMEXP_MAKE_ID(customParametersOggEnc, "AdvancedOptions/CustomParameters/OggEnc");
LAMEXP_MAKE_ID(customParametersOpusEnc, "AdvancedOptions/CustomParameters/OpusEnc"); LAMEXP_MAKE_ID(customParametersOpusEnc, "AdvancedOptions/CustomParameters/OpusEnc");
LAMEXP_MAKE_ID(customParametersWave, "AdvancedOptions/CustomParameters/Wave"); LAMEXP_MAKE_ID(customParametersWave, "AdvancedOptions/CustomParameters/Wave");
@ -571,6 +576,7 @@ LAMEXP_MAKE_OPTION_I(compressionAbrBitrateAften, 17)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateDcaEnc, 13) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateDcaEnc, 13)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateFLAC, 5) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateFLAC, 5)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateLAME, 10) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateLAME, 10)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateMacEnc, 2)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateOggEnc, 16) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateOggEnc, 16)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateOpusEnc, 11) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateOpusEnc, 11)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateWave, 0) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateWave, 0)
@ -579,6 +585,7 @@ LAMEXP_MAKE_OPTION_I(compressionCbrBitrateAften, 17)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateDcaEnc, 13) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateDcaEnc, 13)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateFLAC, 5) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateFLAC, 5)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateLAME, 10) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateLAME, 10)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateMacEnc, 2)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateOggEnc, 16) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateOggEnc, 16)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateOpusEnc, 11) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateOpusEnc, 11)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateWave, 0) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateWave, 0)
@ -588,6 +595,7 @@ LAMEXP_MAKE_OPTION_I(compressionRCModeAften, 0)
LAMEXP_MAKE_OPTION_I(compressionRCModeDcaEnc, 2) LAMEXP_MAKE_OPTION_I(compressionRCModeDcaEnc, 2)
LAMEXP_MAKE_OPTION_I(compressionRCModeFLAC, 0) LAMEXP_MAKE_OPTION_I(compressionRCModeFLAC, 0)
LAMEXP_MAKE_OPTION_I(compressionRCModeLAME, 0) LAMEXP_MAKE_OPTION_I(compressionRCModeLAME, 0)
LAMEXP_MAKE_OPTION_I(compressionRCModeMacEnc, 0)
LAMEXP_MAKE_OPTION_I(compressionRCModeOggEnc, 0) LAMEXP_MAKE_OPTION_I(compressionRCModeOggEnc, 0)
LAMEXP_MAKE_OPTION_I(compressionRCModeOpusEnc, 0) LAMEXP_MAKE_OPTION_I(compressionRCModeOpusEnc, 0)
LAMEXP_MAKE_OPTION_I(compressionRCModeWave, 2) LAMEXP_MAKE_OPTION_I(compressionRCModeWave, 2)
@ -596,6 +604,7 @@ LAMEXP_MAKE_OPTION_I(compressionVbrQualityAften, 15)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityDcaEnc, 13) LAMEXP_MAKE_OPTION_I(compressionVbrQualityDcaEnc, 13)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityFLAC, 5) LAMEXP_MAKE_OPTION_I(compressionVbrQualityFLAC, 5)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityLAME, 7) LAMEXP_MAKE_OPTION_I(compressionVbrQualityLAME, 7)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityMacEnc, 2)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityOggEnc, 7) LAMEXP_MAKE_OPTION_I(compressionVbrQualityOggEnc, 7)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityOpusEnc, 11) LAMEXP_MAKE_OPTION_I(compressionVbrQualityOpusEnc, 11)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityWave, 0) LAMEXP_MAKE_OPTION_I(compressionVbrQualityWave, 0)
@ -607,6 +616,7 @@ LAMEXP_MAKE_OPTION_S(customParametersAften, QString())
LAMEXP_MAKE_OPTION_S(customParametersDcaEnc, QString()) LAMEXP_MAKE_OPTION_S(customParametersDcaEnc, QString())
LAMEXP_MAKE_OPTION_S(customParametersFLAC, QString()) LAMEXP_MAKE_OPTION_S(customParametersFLAC, QString())
LAMEXP_MAKE_OPTION_S(customParametersLAME, QString()) LAMEXP_MAKE_OPTION_S(customParametersLAME, QString())
LAMEXP_MAKE_OPTION_S(customParametersMacEnc, QString())
LAMEXP_MAKE_OPTION_S(customParametersOggEnc, QString()) LAMEXP_MAKE_OPTION_S(customParametersOggEnc, QString())
LAMEXP_MAKE_OPTION_S(customParametersOpusEnc, QString()) LAMEXP_MAKE_OPTION_S(customParametersOpusEnc, QString())
LAMEXP_MAKE_OPTION_S(customParametersWave, QString()) LAMEXP_MAKE_OPTION_S(customParametersWave, QString())

View File

@ -65,8 +65,9 @@ public:
FLACEncoder = 4, FLACEncoder = 4,
OpusEncoder = 5, OpusEncoder = 5,
DCAEncoder = 6, DCAEncoder = 6,
PCMEncoder = 7, MACEncoder = 7,
ENCODER_COUNT = 8 PCMEncoder = 8,
ENCODER_COUNT = 9
}; };
enum RCMode enum RCMode
@ -113,6 +114,7 @@ public:
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateDcaEnc) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateDcaEnc)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateFLAC) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateFLAC)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateLAME) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateLAME)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateMacEnc)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateOggEnc) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateOggEnc)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateOpusEnc) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateOpusEnc)
LAMEXP_MAKE_OPTION_I(compressionAbrBitrateWave) LAMEXP_MAKE_OPTION_I(compressionAbrBitrateWave)
@ -121,6 +123,7 @@ public:
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateDcaEnc) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateDcaEnc)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateFLAC) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateFLAC)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateLAME) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateLAME)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateMacEnc)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateOggEnc) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateOggEnc)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateOpusEnc) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateOpusEnc)
LAMEXP_MAKE_OPTION_I(compressionCbrBitrateWave) LAMEXP_MAKE_OPTION_I(compressionCbrBitrateWave)
@ -130,6 +133,7 @@ public:
LAMEXP_MAKE_OPTION_I(compressionRCModeDcaEnc) LAMEXP_MAKE_OPTION_I(compressionRCModeDcaEnc)
LAMEXP_MAKE_OPTION_I(compressionRCModeFLAC) LAMEXP_MAKE_OPTION_I(compressionRCModeFLAC)
LAMEXP_MAKE_OPTION_I(compressionRCModeLAME) LAMEXP_MAKE_OPTION_I(compressionRCModeLAME)
LAMEXP_MAKE_OPTION_I(compressionRCModeMacEnc)
LAMEXP_MAKE_OPTION_I(compressionRCModeOggEnc) LAMEXP_MAKE_OPTION_I(compressionRCModeOggEnc)
LAMEXP_MAKE_OPTION_I(compressionRCModeOpusEnc) LAMEXP_MAKE_OPTION_I(compressionRCModeOpusEnc)
LAMEXP_MAKE_OPTION_I(compressionRCModeWave) LAMEXP_MAKE_OPTION_I(compressionRCModeWave)
@ -138,6 +142,7 @@ public:
LAMEXP_MAKE_OPTION_I(compressionVbrQualityDcaEnc) LAMEXP_MAKE_OPTION_I(compressionVbrQualityDcaEnc)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityFLAC) LAMEXP_MAKE_OPTION_I(compressionVbrQualityFLAC)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityLAME) LAMEXP_MAKE_OPTION_I(compressionVbrQualityLAME)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityMacEnc)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityOggEnc) LAMEXP_MAKE_OPTION_I(compressionVbrQualityOggEnc)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityOpusEnc) LAMEXP_MAKE_OPTION_I(compressionVbrQualityOpusEnc)
LAMEXP_MAKE_OPTION_I(compressionVbrQualityWave) LAMEXP_MAKE_OPTION_I(compressionVbrQualityWave)
@ -149,6 +154,7 @@ public:
LAMEXP_MAKE_OPTION_S(customParametersDcaEnc) LAMEXP_MAKE_OPTION_S(customParametersDcaEnc)
LAMEXP_MAKE_OPTION_S(customParametersFLAC) LAMEXP_MAKE_OPTION_S(customParametersFLAC)
LAMEXP_MAKE_OPTION_S(customParametersLAME) LAMEXP_MAKE_OPTION_S(customParametersLAME)
LAMEXP_MAKE_OPTION_S(customParametersMacEnc)
LAMEXP_MAKE_OPTION_S(customParametersOggEnc) LAMEXP_MAKE_OPTION_S(customParametersOggEnc)
LAMEXP_MAKE_OPTION_S(customParametersOpusEnc) LAMEXP_MAKE_OPTION_S(customParametersOpusEnc)
LAMEXP_MAKE_OPTION_S(customParametersWave) LAMEXP_MAKE_OPTION_S(customParametersWave)

View File

@ -33,6 +33,7 @@
#include "Encoder_MP3.h" #include "Encoder_MP3.h"
#include "Encoder_Vorbis.h" #include "Encoder_Vorbis.h"
#include "Encoder_Opus.h" #include "Encoder_Opus.h"
#include "Encoder_MAC.h"
#include "Encoder_Wave.h" #include "Encoder_Wave.h"
#define IS_VBR(RC_MODE) ((RC_MODE) == SettingsModel::VBRMode) #define IS_VBR(RC_MODE) ((RC_MODE) == SettingsModel::VBRMode)
@ -154,6 +155,13 @@ AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const Sett
encoder = dcaEncoder; encoder = dcaEncoder;
} }
break; break;
/*-------- MACEncoder --------*/
case SettingsModel::MACEncoder:
{
MACEncoder *macEncoder = new MACEncoder();
encoder = macEncoder;
}
break;
/*-------- PCMEncoder --------*/ /*-------- PCMEncoder --------*/
case SettingsModel::PCMEncoder: case SettingsModel::PCMEncoder:
{ {
@ -196,6 +204,7 @@ const AbstractEncoderInfo *EncoderRegistry::getEncoderInfo(const int encoderId)
case SettingsModel::FLACEncoder: info = FLACEncoder::getEncoderInfo(); break; case SettingsModel::FLACEncoder: info = FLACEncoder::getEncoderInfo(); break;
case SettingsModel::OpusEncoder: info = OpusEncoder::getEncoderInfo(); break; case SettingsModel::OpusEncoder: info = OpusEncoder::getEncoderInfo(); break;
case SettingsModel::DCAEncoder: info = DCAEncoder::getEncoderInfo(); break; case SettingsModel::DCAEncoder: info = DCAEncoder::getEncoderInfo(); break;
case SettingsModel::MACEncoder: info = MACEncoder::getEncoderInfo(); break;
case SettingsModel::PCMEncoder: info = WaveEncoder::getEncoderInfo(); break; case SettingsModel::PCMEncoder: info = WaveEncoder::getEncoderInfo(); break;
case SettingsModel::AACEncoder: case SettingsModel::AACEncoder:
switch(getAacEncoder()) switch(getAacEncoder())
@ -252,6 +261,7 @@ void EncoderRegistry::saveEncoderMode(SettingsModel *settings, const int encoder
case SettingsModel::FLACEncoder: STORE_MODE(FLAC, rcMode); break; case SettingsModel::FLACEncoder: STORE_MODE(FLAC, rcMode); break;
case SettingsModel::OpusEncoder: STORE_MODE(OpusEnc, rcMode); break; case SettingsModel::OpusEncoder: STORE_MODE(OpusEnc, rcMode); break;
case SettingsModel::DCAEncoder: STORE_MODE(DcaEnc, rcMode); break; case SettingsModel::DCAEncoder: STORE_MODE(DcaEnc, rcMode); break;
case SettingsModel::MACEncoder: STORE_MODE(MacEnc, rcMode); break;
case SettingsModel::PCMEncoder: STORE_MODE(Wave, rcMode); break; case SettingsModel::PCMEncoder: STORE_MODE(Wave, rcMode); break;
default: THROW("Unsupported encoder!"); default: THROW("Unsupported encoder!");
} }
@ -271,6 +281,7 @@ int EncoderRegistry::loadEncoderMode(const SettingsModel *settings, const int en
case SettingsModel::FLACEncoder: LOAD_MODE(rcMode, FLAC); break; case SettingsModel::FLACEncoder: LOAD_MODE(rcMode, FLAC); break;
case SettingsModel::OpusEncoder: LOAD_MODE(rcMode, OpusEnc); break; case SettingsModel::OpusEncoder: LOAD_MODE(rcMode, OpusEnc); break;
case SettingsModel::DCAEncoder: LOAD_MODE(rcMode, DcaEnc); break; case SettingsModel::DCAEncoder: LOAD_MODE(rcMode, DcaEnc); break;
case SettingsModel::MACEncoder: LOAD_MODE(rcMode, MacEnc); break;
case SettingsModel::PCMEncoder: LOAD_MODE(rcMode, Wave); break; case SettingsModel::PCMEncoder: LOAD_MODE(rcMode, Wave); break;
default: THROW("Unsupported encoder!"); default: THROW("Unsupported encoder!");
} }
@ -316,6 +327,7 @@ void EncoderRegistry::saveEncoderValue(SettingsModel *settings, const int encode
case SettingsModel::FLACEncoder: STORE_VALUE(FLAC, rcMode, value); break; case SettingsModel::FLACEncoder: STORE_VALUE(FLAC, rcMode, value); break;
case SettingsModel::OpusEncoder: STORE_VALUE(OpusEnc, rcMode, value); break; case SettingsModel::OpusEncoder: STORE_VALUE(OpusEnc, rcMode, value); break;
case SettingsModel::DCAEncoder: STORE_VALUE(DcaEnc, rcMode, value); break; case SettingsModel::DCAEncoder: STORE_VALUE(DcaEnc, rcMode, value); break;
case SettingsModel::MACEncoder: STORE_VALUE(MacEnc, rcMode, value); break;
case SettingsModel::PCMEncoder: STORE_VALUE(Wave, rcMode, value); break; case SettingsModel::PCMEncoder: STORE_VALUE(Wave, rcMode, value); break;
default: THROW("Unsupported encoder!"); default: THROW("Unsupported encoder!");
} }
@ -341,6 +353,7 @@ int EncoderRegistry::loadEncoderValue(const SettingsModel *settings, const int e
case SettingsModel::FLACEncoder: LOAD_VALUE(value, FLAC, rcMode); break; case SettingsModel::FLACEncoder: LOAD_VALUE(value, FLAC, rcMode); break;
case SettingsModel::OpusEncoder: LOAD_VALUE(value, OpusEnc, rcMode); break; case SettingsModel::OpusEncoder: LOAD_VALUE(value, OpusEnc, rcMode); break;
case SettingsModel::DCAEncoder: LOAD_VALUE(value, DcaEnc, rcMode); break; case SettingsModel::DCAEncoder: LOAD_VALUE(value, DcaEnc, rcMode); break;
case SettingsModel::MACEncoder: LOAD_VALUE(value, MacEnc, rcMode); break;
case SettingsModel::PCMEncoder: LOAD_VALUE(value, Wave, rcMode); break; case SettingsModel::PCMEncoder: LOAD_VALUE(value, Wave, rcMode); break;
default: THROW("Unsupported encoder!"); default: THROW("Unsupported encoder!");
} }
@ -376,6 +389,7 @@ void EncoderRegistry::saveEncoderCustomParams(SettingsModel *settings, const int
case SettingsModel::FLACEncoder: STORE_PARAMS(FLAC, params.trimmed()); break; case SettingsModel::FLACEncoder: STORE_PARAMS(FLAC, params.trimmed()); break;
case SettingsModel::OpusEncoder: STORE_PARAMS(OpusEnc, params.trimmed()); break; case SettingsModel::OpusEncoder: STORE_PARAMS(OpusEnc, params.trimmed()); break;
case SettingsModel::DCAEncoder: STORE_PARAMS(DcaEnc, params.trimmed()); break; case SettingsModel::DCAEncoder: STORE_PARAMS(DcaEnc, params.trimmed()); break;
case SettingsModel::MACEncoder: STORE_PARAMS(MacEnc, params.trimmed()); break;
case SettingsModel::PCMEncoder: STORE_PARAMS(Wave, params.trimmed()); break; case SettingsModel::PCMEncoder: STORE_PARAMS(Wave, params.trimmed()); break;
default: THROW("Unsupported encoder!"); default: THROW("Unsupported encoder!");
} }
@ -395,6 +409,7 @@ QString EncoderRegistry::loadEncoderCustomParams(const SettingsModel *settings,
case SettingsModel::FLACEncoder: LOAD_PARAMS(params, FLAC); break; case SettingsModel::FLACEncoder: LOAD_PARAMS(params, FLAC); break;
case SettingsModel::OpusEncoder: LOAD_PARAMS(params, OpusEnc); break; case SettingsModel::OpusEncoder: LOAD_PARAMS(params, OpusEnc); break;
case SettingsModel::DCAEncoder: LOAD_PARAMS(params, DcaEnc); break; case SettingsModel::DCAEncoder: LOAD_PARAMS(params, DcaEnc); break;
case SettingsModel::MACEncoder: LOAD_PARAMS(params, MacEnc); break;
case SettingsModel::PCMEncoder: LOAD_PARAMS(params, Wave); break; case SettingsModel::PCMEncoder: LOAD_PARAMS(params, Wave); break;
default: THROW("Unsupported encoder!"); default: THROW("Unsupported encoder!");
} }
@ -419,6 +434,7 @@ void EncoderRegistry::resetAllEncoders(SettingsModel *settings)
RESET_SETTING(settings, compressionAbrBitrateDcaEnc); RESET_SETTING(settings, compressionAbrBitrateDcaEnc);
RESET_SETTING(settings, compressionAbrBitrateFLAC); RESET_SETTING(settings, compressionAbrBitrateFLAC);
RESET_SETTING(settings, compressionAbrBitrateLAME); RESET_SETTING(settings, compressionAbrBitrateLAME);
RESET_SETTING(settings, compressionAbrBitrateMacEnc);
RESET_SETTING(settings, compressionAbrBitrateOggEnc); RESET_SETTING(settings, compressionAbrBitrateOggEnc);
RESET_SETTING(settings, compressionAbrBitrateOpusEnc); RESET_SETTING(settings, compressionAbrBitrateOpusEnc);
RESET_SETTING(settings, compressionAbrBitrateWave); RESET_SETTING(settings, compressionAbrBitrateWave);
@ -428,6 +444,7 @@ void EncoderRegistry::resetAllEncoders(SettingsModel *settings)
RESET_SETTING(settings, compressionCbrBitrateDcaEnc); RESET_SETTING(settings, compressionCbrBitrateDcaEnc);
RESET_SETTING(settings, compressionCbrBitrateFLAC); RESET_SETTING(settings, compressionCbrBitrateFLAC);
RESET_SETTING(settings, compressionCbrBitrateLAME); RESET_SETTING(settings, compressionCbrBitrateLAME);
RESET_SETTING(settings, compressionCbrBitrateMacEnc);
RESET_SETTING(settings, compressionCbrBitrateOggEnc); RESET_SETTING(settings, compressionCbrBitrateOggEnc);
RESET_SETTING(settings, compressionCbrBitrateOpusEnc); RESET_SETTING(settings, compressionCbrBitrateOpusEnc);
RESET_SETTING(settings, compressionCbrBitrateWave); RESET_SETTING(settings, compressionCbrBitrateWave);
@ -437,6 +454,7 @@ void EncoderRegistry::resetAllEncoders(SettingsModel *settings)
RESET_SETTING(settings, compressionRCModeDcaEnc); RESET_SETTING(settings, compressionRCModeDcaEnc);
RESET_SETTING(settings, compressionRCModeFLAC); RESET_SETTING(settings, compressionRCModeFLAC);
RESET_SETTING(settings, compressionRCModeLAME); RESET_SETTING(settings, compressionRCModeLAME);
RESET_SETTING(settings, compressionRCModeMacEnc);
RESET_SETTING(settings, compressionRCModeOggEnc); RESET_SETTING(settings, compressionRCModeOggEnc);
RESET_SETTING(settings, compressionRCModeOpusEnc); RESET_SETTING(settings, compressionRCModeOpusEnc);
RESET_SETTING(settings, compressionRCModeWave); RESET_SETTING(settings, compressionRCModeWave);
@ -446,6 +464,7 @@ void EncoderRegistry::resetAllEncoders(SettingsModel *settings)
RESET_SETTING(settings, compressionVbrQualityDcaEnc); RESET_SETTING(settings, compressionVbrQualityDcaEnc);
RESET_SETTING(settings, compressionVbrQualityFLAC); RESET_SETTING(settings, compressionVbrQualityFLAC);
RESET_SETTING(settings, compressionVbrQualityLAME); RESET_SETTING(settings, compressionVbrQualityLAME);
RESET_SETTING(settings, compressionVbrQualityMacEnc);
RESET_SETTING(settings, compressionVbrQualityOggEnc); RESET_SETTING(settings, compressionVbrQualityOggEnc);
RESET_SETTING(settings, compressionVbrQualityOpusEnc); RESET_SETTING(settings, compressionVbrQualityOpusEnc);
RESET_SETTING(settings, compressionVbrQualityWave); RESET_SETTING(settings, compressionVbrQualityWave);

View File

@ -58,7 +58,7 @@ static const char *update_mirrors_prim[] =
"http://muldersoft.zxq.net/", "http://muldersoft.zxq.net/",
"http://lamexp.sourceforge.net/", "http://lamexp.sourceforge.net/",
"http://lamexp.berlios.de/", "http://lamexp.berlios.de/",
"http://lordmulder.github.com/LameXP/", "http://lordmulder.github.io/LameXP/",
"http://lord_mulder.bitbucket.org/", "http://lord_mulder.bitbucket.org/",
"http://www.tricksoft.de/", "http://www.tricksoft.de/",
NULL NULL

View File

@ -65,7 +65,7 @@ g_lamexp_tools[] =
{"19c9dbe9089491c1f59ae48016d95d4336c4d3743577db4e782d8b59eca3b2bda6ed8f92f9004f88f434935b79e4974b", CPU_TYPE_ALL_ALL, "gpgv.gpg", UINT_MAX, ""}, {"19c9dbe9089491c1f59ae48016d95d4336c4d3743577db4e782d8b59eca3b2bda6ed8f92f9004f88f434935b79e4974b", CPU_TYPE_ALL_ALL, "gpgv.gpg", UINT_MAX, ""},
{"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"},
{"0bc73180090547215d10cb7112d05503f7f666ef60ee0556d0f648a6c65172554ed04a05bc5d08b5645437c5408dffe9", CPU_TYPE_ALL_ALL, "mac.exe", 411, ""}, {"fdbeb978025b9a5345300f37bb56446c31c7db594cf29407afdcc9ce20f4a5cec6eb8c03962c247d4f45b83c465ac705", CPU_TYPE_ALL_ALL, "mac.exe", 412, ""},
{"21c4e79cc032d3b7ee635295cef99dc8ec1a0bf184ef613cdd372ec6d406ba2f376dc2873f65e6ab7e9fc0b38aabbb59", CPU_TYPE_X86_ALL, "mediainfo.i386.exe", 764, ""}, {"21c4e79cc032d3b7ee635295cef99dc8ec1a0bf184ef613cdd372ec6d406ba2f376dc2873f65e6ab7e9fc0b38aabbb59", CPU_TYPE_X86_ALL, "mediainfo.i386.exe", 764, ""},
{"4e74c7802f9b015c7da9a97a37af0c6eced9f0fead3ad6720e76ac9d429d0319b5013e7957106a28a22f7415fb01b3d3", CPU_TYPE_X64_ALL, "mediainfo.x64.exe", 764, ""}, {"4e74c7802f9b015c7da9a97a37af0c6eced9f0fead3ad6720e76ac9d429d0319b5013e7957106a28a22f7415fb01b3d3", CPU_TYPE_X64_ALL, "mediainfo.x64.exe", 764, ""},
{"7e6346a057634ff07b2e1f427035324f7f02100cc996425990f87f71d767fce4c7b101588c7d944ba49cb2d7e51c9bdb", CPU_TYPE_ALL_ALL, "mpcdec.exe", 475, ""}, {"7e6346a057634ff07b2e1f427035324f7f02100cc996425990f87f71d767fce4c7b101588c7d944ba49cb2d7e51c9bdb", CPU_TYPE_ALL_ALL, "mpcdec.exe", 475, ""},
@ -80,7 +80,8 @@ g_lamexp_tools[] =
{"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, ""},
{"5a4261e1b41a59d1a5bc92e1d2766422a67454d77e06ea29af392811b7b4704e0f3e494ab9cb6375ce9e39257867c5ed", CPU_TYPE_ALL_ALL, "speexdec.exe", 12}, {"5a4261e1b41a59d1a5bc92e1d2766422a67454d77e06ea29af392811b7b4704e0f3e494ab9cb6375ce9e39257867c5ed", CPU_TYPE_ALL_ALL, "speexdec.exe", 12, ""},
{"75d4c18dbb74e2dbf7342698428248d45cc4070d5f95da8831ef755e63dcd7ff9c3a760f289e8ef8b5c06b82548edbd8", CPU_TYPE_ALL_ALL, "tag.exe", 100, ""},
{"a83628880da0b7519ec368a74a92da5a5099d8d46aa0583131f92d7321f47c9e16a1841b2a3fb8ffcca7205ef4b1bb0a", CPU_TYPE_ALL_ALL, "tta.exe", 21, ""}, {"a83628880da0b7519ec368a74a92da5a5099d8d46aa0583131f92d7321f47c9e16a1841b2a3fb8ffcca7205ef4b1bb0a", CPU_TYPE_ALL_ALL, "tta.exe", 21, ""},
{"9e1ade2137ea5cee0ad4657971c314a372df3068594fbe4f77d45b9eb65fa7c69e55027b0df81b6fe072a220e9a8ba8a", CPU_TYPE_ALL_ALL, "valdec.exe", 100, "a"}, {"9e1ade2137ea5cee0ad4657971c314a372df3068594fbe4f77d45b9eb65fa7c69e55027b0df81b6fe072a220e9a8ba8a", CPU_TYPE_ALL_ALL, "valdec.exe", 100, "a"},
{"509df39fdd7033b0f1af831304d0d6c08b74d5a48e2c038857a78b9dfaa4fb83c6b5c7ea202ba2270c0384607f2316ee", CPU_TYPE_ALL_ALL, "wget.exe", 1140, ""}, {"509df39fdd7033b0f1af831304d0d6c08b74d5a48e2c038857a78b9dfaa4fb83c6b5c7ea202ba2270c0384607f2316ee", CPU_TYPE_ALL_ALL, "wget.exe", 1140, ""},