<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">false</ExcludedFromBuild>
</ClCompile>
- <ClCompile Include="tmp\LameXP\QRC_Tools.tag.cpp">
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">false</ExcludedFromBuild>
- </ClCompile>
<ClCompile Include="tmp\LameXP\QRC_Tools.tta.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">false</ExcludedFromBuild>
</CustomBuild>
- <CustomBuild Include="res\Tools.tag.qrc">
- <FileType>Document</FileType>
- <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" -no-compress -name "%(Filename)" "%(FullPath)"</Command>
- <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">RCC "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp"</Message>
- <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp;%(Outputs)</Outputs>
- <Command Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" -no-compress -name "%(Filename)" "%(FullPath)"</Command>
- <Message Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">RCC "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp"</Message>
- <Outputs Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp;%(Outputs)</Outputs>
- <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" -no-compress -name "%(Filename)" "%(FullPath)"</Command>
- <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">RCC "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp"</Message>
- <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp;%(Outputs)</Outputs>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
- <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">false</ExcludedFromBuild>
- </CustomBuild>
<CustomBuild Include="res\Tools.tta.qrc">
<FileType>Document</FileType>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" -no-compress -name "%(Filename)" "%(FullPath)"</Command>
<ClCompile Include="tmp\LameXP\QRC_Tools.speexdec.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
- <ClCompile Include="tmp\LameXP\QRC_Tools.tag.cpp">
- <Filter>Generated Files\QRC</Filter>
- </ClCompile>
<ClCompile Include="tmp\LameXP\QRC_Tools.tta.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<CustomBuild Include="res\Tools.speexdec.qrc">
<Filter>Resources</Filter>
</CustomBuild>
- <CustomBuild Include="res\Tools.tag.qrc">
- <Filter>Resources</Filter>
- </CustomBuild>
<CustomBuild Include="res\Tools.tta.qrc">
<Filter>Resources</Filter>
</CustomBuild>
+++ /dev/null
-<!DOCTYPE RCC>
-<RCC version="1.0"><qresource><file>tools/tag.exe</file></qresource></RCC>
<file>tools/sox.i686.exe</file>
<file>tools/sox.sse2.exe</file>
<file>tools/speexdec.exe</file>
- <file>tools/tag.exe</file>
<file>tools/tta.exe</file>
<file>tools/valdec.exe</file>
<file>tools/vorbiscomment.exe</file>
#define VER_LAMEXP_MINOR_LO 9
#define VER_LAMEXP_TYPE RC
#define VER_LAMEXP_PATCH 3
-#define VER_LAMEXP_BUILD 2297
+#define VER_LAMEXP_BUILD 2299
#define VER_LAMEXP_CONFG 2188
///////////////////////////////////////////////////////////////////////////////
QString AbstractEncoder::cleanTag(const QString &text)
{
QString result(text);
- result.replace(QChar('"'), "'");
+ result.replace(QChar('"'), "'");
result.replace(QChar('\\'), "/");
+ result.replace(QChar('|'), "/");
return result;
}
#include <QProcess>
#include <QDir>
+#define APPEND_TAG(NAME, VALUE) do \
+{ \
+ if (!buffer.isEmpty()) buffer += L1C('|'); \
+ buffer += QString("%1=%2").arg((NAME), (VALUE)); \
+} \
+while(0)
+
///////////////////////////////////////////////////////////////////////////////
// Encoder Info
///////////////////////////////////////////////////////////////////////////////
MACEncoder::MACEncoder(void)
:
- m_binary_enc(lamexp_tools_lookup(L1S("mac.exe"))),
- m_binary_tag(lamexp_tools_lookup(L1S("tag.exe")))
+ m_binary(lamexp_tools_lookup(L1S("mac.exe")))
{
- if(m_binary_enc.isEmpty() || m_binary_tag.isEmpty())
+ if (m_binary.isEmpty())
{
- MUTILS_THROW("Error initializing MAC encoder. Tool 'mac.exe' or 'tag.exe' is not registred!");
+ MUTILS_THROW("Error initializing MAC encoder. Tool 'mac.exe' is not registred!");
}
}
break;
}
- if(!startProcess(process, m_binary_enc, args))
+ if (!metaInfo.empty(true))
+ {
+ const QString apeTagsData = createApeTags(metaInfo);
+ if (!apeTagsData.isEmpty())
+ {
+ args << "-t" << apeTagsData;
+ }
+ }
+
+ if(!startProcess(process, m_binary, args))
{
return false;
}
return false;
});
- if(result != RESULT_SUCCESS)
- {
- return false;
- }
-
- if(metaInfo.empty(true))
- {
- return true;
- }
-
- emit messageLogged(L1S("\n-------------------------------\n"));
-
- args.clear();
- args << L1S("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;
- }
-
- return (awaitProcess(process, abortFlag) == RESULT_SUCCESS);
+ return (result == RESULT_SUCCESS);
}
bool MACEncoder::isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion)
{
return &g_macEncoderInfo;
}
+
+QString MACEncoder::createApeTags(const AudioFileModel_MetaInfo &metaInfo)
+{
+ QString buffer;
+
+ if (!metaInfo.title().isEmpty()) APPEND_TAG(L1S("Title"), cleanTag(metaInfo.title()));
+ if (!metaInfo.artist().isEmpty()) APPEND_TAG(L1S("Artist"), cleanTag(metaInfo.artist()));
+ if (!metaInfo.album().isEmpty()) APPEND_TAG(L1S("Album"), cleanTag(metaInfo.album()));
+ if (!metaInfo.genre().isEmpty()) APPEND_TAG(L1S("Genre"), cleanTag(metaInfo.genre()));
+ if (!metaInfo.comment().isEmpty()) APPEND_TAG(L1S("Comment"), cleanTag(metaInfo.comment()));
+ if (metaInfo.year()) APPEND_TAG(L1S("Year"), QString::number(metaInfo.year()));
+ if (metaInfo.position()) APPEND_TAG(L1S("Track"), QString::number(metaInfo.position()));
+
+ return buffer;
+}
static const AbstractEncoderInfo *getEncoderInfo(void);
private:
- const QString m_binary_enc;
- const QString m_binary_tag;
+ const QString m_binary;
+
+ QString createApeTags(const AudioFileModel_MetaInfo &metaInfo);
};
if(!metaInfo.title().isEmpty()) args << L1S("--tt") << cleanTag(metaInfo.title());
if(!metaInfo.artist().isEmpty()) args << L1S("--ta") << cleanTag(metaInfo.artist());
- if(!metaInfo.album().isEmpty()) args << L1S("--tl") << cleanTag( metaInfo.album());
+ if(!metaInfo.album().isEmpty()) args << L1S("--tl") << cleanTag(metaInfo.album());
if(!metaInfo.genre().isEmpty()) args << L1S("--tg") << cleanTag(metaInfo.genre());
if(!metaInfo.comment().isEmpty()) args << L1S("--tc") << cleanTag(metaInfo.comment());
if(metaInfo.year()) args << L1S("--ty") << QString::number(metaInfo.year());
///////////////////////////////////////////////////////////////////////////////
#define L1S(STR) (QLatin1String((STR)))
+#define L1C(CHR) (QLatin1Char((CHR)))
#define NOBREAK(STR) (QString("<div style='white-space:pre'>%1</div>").arg((STR)))
{"16a71940aa5e9b393e83cdfb2a4dda4291ea01858f8ba338510013f25f4d7c53b9b5cffb86404ea49ef28e6795182fd5", CPU_TYPE_ALL_SSE, "sox.sse2.exe", 1442, "" },
{"25585ca9e2e025d82d93341a9db8527eb0b4ce451dade607f9784a79ed30e050ced0824835d5467aa0bf0c6b8fe08612", CPU_TYPE_ALL_AVX, "sox.avx.exe", 1442, "" },
{"5a4261e1b41a59d1a5bc92e1d2766422a67454d77e06ea29af392811b7b4704e0f3e494ab9cb6375ce9e39257867c5ed", CPU_TYPE_ALL_ALL, "speexdec.exe", 12, ""},
- {"75d4c18dbb74e2dbf7342698428248d45cc4070d5f95da8831ef755e63dcd7ff9c3a760f289e8ef8b5c06b82548edbd8", CPU_TYPE_ALL_ALL, "tag.exe", 100, ""},
{"a83628880da0b7519ec368a74a92da5a5099d8d46aa0583131f92d7321f47c9e16a1841b2a3fb8ffcca7205ef4b1bb0a", CPU_TYPE_ALL_ALL, "tta.exe", 21, ""},
{"9e1ade2137ea5cee0ad4657971c314a372df3068594fbe4f77d45b9eb65fa7c69e55027b0df81b6fe072a220e9a8ba8a", CPU_TYPE_ALL_ALL, "valdec.exe", 100, "a"},
{"572b9448bf4a338ecb9727951fdfcc5a219cc69896695cc96b9f6b083690e339910e41558968264a38992e45f2be152c", CPU_TYPE_ALL_ALL, "wma2wav.exe", 20111001, ""},