OSDN Git Service

Updated Monkey's Audio binary to v4.11 (2013-01-20), including STDERR flush fix.
[lamexp/LameXP.git] / src / Encoder_AAC_QAAC.cpp
index 754327b..cb7c934 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // LameXP - Audio Encoder Front-End
-// Copyright (C) 2004-2011 LoRd_MuldeR <MuldeR2@GMX.de>
+// 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
 
 QAACEncoder::QAACEncoder(void)
 :
-       m_binary_enc(lamexp_lookup_tool("qaac.exe"))
+       m_binary_enc(lamexp_lookup_tool("qaac.exe")),
+       m_binary_dll(lamexp_lookup_tool("libsoxrate.dll"))
 {
-       if(m_binary_enc.isEmpty())
+       if(m_binary_enc.isEmpty() || m_binary_dll.isEmpty())
        {
                throw "Error initializing QAAC. Tool 'qaac.exe' is not registred!";
        }
@@ -53,9 +54,7 @@ bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn
        process.setWorkingDirectory(QFileInfo(outputFile).canonicalPath());
 
        QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
-       env.insert("PATH", QString("%1;%2").arg(QDir::toNativeSeparators(QDir(QCoreApplication::applicationDirPath()).canonicalPath()), QDir::toNativeSeparators(lamexp_temp_folder2())));
-       env.insert("TEMP", QDir::toNativeSeparators(lamexp_temp_folder2()));
-       env.insert("TMP", QDir::toNativeSeparators(lamexp_temp_folder2()));
+       env.insert("PATH", QDir::toNativeSeparators(QString("%1;%1/QTfiles;%2").arg(QDir(QCoreApplication::applicationDirPath()).canonicalPath(), lamexp_temp_folder2())));
        process.setProcessEnvironment(env);
 
        if(m_configRCMode != SettingsModel::VBRMode)
@@ -78,7 +77,7 @@ bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn
                args << "--abr" << QString::number(qBound(32, m_configBitrate * 8, 500));
                break;
        case SettingsModel::VBRMode:
-               args << "--tvbr" << QString::number(qBound(0, qRound((static_cast<double>(m_configBitrate * 5) / 100.0) * 127.0), 127));
+               args << "--tvbr" << QString::number(qBound(0, m_configBitrate * 4, 127));
                break;
        default:
                throw "Bad rate-control mode!";
@@ -87,11 +86,11 @@ bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn
 
        if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
 
-       if(!metaInfo.fileName().isEmpty()) args << "--title" << metaInfo.fileName();
-       if(!metaInfo.fileArtist().isEmpty()) args << "--artist" << metaInfo.fileArtist();
-       if(!metaInfo.fileAlbum().isEmpty()) args << "--album" << metaInfo.fileAlbum();
-       if(!metaInfo.fileGenre().isEmpty()) args << "--genre" << metaInfo.fileGenre();
-       if(!metaInfo.fileComment().isEmpty()) args << "--comment" << metaInfo.fileComment();
+       if(!metaInfo.fileName().isEmpty()) args << "--title" << cleanTag(metaInfo.fileName());
+       if(!metaInfo.fileArtist().isEmpty()) args << "--artist" << cleanTag(metaInfo.fileArtist());
+       if(!metaInfo.fileAlbum().isEmpty()) args << "--album" << cleanTag(metaInfo.fileAlbum());
+       if(!metaInfo.fileGenre().isEmpty()) args << "--genre" << cleanTag(metaInfo.fileGenre());
+       if(!metaInfo.fileComment().isEmpty()) args << "--comment" << cleanTag( metaInfo.fileComment());
        if(metaInfo.fileYear()) args << "--date" << QString::number(metaInfo.fileYear());
        if(metaInfo.filePosition()) args << "--track" << QString::number(metaInfo.filePosition());
        if(!metaInfo.fileCover().isEmpty()) args << "--artwork" << metaInfo.fileCover();
@@ -160,7 +159,7 @@ bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn
        emit statusUpdated(100);
        emit messageLogged(QString().sprintf("\nExited with code: 0x%04X", process.exitCode()));
 
-       if(bTimeout || bAborted || process.exitStatus() != QProcess::NormalExit)
+       if(bTimeout || bAborted || process.exitCode() != EXIT_SUCCESS)
        {
                return false;
        }