OSDN Git Service

Update Lame encoder to v3.99 Alpha-10 + implement simple MP3 encoding
authorlordmulder <mulder2@gmx.de>
Mon, 15 Nov 2010 20:07:58 +0000 (21:07 +0100)
committerlordmulder <mulder2@gmx.de>
Mon, 15 Nov 2010 20:07:58 +0000 (21:07 +0100)
res/tools/lame.exe
src/Config.h
src/Dialog_MainWindow.cpp
src/Global.h
src/Model_Settings.cpp
src/Model_Settings.h
src/Thread_Initialization.cpp

index 67986b4..7754d92 100644 (file)
Binary files a/res/tools/lame.exe and b/res/tools/lame.exe differ
index 84d7094..8638e28 100644 (file)
@@ -25,7 +25,7 @@
 #define VER_LAMEXP_MAJOR                               4
 #define VER_LAMEXP_MINOR_HI                            0
 #define VER_LAMEXP_MINOR_LO                            0
-#define VER_LAMEXP_BUILD                               21
+#define VER_LAMEXP_BUILD                               26
 #define VER_LAMEXP_SUFFIX                              TechPreview
 
 /*
index e0329fd..8100f6d 100644 (file)
@@ -49,8 +49,8 @@
 #include <QSysInfo>
 #include <QDragEnterEvent>
 #include <QWindowsMime>
-#include <QResource>
-#include <QTextStream>
+#include <QProcess>
+#include <QRegExp>
 
 //Win32 includes
 #include <Windows.h>
@@ -440,13 +440,122 @@ void MainWindow::aboutButtonClicked(void)
        LAMEXP_DELETE(aboutBox);
 }
 
+#define IF_UNICODE(STR) if(_stricmp(STR.toUtf8().constData(),QString::fromLocal8Bit(STR.toLocal8Bit()).toUtf8().constData()))
+
 /*
  * Encode button
  */
 void MainWindow::encodeButtonClicked(void)
 {
        ABORT_IF_BUSY;
-       QMessageBox::warning(this, "LameXP", "Not implemented yet, please try again with a later version!");
+       
+       if(m_settings->compressionEncoder() != SettingsModel::MP3Encoder)
+       {
+               QMessageBox::warning(this, "LameXP", "Sorry, only Lame MP3 is supported at the moment!");
+               tabWidget->setCurrentIndex(3);
+               return;
+       }
+               
+       QProcess process;
+       process.setProcessChannelMode(QProcess::MergedChannels);
+       process.setReadChannel(QProcess::StandardOutput);
+
+       m_banner->show("Encoding files, please wait...");
+
+       for(int i = 0; i < m_fileListModel->rowCount(); i++)
+       {
+               AudioFileModel file = m_fileListModel->getFile(m_fileListModel->index(i,0));
+               QString outFolder = m_fileSystemModel->filePath(this->outputFolderView->currentIndex());
+               
+               QString baseName = QFileInfo(file.filePath()).fileName();
+               int pos = baseName.lastIndexOf(".");
+               if(pos >= 1) baseName = baseName.left(pos);
+
+               QStringList args = QStringList() << "--nohist" << "-h";
+               
+               switch(m_settings->compressionRCMode())
+               {
+               case SettingsModel::VBRMode:
+                       args << "-V" << QString::number(9 - m_settings->compressionBitrate());
+                       break;
+               case SettingsModel::ABRMode:
+                       args << "--abr" << QString::number(SettingsModel::mp3Bitrates[m_settings->compressionBitrate()]);
+                       break;
+               case SettingsModel::CBRMode:
+                       args << "--cbr";
+                       args << "-b" << QString::number(SettingsModel::mp3Bitrates[m_settings->compressionBitrate()]);
+                       break;
+               }
+                               
+               int n = 1;
+               QString outFileName = QString(outFolder).append("/").append(baseName).append(".mp3");
+               
+               while(QFileInfo(outFileName).exists())
+               {
+                       outFileName = QString(outFolder).append("/").append(baseName).append(" (").append(QString::number(++n)).append(").mp3");
+               }
+
+               IF_UNICODE(file.fileName())
+               {
+                       args << "--uTitle" << file.fileName();
+               }
+               else
+               {
+                       args << "--lTitle" << file.fileName();
+               }
+               
+               args << QDir::toNativeSeparators(file.filePath());
+               args << QDir::toNativeSeparators(outFileName);
+
+               m_banner->setText(QString("Encoding: %1").arg(QFileInfo(file.filePath()).fileName()));
+               
+               process.start(lamexp_lookup_tool("lame.exe"), args);
+               if(!process.waitForStarted())
+               {
+                       QMessageBox::warning(this, "LAME", "Failed to create process!");
+                       m_banner->close();
+                       return;
+               }
+
+               QRegExp regExp("\\(.*(\\d+)%\\)\\|");
+
+               while(process.state() != QProcess::NotRunning)
+               {
+                       process.waitForReadyRead();
+                       QByteArray line = process.readLine();
+                       if(line.isEmpty())
+                       {
+                               break;
+                       }
+                       while(line.size() > 0)
+                       {
+                               qDebug("%s", line.constData());
+                               QString text = QString::fromLocal8Bit(line.constData()).simplified();
+                               if(regExp.lastIndexIn(line) >= 0)
+                               {
+                                       m_banner->setText(QString("Encoding: %1 (%2%)").arg(QFileInfo(file.filePath()).fileName(),regExp.cap(1)));
+                               }
+                               line = process.readLine();
+                               QApplication::processEvents();
+                       }
+               }
+
+               process.waitForFinished();
+               
+               if(process.state() != QProcess::NotRunning)
+               {
+                       process.kill();
+                       process.waitForFinished(-1);
+               }
+
+               if(process.exitStatus() != QProcess::NormalExit)
+               {
+                       QMessageBox::critical(this, "Error", QString("Ahrg, encoding has failed with error code %1.").arg(QString::number(process.exitCode())));
+               }
+       }
+
+       m_banner->close();
+       QMessageBox::information(this, "Done", "Encoding process completed.");
 }
 
 /*
@@ -882,8 +991,8 @@ void MainWindow::updateRCMode(int id)
                        sliderBitrate->setMaximum(9);
                        break;
                default:
-                       sliderBitrate->setMinimum(2);
-                       sliderBitrate->setMaximum(20);
+                       sliderBitrate->setMinimum(0);
+                       sliderBitrate->setMaximum(13);
                        break;
                }
                break;
@@ -967,7 +1076,7 @@ void MainWindow::updateBitrate(int value)
                switch(m_settings->compressionEncoder())
                {
                case SettingsModel::MP3Encoder:
-                       labelBitrate->setText(QString("&asymp; %1 kbps").arg(value * 16));
+                       labelBitrate->setText(QString("&asymp; %1 kbps").arg(SettingsModel::mp3Bitrates[value]));
                        break;
                case SettingsModel::FLACEncoder:
                        labelBitrate->setText(QString("Compression %1").arg(value));
@@ -984,7 +1093,7 @@ void MainWindow::updateBitrate(int value)
                switch(m_settings->compressionEncoder())
                {
                case SettingsModel::MP3Encoder:
-                       labelBitrate->setText(QString("%1 kbps").arg(value * 16));
+                       labelBitrate->setText(QString("%1 kbps").arg(SettingsModel::mp3Bitrates[value]));
                        break;
                case SettingsModel::FLACEncoder:
                        labelBitrate->setText(QString("Compression %1").arg(value));
index 964c05d..2d24fb8 100644 (file)
@@ -90,7 +90,7 @@ SIZE_T lamexp_dbg_private_bytes(void);
 #define LAMEXP_BOOL(X) (X ? "1" : "0")
 
 //Check for debug build
-#if defined(_DEBUG) || defined(QT_DEBUG) || !defined(NDEBUG) || !defined(QT_NODEBUG)
+#if defined(_DEBUG) || defined(QT_DEBUG) || !defined(NDEBUG) || !defined(QT_NO_DEBUG)
 #define LAMEXP_DEBUG 1
 #define LAMEXP_CHECK_DEBUG_BUILD \
        qWarning("---------------------------------------------------------"); \
index 190f314..e128aad 100644 (file)
@@ -37,6 +37,8 @@ static const char *g_settingsId_compressionBitrate = "Compression/Bitrate";
 #define MAKE_GETTER(OPT,DEF) int SettingsModel::OPT(void) { return m_settings->value(g_settingsId_##OPT, DEF).toInt(); }
 #define MAKE_SETTER(OPT) void SettingsModel::OPT(int value) { m_settings->setValue(g_settingsId_##OPT, value); }
 
+const int SettingsModel::mp3Bitrates[15] = {32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1};
+
 ////////////////////////////////////////////////////////////
 // Constructor
 ////////////////////////////////////////////////////////////
index bf48865..7ee7f48 100644 (file)
@@ -48,6 +48,9 @@ public:
                CBRMode = 2
        };
        
+       //Consts
+       static const int mp3Bitrates[15];
+
        //Getters
        MAKE_GETTER_DEC(licenseAccepted);
        MAKE_GETTER_DEC(interfaceStyle);
index 277a7bc..2ba78a3 100644 (file)
@@ -44,7 +44,7 @@ static const struct lamexp_tool_t g_lamexp_tools[] =
        {"09e5a07555a24b8c9d6af880b81eb8ed75be16fd", "faad.exe"},
        {"070bf98f78e572a97e4703ef5720c682567a6a56", "flac.exe"},
        {"cf379081035ae6bfb6f7bc22f13bfb7ac6302ac5", "gpgv.exe"},
-       {"e613a1b56a2187edb4cdf3628a5a3e60de2e8cbc", "lame.exe"},
+       {"143fc001a2f6c56fe1b9e6f8a2eb2b53b9e1e504", "lame.exe"},
        {"775b260b3f64101beaeb317b74746f9bccdab842", "MAC.exe"},
        {"e770eaa5f2449d0fd6b3f3c02a1f574fc4370b5e", "mediainfo_icl11.exe"},
        {"55c293a80475f7aeccf449ac9487a4626e5139cb", "mpcdec.exe"},