Use the built-in tagging capability of Monkey's Audio encoder (available since v5.43) + drop the 'tag.exe' tool.

This commit is contained in:
LoRd_MuldeR 2021-02-21 21:43:59 +01:00
parent 2e3954adb0
commit a979a3a5d4
11 changed files with 44 additions and 71 deletions

View File

@ -680,11 +680,6 @@ copy /Y "$(SolutionDir)\..\Prerequisites\Qt4\$(PlatformToolset)\Shared\plugins\i
<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> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">false</ExcludedFromBuild>
</ClCompile> </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"> <ClCompile Include="tmp\LameXP\QRC_Tools.tta.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -1970,21 +1965,6 @@ copy /Y "$(SolutionDir)\..\Prerequisites\Qt4\$(PlatformToolset)\Shared\plugins\i
<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> <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Static|Win32'">false</ExcludedFromBuild>
</CustomBuild> </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"> <CustomBuild Include="res\Tools.tta.qrc">
<FileType>Document</FileType> <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> <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\rcc.exe" -o "$(SolutionDir)tmp\$(ProjectName)\QRC_%(Filename).cpp" -no-compress -name "%(Filename)" "%(FullPath)"</Command>

View File

@ -493,9 +493,6 @@
<ClCompile Include="tmp\LameXP\QRC_Tools.speexdec.cpp"> <ClCompile Include="tmp\LameXP\QRC_Tools.speexdec.cpp">
<Filter>Generated Files\QRC</Filter> <Filter>Generated Files\QRC</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="tmp\LameXP\QRC_Tools.tag.cpp">
<Filter>Generated Files\QRC</Filter>
</ClCompile>
<ClCompile Include="tmp\LameXP\QRC_Tools.tta.cpp"> <ClCompile Include="tmp\LameXP\QRC_Tools.tta.cpp">
<Filter>Generated Files\QRC</Filter> <Filter>Generated Files\QRC</Filter>
</ClCompile> </ClCompile>
@ -998,9 +995,6 @@
<CustomBuild Include="res\Tools.speexdec.qrc"> <CustomBuild Include="res\Tools.speexdec.qrc">
<Filter>Resources</Filter> <Filter>Resources</Filter>
</CustomBuild> </CustomBuild>
<CustomBuild Include="res\Tools.tag.qrc">
<Filter>Resources</Filter>
</CustomBuild>
<CustomBuild Include="res\Tools.tta.qrc"> <CustomBuild Include="res\Tools.tta.qrc">
<Filter>Resources</Filter> <Filter>Resources</Filter>
</CustomBuild> </CustomBuild>

View File

@ -1,2 +0,0 @@
<!DOCTYPE RCC>
<RCC version="1.0"><qresource><file>tools/tag.exe</file></qresource></RCC>

View File

@ -267,7 +267,6 @@
<file>tools/sox.i686.exe</file> <file>tools/sox.i686.exe</file>
<file>tools/sox.sse2.exe</file> <file>tools/sox.sse2.exe</file>
<file>tools/speexdec.exe</file> <file>tools/speexdec.exe</file>
<file>tools/tag.exe</file>
<file>tools/tta.exe</file> <file>tools/tta.exe</file>
<file>tools/valdec.exe</file> <file>tools/valdec.exe</file>
<file>tools/vorbiscomment.exe</file> <file>tools/vorbiscomment.exe</file>

View File

@ -35,7 +35,7 @@
#define VER_LAMEXP_MINOR_LO 9 #define VER_LAMEXP_MINOR_LO 9
#define VER_LAMEXP_TYPE RC #define VER_LAMEXP_TYPE RC
#define VER_LAMEXP_PATCH 3 #define VER_LAMEXP_PATCH 3
#define VER_LAMEXP_BUILD 2297 #define VER_LAMEXP_BUILD 2299
#define VER_LAMEXP_CONFG 2188 #define VER_LAMEXP_CONFG 2188
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

View File

@ -128,7 +128,8 @@ bool AbstractEncoder::isUnicode(const QString &original)
QString AbstractEncoder::cleanTag(const QString &text) QString AbstractEncoder::cleanTag(const QString &text)
{ {
QString result(text); QString result(text);
result.replace(QChar('"'), "'"); result.replace(QChar('"'), "'");
result.replace(QChar('\\'), "/"); result.replace(QChar('\\'), "/");
result.replace(QChar('|'), "/");
return result; return result;
} }

View File

@ -28,6 +28,13 @@
#include <QProcess> #include <QProcess>
#include <QDir> #include <QDir>
#define APPEND_TAG(NAME, VALUE) do \
{ \
if (!buffer.isEmpty()) buffer += L1C('|'); \
buffer += QString("%1=%2").arg((NAME), (VALUE)); \
} \
while(0)
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Encoder Info // Encoder Info
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -123,12 +130,11 @@ static const g_macEncoderInfo;
MACEncoder::MACEncoder(void) MACEncoder::MACEncoder(void)
: :
m_binary_enc(lamexp_tools_lookup(L1S("mac.exe"))), m_binary(lamexp_tools_lookup(L1S("mac.exe")))
m_binary_tag(lamexp_tools_lookup(L1S("tag.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!");
} }
} }
@ -156,7 +162,16 @@ bool MACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo
break; 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;
} }
@ -182,37 +197,7 @@ bool MACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo
return false; return false;
}); });
if(result != RESULT_SUCCESS) return (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);
} }
bool MACEncoder::isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion) bool MACEncoder::isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion)
@ -232,3 +217,18 @@ const AbstractEncoderInfo *MACEncoder::getEncoderInfo(void)
{ {
return &g_macEncoderInfo; 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;
}

View File

@ -42,6 +42,7 @@ public:
static const AbstractEncoderInfo *getEncoderInfo(void); static const AbstractEncoderInfo *getEncoderInfo(void);
private: private:
const QString m_binary_enc; const QString m_binary;
const QString m_binary_tag;
QString createApeTags(const AudioFileModel_MetaInfo &metaInfo);
}; };

View File

@ -227,7 +227,7 @@ bool MP3Encoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo
if(!metaInfo.title().isEmpty()) args << L1S("--tt") << cleanTag(metaInfo.title()); if(!metaInfo.title().isEmpty()) args << L1S("--tt") << cleanTag(metaInfo.title());
if(!metaInfo.artist().isEmpty()) args << L1S("--ta") << cleanTag(metaInfo.artist()); 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.genre().isEmpty()) args << L1S("--tg") << cleanTag(metaInfo.genre());
if(!metaInfo.comment().isEmpty()) args << L1S("--tc") << cleanTag(metaInfo.comment()); if(!metaInfo.comment().isEmpty()) args << L1S("--tc") << cleanTag(metaInfo.comment());
if(metaInfo.year()) args << L1S("--ty") << QString::number(metaInfo.year()); if(metaInfo.year()) args << L1S("--ty") << QString::number(metaInfo.year());

View File

@ -88,4 +88,5 @@ const QString lamexp_version2string(const QString &pattern, unsigned int version
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#define L1S(STR) (QLatin1String((STR))) #define L1S(STR) (QLatin1String((STR)))
#define L1C(CHR) (QLatin1Char((CHR)))
#define NOBREAK(STR) (QString("<div style='white-space:pre'>%1</div>").arg((STR))) #define NOBREAK(STR) (QString("<div style='white-space:pre'>%1</div>").arg((STR)))

View File

@ -115,7 +115,6 @@ g_lamexp_tools[] =
{"16a71940aa5e9b393e83cdfb2a4dda4291ea01858f8ba338510013f25f4d7c53b9b5cffb86404ea49ef28e6795182fd5", CPU_TYPE_ALL_SSE, "sox.sse2.exe", 1442, "" }, {"16a71940aa5e9b393e83cdfb2a4dda4291ea01858f8ba338510013f25f4d7c53b9b5cffb86404ea49ef28e6795182fd5", CPU_TYPE_ALL_SSE, "sox.sse2.exe", 1442, "" },
{"25585ca9e2e025d82d93341a9db8527eb0b4ce451dade607f9784a79ed30e050ced0824835d5467aa0bf0c6b8fe08612", CPU_TYPE_ALL_AVX, "sox.avx.exe", 1442, "" }, {"25585ca9e2e025d82d93341a9db8527eb0b4ce451dade607f9784a79ed30e050ced0824835d5467aa0bf0c6b8fe08612", CPU_TYPE_ALL_AVX, "sox.avx.exe", 1442, "" },
{"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"},
{"572b9448bf4a338ecb9727951fdfcc5a219cc69896695cc96b9f6b083690e339910e41558968264a38992e45f2be152c", CPU_TYPE_ALL_ALL, "wma2wav.exe", 20111001, ""}, {"572b9448bf4a338ecb9727951fdfcc5a219cc69896695cc96b9f6b083690e339910e41558968264a38992e45f2be152c", CPU_TYPE_ALL_ALL, "wma2wav.exe", 20111001, ""},