Fix compilation after previous changes to AudioFileModel in previous commit.

This commit is contained in:
LoRd_MuldeR 2013-10-12 22:55:41 +02:00
parent feccffdfd1
commit 0435637c75
50 changed files with 385 additions and 342 deletions

View File

@ -34,7 +34,7 @@
#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 2 #define VER_LAMEXP_PATCH 2
#define VER_LAMEXP_BUILD 1378 #define VER_LAMEXP_BUILD 1380
#define VER_LAMEXP_CONFG 1348 #define VER_LAMEXP_CONFG 1348
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

View File

@ -315,7 +315,7 @@ void CueImportDialog::loadOtherButtonClicked(void)
void CueImportDialog::analyzedFile(const AudioFileModel &file) void CueImportDialog::analyzedFile(const AudioFileModel &file)
{ {
qDebug("Received result: <%s> <%s/%s>", file.filePath().toLatin1().constData(), file.formatContainerType().toLatin1().constData(), file.formatAudioType().toLatin1().constData()); qDebug("Received result: <%s> <%s/%s>", file.filePath().toLatin1().constData(), file.techInfo().containerType().toLatin1().constData(), file.techInfo().audioType().toLatin1().constData());
m_fileInfo << file; m_fileInfo << file;
} }

View File

@ -2705,36 +2705,40 @@ void MainWindow::makeFolderButtonClicked(void)
QDir basePath(m_fileSystemModel->fileInfo(ui->outputFolderView->currentIndex()).absoluteFilePath()); QDir basePath(m_fileSystemModel->fileInfo(ui->outputFolderView->currentIndex()).absoluteFilePath());
QString suggestedName = tr("New Folder"); QString suggestedName = tr("New Folder");
if(!m_metaData->fileArtist().isEmpty() && !m_metaData->fileAlbum().isEmpty()) const AudioFileModel_MetaInfo &metaInfo = m_metaData->metaInfo();
if(!metaInfo.artist().isEmpty() && !metaInfo.album().isEmpty())
{ {
suggestedName = QString("%1 - %2").arg(m_metaData->fileArtist(), m_metaData->fileAlbum()); suggestedName = QString("%1 - %2").arg(metaInfo.artist(), metaInfo.album());
} }
else if(!m_metaData->fileArtist().isEmpty()) else if(!metaInfo.artist().isEmpty())
{ {
suggestedName = m_metaData->fileArtist(); suggestedName = metaInfo.artist();
} }
else if(!m_metaData->fileAlbum().isEmpty()) else if(!metaInfo.album().isEmpty())
{ {
suggestedName = m_metaData->fileAlbum(); suggestedName = metaInfo.album();
} }
else else
{ {
for(int i = 0; i < m_fileListModel->rowCount(); i++) for(int i = 0; i < m_fileListModel->rowCount(); i++)
{ {
AudioFileModel audioFile = m_fileListModel->getFile(m_fileListModel->index(i, 0)); const AudioFileModel &audioFile = m_fileListModel->getFile(m_fileListModel->index(i, 0));
if(!audioFile.fileAlbum().isEmpty() || !audioFile.fileArtist().isEmpty()) const AudioFileModel_MetaInfo &fileMetaInfo = m_metaData->metaInfo();
if(!fileMetaInfo.album().isEmpty() || !fileMetaInfo.artist().isEmpty())
{ {
if(!audioFile.fileArtist().isEmpty() && !audioFile.fileAlbum().isEmpty()) if(!fileMetaInfo.artist().isEmpty() && !fileMetaInfo.album().isEmpty())
{ {
suggestedName = QString("%1 - %2").arg(audioFile.fileArtist(), audioFile.fileAlbum()); suggestedName = QString("%1 - %2").arg(fileMetaInfo.artist(), fileMetaInfo.album());
} }
else if(!audioFile.fileArtist().isEmpty()) else if(!fileMetaInfo.artist().isEmpty())
{ {
suggestedName = audioFile.fileArtist(); suggestedName = fileMetaInfo.artist();
} }
else if(!audioFile.fileAlbum().isEmpty()) else if(!fileMetaInfo.album().isEmpty())
{ {
suggestedName = audioFile.fileAlbum(); suggestedName = fileMetaInfo.album();
} }
break; break;
} }
@ -3187,7 +3191,7 @@ void MainWindow::editMetaButtonClicked(void)
if(index.row() == 4) if(index.row() == 4)
{ {
m_settings->metaInfoPosition(m_metaData->filePosition()); m_settings->metaInfoPosition(m_metaData->metaInfo().position());
} }
} }
} }

View File

@ -109,10 +109,10 @@ int MetaInfoDialog::exec(AudioFileModel &audioFile, bool allowUp, bool allowDown
downButton->setEnabled(allowDown); downButton->setEnabled(allowDown);
buttonArtwork->setChecked(false); buttonArtwork->setChecked(false);
if(!audioFile.fileCover().isEmpty()) if(!audioFile.metaInfo().cover().isEmpty())
{ {
QImage artwork; QImage artwork;
if(artwork.load(audioFile.fileCover())) if(artwork.load(audioFile.metaInfo().cover()))
{ {
if((artwork.width() > 256) || (artwork.height() > 256)) if((artwork.width() > 256) || (artwork.height() > 256))
{ {

View File

@ -585,7 +585,7 @@ void ProcessingDialog::startNextJob(void)
} }
if((m_settings->samplingRate() > 0) && !nativeResampling) if((m_settings->samplingRate() > 0) && !nativeResampling)
{ {
if(SettingsModel::samplingRates[m_settings->samplingRate()] != currentFile.formatAudioSamplerate() || currentFile.formatAudioSamplerate() == 0) if(SettingsModel::samplingRates[m_settings->samplingRate()] != currentFile.techInfo().audioSamplerate() || currentFile.techInfo().audioSamplerate() == 0)
{ {
thread->addFilter(new ResampleFilter(SettingsModel::samplingRates[m_settings->samplingRate()])); thread->addFilter(new ResampleFilter(SettingsModel::samplingRates[m_settings->samplingRate()]));
} }
@ -964,10 +964,10 @@ void ProcessingDialog::writePlayList(void)
int counter = 1; int counter = 1;
//Generate playlist name //Generate playlist name
QString playListName = (m_metaInfo->fileAlbum().isEmpty() ? "Playlist" : m_metaInfo->fileAlbum()); QString playListName = (m_metaInfo->metaInfo().album().isEmpty() ? "Playlist" : m_metaInfo->metaInfo().album());
if(!m_metaInfo->fileArtist().isEmpty()) if(!m_metaInfo->metaInfo().artist().isEmpty())
{ {
playListName = QString("%1 - %2").arg(m_metaInfo->fileArtist(), playListName); playListName = QString("%1 - %2").arg(m_metaInfo->metaInfo().artist(), playListName);
} }
//Clean playlist name //Clean playlist name
@ -1031,22 +1031,22 @@ void ProcessingDialog::writePlayList(void)
} }
} }
AudioFileModel ProcessingDialog::updateMetaInfo(const AudioFileModel &audioFile) AudioFileModel ProcessingDialog::updateMetaInfo(AudioFileModel &audioFile)
{ {
if(!m_settings->writeMetaTags()) if(!m_settings->writeMetaTags())
{ {
return AudioFileModel(audioFile, false); audioFile.metaInfo().reset();
return audioFile;
} }
AudioFileModel result = audioFile; audioFile.metaInfo().update(m_metaInfo->metaInfo());
result.updateMetaInfo(*m_metaInfo);
if(m_metaInfo->filePosition() == UINT_MAX) if(audioFile.metaInfo().position() == UINT_MAX)
{ {
result.setFilePosition(m_currentFile); audioFile.metaInfo().setPosition(m_currentFile);
} }
return result; return audioFile;
} }
void ProcessingDialog::systemTrayActivated(QSystemTrayIcon::ActivationReason reason) void ProcessingDialog::systemTrayActivated(QSystemTrayIcon::ActivationReason reason)

View File

@ -98,7 +98,7 @@ protected:
private: private:
Ui::ProcessingDialog *ui; //for Qt UIC Ui::ProcessingDialog *ui; //for Qt UIC
AudioFileModel updateMetaInfo(const AudioFileModel &audioFile); AudioFileModel updateMetaInfo(AudioFileModel &audioFile);
void writePlayList(void); void writePlayList(void);
bool shutdownComputer(void); bool shutdownComputer(void);
QString time2text(const double timeVal) const; QString time2text(const double timeVal) const;

View File

@ -133,10 +133,8 @@ AACEncoder::~AACEncoder(void)
{ {
} }
bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
const unsigned int fileDuration = metaInfo.fileDuration();
QProcess process; QProcess process;
QStringList args; QStringList args;
const QString baseName = QFileInfo(outputFile).fileName(); const QString baseName = QFileInfo(outputFile).fileName();
@ -220,9 +218,9 @@ bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
{ {
bool ok = false; bool ok = false;
int progress = regExp_pass1.cap(1).toInt(&ok); int progress = regExp_pass1.cap(1).toInt(&ok);
if(ok && (fileDuration > 0)) if(ok && (duration > 0))
{ {
int newProgress = qRound((static_cast<double>(progress) / static_cast<double>(fileDuration)) * 50.0); int newProgress = qRound((static_cast<double>(progress) / static_cast<double>(duration)) * 50.0);
if(newProgress > prevProgress) if(newProgress > prevProgress)
{ {
emit statusUpdated(newProgress); emit statusUpdated(newProgress);
@ -234,9 +232,9 @@ bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
{ {
bool ok = false; bool ok = false;
int progress = regExp_pass2.cap(1).toInt(&ok); int progress = regExp_pass2.cap(1).toInt(&ok);
if(ok && (fileDuration > 0)) if(ok && (duration > 0))
{ {
int newProgress = qRound((static_cast<double>(progress) / static_cast<double>(fileDuration)) * 50.0) + 50; int newProgress = qRound((static_cast<double>(progress) / static_cast<double>(duration)) * 50.0) + 50;
if(newProgress > prevProgress) if(newProgress > prevProgress)
{ {
emit statusUpdated(newProgress); emit statusUpdated(newProgress);
@ -248,9 +246,9 @@ bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
{ {
bool ok = false; bool ok = false;
int progress = regExp.cap(1).toInt(&ok); int progress = regExp.cap(1).toInt(&ok);
if(ok && (fileDuration > 0)) if(ok && (duration > 0))
{ {
int newProgress = qRound((static_cast<double>(progress) / static_cast<double>(fileDuration)) * 100.0); int newProgress = qRound((static_cast<double>(progress) / static_cast<double>(duration)) * 100.0);
if(newProgress > prevProgress) if(newProgress > prevProgress)
{ {
emit statusUpdated(newProgress); emit statusUpdated(newProgress);
@ -285,14 +283,14 @@ bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
args.clear(); args.clear();
args << QDir::toNativeSeparators(outputFile); args << QDir::toNativeSeparators(outputFile);
if(!metaInfo.fileName().isEmpty()) args << QString("-meta:title=%1").arg(cleanTag(metaInfo.fileName())); if(!metaInfo.title().isEmpty()) args << QString("-meta:title=%1").arg(cleanTag(metaInfo.title()));
if(!metaInfo.fileArtist().isEmpty()) args << QString("-meta:artist=%1").arg(cleanTag(metaInfo.fileArtist())); if(!metaInfo.artist().isEmpty()) args << QString("-meta:artist=%1").arg(cleanTag(metaInfo.artist()));
if(!metaInfo.fileAlbum().isEmpty()) args << QString("-meta:album=%1").arg(cleanTag(metaInfo.fileAlbum())); if(!metaInfo.album().isEmpty()) args << QString("-meta:album=%1").arg(cleanTag(metaInfo.album()));
if(!metaInfo.fileGenre().isEmpty()) args << QString("-meta:genre=%1").arg(cleanTag(metaInfo.fileGenre())); if(!metaInfo.genre().isEmpty()) args << QString("-meta:genre=%1").arg(cleanTag(metaInfo.genre()));
if(!metaInfo.fileComment().isEmpty()) args << QString("-meta:comment=%1").arg(cleanTag(metaInfo.fileComment())); if(!metaInfo.comment().isEmpty()) args << QString("-meta:comment=%1").arg(cleanTag(metaInfo.comment()));
if(metaInfo.fileYear()) args << QString("-meta:year=%1").arg(QString::number(metaInfo.fileYear())); if(metaInfo.year()) args << QString("-meta:year=%1").arg(QString::number(metaInfo.year()));
if(metaInfo.filePosition()) args << QString("-meta:track=%1").arg(QString::number(metaInfo.filePosition())); if(metaInfo.position()) args << QString("-meta:track=%1").arg(QString::number(metaInfo.position()));
if(!metaInfo.fileCover().isEmpty()) args << QString("-add-cover:%1:%2").arg("front", metaInfo.fileCover()); if(!metaInfo.cover().isEmpty()) args << QString("-add-cover:%1:%2").arg("front", metaInfo.cover());
if(!startProcess(process, m_binary_tag, args)) if(!startProcess(process, m_binary_tag, args))
{ {

View File

@ -33,7 +33,7 @@ public:
AACEncoder(void); AACEncoder(void);
~AACEncoder(void); ~AACEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);
virtual const bool needsTimingInfo(void); virtual const bool needsTimingInfo(void);

View File

@ -134,7 +134,7 @@ FHGAACEncoder::~FHGAACEncoder(void)
{ {
} }
bool FHGAACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool FHGAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;

View File

@ -33,7 +33,7 @@ public:
FHGAACEncoder(void); FHGAACEncoder(void);
~FHGAACEncoder(void); ~FHGAACEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);
virtual const unsigned int *supportedChannelCount(void); virtual const unsigned int *supportedChannelCount(void);

View File

@ -135,7 +135,7 @@ QAACEncoder::~QAACEncoder(void)
{ {
} }
bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;
@ -175,14 +175,14 @@ bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts); if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
if(!metaInfo.fileName().isEmpty()) args << "--title" << cleanTag(metaInfo.fileName()); if(!metaInfo.title().isEmpty()) args << "--title" << cleanTag(metaInfo.title());
if(!metaInfo.fileArtist().isEmpty()) args << "--artist" << cleanTag(metaInfo.fileArtist()); if(!metaInfo.artist().isEmpty()) args << "--artist" << cleanTag(metaInfo.artist());
if(!metaInfo.fileAlbum().isEmpty()) args << "--album" << cleanTag(metaInfo.fileAlbum()); if(!metaInfo.album().isEmpty()) args << "--album" << cleanTag(metaInfo.album());
if(!metaInfo.fileGenre().isEmpty()) args << "--genre" << cleanTag(metaInfo.fileGenre()); if(!metaInfo.genre().isEmpty()) args << "--genre" << cleanTag(metaInfo.genre());
if(!metaInfo.fileComment().isEmpty()) args << "--comment" << cleanTag( metaInfo.fileComment()); if(!metaInfo.comment().isEmpty()) args << "--comment" << cleanTag( metaInfo.comment());
if(metaInfo.fileYear()) args << "--date" << QString::number(metaInfo.fileYear()); if(metaInfo.year()) args << "--date" << QString::number(metaInfo.year());
if(metaInfo.filePosition()) args << "--track" << QString::number(metaInfo.filePosition()); if(metaInfo.position()) args << "--track" << QString::number(metaInfo.position());
if(!metaInfo.fileCover().isEmpty()) args << "--artwork" << metaInfo.fileCover(); if(!metaInfo.cover().isEmpty()) args << "--artwork" << metaInfo.cover();
args << "-d" << "."; args << "-d" << ".";
args << "-o" << QDir::toNativeSeparators(outputFile); args << "-o" << QDir::toNativeSeparators(outputFile);

View File

@ -33,7 +33,7 @@ public:
QAACEncoder(void); QAACEncoder(void);
~QAACEncoder(void); ~QAACEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);

View File

@ -132,7 +132,7 @@ AC3Encoder::~AC3Encoder(void)
{ {
} }
bool AC3Encoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool AC3Encoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;

View File

@ -33,7 +33,7 @@ public:
AC3Encoder(void); AC3Encoder(void);
~AC3Encoder(void); ~AC3Encoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);
virtual const unsigned int *supportedChannelCount(void); virtual const unsigned int *supportedChannelCount(void);

View File

@ -58,7 +58,7 @@ public:
virtual ~AbstractEncoder(void); virtual ~AbstractEncoder(void);
//Internal encoder API //Internal encoder API
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) = 0; virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag) = 0;
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion) = 0; virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion) = 0;
virtual QString extension(void) = 0; virtual QString extension(void) = 0;
virtual const unsigned int *supportedSamplerates(void); virtual const unsigned int *supportedSamplerates(void);

View File

@ -129,7 +129,7 @@ DCAEncoder::~DCAEncoder(void)
{ {
} }
bool DCAEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool DCAEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;

View File

@ -33,7 +33,7 @@ public:
DCAEncoder(void); DCAEncoder(void);
~DCAEncoder(void); ~DCAEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);
virtual const unsigned int *supportedChannelCount(void); virtual const unsigned int *supportedChannelCount(void);

View File

@ -123,7 +123,7 @@ FLACEncoder::~FLACEncoder(void)
{ {
} }
bool FLACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool FLACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;
@ -131,14 +131,14 @@ bool FLACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn
args << QString("-%1").arg(QString::number(qBound(0, m_configBitrate, 8))); args << QString("-%1").arg(QString::number(qBound(0, m_configBitrate, 8)));
args << "--channel-map=none"; args << "--channel-map=none";
if(!metaInfo.fileName().isEmpty()) args << "-T" << QString("title=%1").arg(cleanTag(metaInfo.fileName())); if(!metaInfo.title().isEmpty()) args << "-T" << QString("title=%1").arg(cleanTag(metaInfo.title()));
if(!metaInfo.fileArtist().isEmpty()) args << "-T" << QString("artist=%1").arg(cleanTag(metaInfo.fileArtist())); if(!metaInfo.artist().isEmpty()) args << "-T" << QString("artist=%1").arg(cleanTag(metaInfo.artist()));
if(!metaInfo.fileAlbum().isEmpty()) args << "-T" << QString("album=%1").arg(cleanTag(metaInfo.fileAlbum())); if(!metaInfo.album().isEmpty()) args << "-T" << QString("album=%1").arg(cleanTag(metaInfo.album()));
if(!metaInfo.fileGenre().isEmpty()) args << "-T" << QString("genre=%1").arg(cleanTag(metaInfo.fileGenre())); if(!metaInfo.genre().isEmpty()) args << "-T" << QString("genre=%1").arg(cleanTag(metaInfo.genre()));
if(!metaInfo.fileComment().isEmpty()) args << "-T" << QString("comment=%1").arg(cleanTag(metaInfo.fileComment())); if(!metaInfo.comment().isEmpty()) args << "-T" << QString("comment=%1").arg(cleanTag(metaInfo.comment()));
if(metaInfo.fileYear()) args << "-T" << QString("date=%1").arg(QString::number(metaInfo.fileYear())); if(metaInfo.year()) args << "-T" << QString("date=%1").arg(QString::number(metaInfo.year()));
if(metaInfo.filePosition()) args << "-T" << QString("track=%1").arg(QString::number(metaInfo.filePosition())); if(metaInfo.position()) args << "-T" << QString("track=%1").arg(QString::number(metaInfo.position()));
if(!metaInfo.fileCover().isEmpty()) args << QString("--picture=%1").arg(metaInfo.fileCover()); if(!metaInfo.cover().isEmpty()) args << QString("--picture=%1").arg(metaInfo.cover());
//args << "--tv" << QString().sprintf("Encoder=LameXP v%d.%02d.%04d [%s]", lamexp_version_major(), lamexp_version_minor(), lamexp_version_build(), lamexp_version_release()); //args << "--tv" << QString().sprintf("Encoder=LameXP v%d.%02d.%04d [%s]", lamexp_version_major(), lamexp_version_minor(), lamexp_version_build(), lamexp_version_release());

View File

@ -33,7 +33,7 @@ public:
FLACEncoder(void); FLACEncoder(void);
~FLACEncoder(void); ~FLACEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);
virtual const unsigned int *supportedChannelCount(void); virtual const unsigned int *supportedChannelCount(void);

View File

@ -134,7 +134,7 @@ MP3Encoder::~MP3Encoder(void)
{ {
} }
bool MP3Encoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool MP3Encoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;
@ -194,22 +194,22 @@ bool MP3Encoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
bool bUseUCS2 = false; bool bUseUCS2 = false;
if(!metaInfo.fileName().isEmpty() && isUnicode(metaInfo.fileName())) bUseUCS2 = true; if(!metaInfo.title().isEmpty() && isUnicode(metaInfo.title())) bUseUCS2 = true;
if(!metaInfo.fileArtist().isEmpty() && isUnicode(metaInfo.fileArtist())) bUseUCS2 = true; if(!metaInfo.artist().isEmpty() && isUnicode(metaInfo.artist())) bUseUCS2 = true;
if(!metaInfo.fileAlbum().isEmpty() && isUnicode(metaInfo.fileAlbum())) bUseUCS2 = true; if(!metaInfo.album().isEmpty() && isUnicode(metaInfo.album())) bUseUCS2 = true;
if(!metaInfo.fileGenre().isEmpty() && isUnicode(metaInfo.fileGenre())) bUseUCS2 = true; if(!metaInfo.genre().isEmpty() && isUnicode(metaInfo.genre())) bUseUCS2 = true;
if(!metaInfo.fileComment().isEmpty() && isUnicode(metaInfo.fileComment())) bUseUCS2 = true; if(!metaInfo.comment().isEmpty() && isUnicode(metaInfo.comment())) bUseUCS2 = true;
if(bUseUCS2) args << "--id3v2-ucs2"; //Must specify this BEFORE "--tt" and friends! if(bUseUCS2) args << "--id3v2-ucs2"; //Must specify this BEFORE "--tt" and friends!
if(!metaInfo.fileName().isEmpty()) args << "--tt" << cleanTag(metaInfo.fileName()); if(!metaInfo.title().isEmpty()) args << "--tt" << cleanTag(metaInfo.title());
if(!metaInfo.fileArtist().isEmpty()) args << "--ta" << cleanTag(metaInfo.fileArtist()); if(!metaInfo.artist().isEmpty()) args << "--ta" << cleanTag(metaInfo.artist());
if(!metaInfo.fileAlbum().isEmpty()) args << "--tl" <<cleanTag( metaInfo.fileAlbum()); if(!metaInfo.album().isEmpty()) args << "--tl" <<cleanTag( metaInfo.album());
if(!metaInfo.fileGenre().isEmpty()) args << "--tg" << cleanTag(metaInfo.fileGenre()); if(!metaInfo.genre().isEmpty()) args << "--tg" << cleanTag(metaInfo.genre());
if(!metaInfo.fileComment().isEmpty()) args << "--tc" << cleanTag(metaInfo.fileComment()); if(!metaInfo.comment().isEmpty()) args << "--tc" << cleanTag(metaInfo.comment());
if(metaInfo.fileYear()) args << "--ty" << QString::number(metaInfo.fileYear()); if(metaInfo.year()) args << "--ty" << QString::number(metaInfo.year());
if(metaInfo.filePosition()) args << "--tn" << QString::number(metaInfo.filePosition()); if(metaInfo.position()) args << "--tn" << QString::number(metaInfo.position());
if(!metaInfo.fileCover().isEmpty()) args << "--ti" << QDir::toNativeSeparators(metaInfo.fileCover()); if(!metaInfo.cover().isEmpty()) args << "--ti" << QDir::toNativeSeparators(metaInfo.cover());
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts); if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);

View File

@ -33,7 +33,7 @@ public:
MP3Encoder(void); MP3Encoder(void);
~MP3Encoder(void); ~MP3Encoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);
virtual const unsigned int *supportedChannelCount(void); virtual const unsigned int *supportedChannelCount(void);

View File

@ -122,10 +122,8 @@ OpusEncoder::~OpusEncoder(void)
{ {
} }
bool OpusEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool OpusEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
const unsigned int fileDuration = metaInfo.fileDuration();
QProcess process; QProcess process;
QStringList args; QStringList args;
@ -171,13 +169,13 @@ bool OpusEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn
args << QString("--bitrate") << QString::number(qBound(8, (m_configBitrate + 1) * 8, 256)); args << QString("--bitrate") << QString::number(qBound(8, (m_configBitrate + 1) * 8, 256));
if(!metaInfo.fileName().isEmpty()) args << "--title" << cleanTag(metaInfo.fileName()); if(!metaInfo.title().isEmpty()) args << "--title" << cleanTag(metaInfo.title());
if(!metaInfo.fileArtist().isEmpty()) args << "--artist" << cleanTag(metaInfo.fileArtist()); if(!metaInfo.artist().isEmpty()) args << "--artist" << cleanTag(metaInfo.artist());
if(!metaInfo.fileAlbum().isEmpty()) args << "--album" << cleanTag(metaInfo.fileAlbum()); if(!metaInfo.album().isEmpty()) args << "--album" << cleanTag(metaInfo.album());
if(!metaInfo.fileGenre().isEmpty()) args << "--genre" << cleanTag(metaInfo.fileGenre()); if(!metaInfo.genre().isEmpty()) args << "--genre" << cleanTag(metaInfo.genre());
if(metaInfo.fileYear()) args << "--date" << QString::number(metaInfo.fileYear()); if(metaInfo.year()) args << "--date" << QString::number(metaInfo.year());
if(metaInfo.filePosition()) args << "--comment" << QString("tracknumber=%1").arg(QString::number(metaInfo.filePosition())); if(metaInfo.position()) args << "--comment" << QString("tracknumber=%1").arg(QString::number(metaInfo.position()));
if(!metaInfo.fileComment().isEmpty()) args << "--comment" << QString("comment=%1").arg(cleanTag(metaInfo.fileComment())); if(!metaInfo.comment().isEmpty()) args << "--comment" << QString("comment=%1").arg(cleanTag(metaInfo.comment()));
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts); if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);

View File

@ -33,7 +33,7 @@ public:
OpusEncoder(void); OpusEncoder(void);
~OpusEncoder(void); ~OpusEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);
virtual const unsigned int *supportedChannelCount(void); virtual const unsigned int *supportedChannelCount(void);

View File

@ -129,7 +129,7 @@ VorbisEncoder::~VorbisEncoder(void)
{ {
} }
bool VorbisEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool VorbisEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;
@ -159,13 +159,13 @@ bool VorbisEncoder::encode(const QString &sourceFile, const AudioFileModel &meta
args << "--resample" << QString::number(m_configSamplingRate) << "--converter" << QString::number(0); args << "--resample" << QString::number(m_configSamplingRate) << "--converter" << QString::number(0);
} }
if(!metaInfo.fileName().isEmpty()) args << "-t" << cleanTag(metaInfo.fileName()); if(!metaInfo.title().isEmpty()) args << "-t" << cleanTag(metaInfo.title());
if(!metaInfo.fileArtist().isEmpty()) args << "-a" << cleanTag(metaInfo.fileArtist()); if(!metaInfo.artist().isEmpty()) args << "-a" << cleanTag(metaInfo.artist());
if(!metaInfo.fileAlbum().isEmpty()) args << "-l" << cleanTag(metaInfo.fileAlbum()); if(!metaInfo.album().isEmpty()) args << "-l" << cleanTag(metaInfo.album());
if(!metaInfo.fileGenre().isEmpty()) args << "-G" << cleanTag(metaInfo.fileGenre()); if(!metaInfo.genre().isEmpty()) args << "-G" << cleanTag(metaInfo.genre());
if(!metaInfo.fileComment().isEmpty()) args << "-c" << QString("comment=%1").arg(cleanTag(metaInfo.fileComment())); if(!metaInfo.comment().isEmpty()) args << "-c" << QString("comment=%1").arg(cleanTag(metaInfo.comment()));
if(metaInfo.fileYear()) args << "-d" << QString::number(metaInfo.fileYear()); if(metaInfo.year()) args << "-d" << QString::number(metaInfo.year());
if(metaInfo.filePosition()) args << "-N" << QString::number(metaInfo.filePosition()); if(metaInfo.position()) args << "-N" << QString::number(metaInfo.position());
//args << "--tv" << QString().sprintf("Encoder=LameXP v%d.%02d.%04d [%s]", lamexp_version_major(), lamexp_version_minor(), lamexp_version_build(), lamexp_version_release()); //args << "--tv" << QString().sprintf("Encoder=LameXP v%d.%02d.%04d [%s]", lamexp_version_major(), lamexp_version_minor(), lamexp_version_build(), lamexp_version_release());

View File

@ -33,7 +33,7 @@ public:
VorbisEncoder(void); VorbisEncoder(void);
~VorbisEncoder(void); ~VorbisEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);
virtual void setBitrateLimits(int minimumBitrate, int maximumBitrate); virtual void setBitrateLimits(int minimumBitrate, int maximumBitrate);

View File

@ -120,7 +120,7 @@ WaveEncoder::~WaveEncoder(void)
{ {
} }
bool WaveEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag) bool WaveEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const QString &outputFile, volatile bool *abortFlag)
{ {
SHFILEOPSTRUCTW fileOperation; SHFILEOPSTRUCTW fileOperation;
memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW)); memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW));

View File

@ -33,7 +33,7 @@ public:
WaveEncoder(void); WaveEncoder(void);
~WaveEncoder(void); ~WaveEncoder(void);
virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); 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 bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual QString extension(void); virtual QString extension(void);

View File

@ -23,7 +23,7 @@
#include "Tool_Abstract.h" #include "Tool_Abstract.h"
class AudioFileModel; class AudioFileModel_TechInfo;
class AbstractFilter : public AbstractTool class AbstractFilter : public AbstractTool
{ {
@ -34,6 +34,6 @@ public:
~AbstractFilter(void); ~AbstractFilter(void);
//Internal decoder API //Internal decoder API
virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag) = 0; virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag) = 0;
}; };

View File

@ -43,9 +43,9 @@ DownmixFilter::~DownmixFilter(void)
{ {
} }
bool DownmixFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag) bool DownmixFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag)
{ {
unsigned int channels = formatInfo->formatAudioChannels(); //detectChannels(sourceFile, abortFlag); unsigned int channels = formatInfo->audioChannels(); //detectChannels(sourceFile, abortFlag);
emit messageLogged(QString().sprintf("--> Number of channels is: %d\n", channels)); emit messageLogged(QString().sprintf("--> Number of channels is: %d\n", channels));
if(channels == 2) if(channels == 2)
@ -156,6 +156,6 @@ bool DownmixFilter::apply(const QString &sourceFile, const QString &outputFile,
return false; return false;
} }
formatInfo->setFormatAudioChannels(2); formatInfo->setAudioChannels(2);
return true; return true;
} }

View File

@ -31,7 +31,7 @@ public:
DownmixFilter(void); DownmixFilter(void);
~DownmixFilter(void); ~DownmixFilter(void);
virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag); virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag);
private: private:
const QString m_binary; const QString m_binary;

View File

@ -44,7 +44,7 @@ NormalizeFilter::~NormalizeFilter(void)
{ {
} }
bool NormalizeFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag) bool NormalizeFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;

View File

@ -29,7 +29,7 @@ public:
NormalizeFilter(int peakVolume = -50, int equalizationMode = 0); NormalizeFilter(int peakVolume = -50, int equalizationMode = 0);
~NormalizeFilter(void); ~NormalizeFilter(void);
virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag); virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag);
private: private:
const QString m_binary; const QString m_binary;

View File

@ -55,12 +55,12 @@ ResampleFilter::~ResampleFilter(void)
{ {
} }
bool ResampleFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag) bool ResampleFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;
if((m_samplingRate == formatInfo->formatAudioSamplerate()) && (m_bitDepth == formatInfo->formatAudioBitdepth())) if((m_samplingRate == formatInfo->audioSamplerate()) && (m_bitDepth == formatInfo->audioBitdepth()))
{ {
messageLogged("Skipping resample filter!"); messageLogged("Skipping resample filter!");
qDebug("Resampling filter target samplerate/bitdepth is equals to the format of the input file, skipping!"); qDebug("Resampling filter target samplerate/bitdepth is equals to the format of the input file, skipping!");
@ -153,8 +153,8 @@ bool ResampleFilter::apply(const QString &sourceFile, const QString &outputFile,
return false; return false;
} }
if(m_samplingRate) formatInfo->setFormatAudioSamplerate(m_samplingRate); if(m_samplingRate) formatInfo->setAudioSamplerate(m_samplingRate);
if(m_bitDepth) formatInfo->setFormatAudioBitdepth(m_bitDepth); if(m_bitDepth) formatInfo->setAudioBitdepth(m_bitDepth);
return true; return true;
} }

View File

@ -29,7 +29,7 @@ public:
ResampleFilter(int samplingRate = 0, int bitDepth = 0); ResampleFilter(int samplingRate = 0, int bitDepth = 0);
~ResampleFilter(void); ~ResampleFilter(void);
virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag); virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag);
private: private:
const QString m_binary; const QString m_binary;

View File

@ -45,7 +45,7 @@ ToneAdjustFilter::~ToneAdjustFilter(void)
{ {
} }
bool ToneAdjustFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag) bool ToneAdjustFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;

View File

@ -29,7 +29,7 @@ public:
ToneAdjustFilter(int bass = 0, int treble = 0); ToneAdjustFilter(int bass = 0, int treble = 0);
~ToneAdjustFilter(void); ~ToneAdjustFilter(void);
virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel *formatInfo, volatile bool *abortFlag); virtual bool apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *formatInfo, volatile bool *abortFlag);
private: private:
const QString m_binary; const QString m_binary;

View File

@ -40,6 +40,8 @@ public:
void setFilePath(const QString &newPath, bool isOwner = true); void setFilePath(const QString &newPath, bool isOwner = true);
void clear(void); void clear(void);
inline bool isEmpty(void) const { return (m_data != NULL); }
private: private:
const QString m_nullString; const QString m_nullString;
ArtworkModel_SharedData *m_data; ArtworkModel_SharedData *m_data;

View File

@ -51,7 +51,6 @@ AudioFileModel_MetaInfo::AudioFileModel_MetaInfo(const AudioFileModel_MetaInfo &
m_cover = model.m_cover; m_cover = model.m_cover;
m_year = model.m_year; m_year = model.m_year;
m_position = model.m_position; m_position = model.m_position;
m_duration = model.m_duration;
} }
AudioFileModel_MetaInfo &AudioFileModel_MetaInfo::operator=(const AudioFileModel_MetaInfo &model) AudioFileModel_MetaInfo &AudioFileModel_MetaInfo::operator=(const AudioFileModel_MetaInfo &model)
@ -64,11 +63,22 @@ AudioFileModel_MetaInfo &AudioFileModel_MetaInfo::operator=(const AudioFileModel
m_cover = model.m_cover; m_cover = model.m_cover;
m_year = model.m_year; m_year = model.m_year;
m_position = model.m_position; m_position = model.m_position;
m_duration = model.m_duration;
return (*this); return (*this);
} }
void AudioFileModel_MetaInfo::update(const AudioFileModel_MetaInfo &model)
{
if(!model.m_titel.isEmpty()) m_titel = model.m_titel;
if(!model.m_artist.isEmpty()) m_artist = model.m_artist;
if(!model.m_album.isEmpty()) m_album = model.m_album;
if(!model.m_genre.isEmpty()) m_genre = model.m_genre;
if(!model.m_comment.isEmpty()) m_comment = model.m_comment;
if(!model.m_cover.isEmpty()) m_cover = model.m_cover;
if(model.m_year > 0) m_year = model.m_year;
if(model.m_position > 0) m_position = model.m_position;
}
AudioFileModel_MetaInfo::~AudioFileModel_MetaInfo(void) AudioFileModel_MetaInfo::~AudioFileModel_MetaInfo(void)
{ {
/*nothing to do*/ /*nothing to do*/
@ -84,7 +94,6 @@ void AudioFileModel_MetaInfo::reset(void)
m_cover.clear(); m_cover.clear();
m_year = 0; m_year = 0;
m_position = 0; m_position = 0;
m_duration = 0;
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -109,6 +118,7 @@ AudioFileModel_TechInfo::AudioFileModel_TechInfo(const AudioFileModel_TechInfo &
m_audioBitdepth = model.m_audioBitdepth; m_audioBitdepth = model.m_audioBitdepth;
m_audioBitrate = model.m_audioBitrate; m_audioBitrate = model.m_audioBitrate;
m_audioBitrateMode = model.m_audioBitrateMode; m_audioBitrateMode = model.m_audioBitrateMode;
m_duration = model.m_duration;
} }
AudioFileModel_TechInfo &AudioFileModel_TechInfo::operator=(const AudioFileModel_TechInfo &model) AudioFileModel_TechInfo &AudioFileModel_TechInfo::operator=(const AudioFileModel_TechInfo &model)
@ -124,6 +134,8 @@ AudioFileModel_TechInfo &AudioFileModel_TechInfo::operator=(const AudioFileModel
m_audioBitdepth = model.m_audioBitdepth; m_audioBitdepth = model.m_audioBitdepth;
m_audioBitrate = model.m_audioBitrate; m_audioBitrate = model.m_audioBitrate;
m_audioBitrateMode = model.m_audioBitrateMode; m_audioBitrateMode = model.m_audioBitrateMode;
m_duration = model.m_duration;
return (*this); return (*this);
} }
@ -146,6 +158,7 @@ void AudioFileModel_TechInfo::reset(void)
m_audioBitdepth = 0; m_audioBitdepth = 0;
m_audioBitrate = 0; m_audioBitrate = 0;
m_audioBitrateMode = 0; m_audioBitrateMode = 0;
m_duration = 0;
} }
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -195,9 +208,9 @@ void AudioFileModel::reset(void)
const QString AudioFileModel::durationInfo(void) const const QString AudioFileModel::durationInfo(void) const
{ {
if(m_metaInfo.duration()) if(m_techInfo.duration())
{ {
QTime time = QTime().addSecs(m_metaInfo.duration()); QTime time = QTime().addSecs(m_techInfo.duration());
return time.toString("hh:mm:ss"); return time.toString("hh:mm:ss");
} }
else else

View File

@ -50,7 +50,6 @@ public:
inline const QString &cover(void) const { return m_cover.filePath(); } inline const QString &cover(void) const { return m_cover.filePath(); }
inline unsigned int year(void) const { return m_year; } inline unsigned int year(void) const { return m_year; }
inline unsigned int position(void) const { return m_position; } inline unsigned int position(void) const { return m_position; }
inline unsigned int duration(void) const { return m_duration; }
//Setter //Setter
inline void setTitle(const QString &titel) { m_titel = titel.trimmed(); } inline void setTitle(const QString &titel) { m_titel = titel.trimmed(); }
@ -58,14 +57,16 @@ public:
inline void setAlbum(const QString &album) { m_album = album.trimmed(); } inline void setAlbum(const QString &album) { m_album = album.trimmed(); }
inline void setGenre(const QString &genre) { m_genre = genre.trimmed(); } inline void setGenre(const QString &genre) { m_genre = genre.trimmed(); }
inline void setComment(const QString &comment) { m_comment = comment.trimmed(); } inline void setComment(const QString &comment) { m_comment = comment.trimmed(); }
inline const ArtworkModel &cover(const QString &path, const bool isOwner) { m_cover.setFilePath(path, isOwner); } inline const ArtworkModel &setCover(const QString &path, const bool isOwner) { m_cover.setFilePath(path, isOwner); }
inline void setYear(const unsigned int year) { m_year = year; } inline void setYear(const unsigned int year) { m_year = year; }
inline void setPosition(const unsigned int position) { m_position = position; } inline void setPosition(const unsigned int position) { m_position = position; }
inline void setDuration(const unsigned int duration) { m_duration = duration; }
//Reset //Reset
void reset(void); void reset(void);
//Update
void update(const AudioFileModel_MetaInfo &model);
private: private:
QString m_titel; QString m_titel;
QString m_artist; QString m_artist;
@ -75,7 +76,6 @@ private:
ArtworkModel m_cover; ArtworkModel m_cover;
unsigned int m_year; unsigned int m_year;
unsigned int m_position; unsigned int m_position;
unsigned int m_duration;
}; };
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -105,19 +105,21 @@ public:
inline unsigned int audioBitdepth(void) const { return m_audioBitdepth; } inline unsigned int audioBitdepth(void) const { return m_audioBitdepth; }
inline unsigned int audioBitrate(void) const { return m_audioBitrate; } inline unsigned int audioBitrate(void) const { return m_audioBitrate; }
inline unsigned int audioBitrateMode(void) const { return m_audioBitrateMode; } inline unsigned int audioBitrateMode(void) const { return m_audioBitrateMode; }
inline unsigned int duration(void) const { return m_duration; }
//Setter //Setter
inline const QString &setContainerType(const QString &containerType) { m_containerType = containerType; } inline const QString &setContainerType(const QString &containerType) { m_containerType = containerType.trimmed(); }
inline const QString &setContainerProfile(const QString &containerProfile) { m_containerProfile = containerProfile; } inline const QString &setContainerProfile(const QString &containerProfile) { m_containerProfile = containerProfile.trimmed(); }
inline const QString &setAudioType(const QString &audioType) { m_audioType = audioType; } inline const QString &setAudioType(const QString &audioType) { m_audioType = audioType.trimmed(); }
inline const QString &setAudioProfile(const QString &audioProfile) { m_audioProfile = audioProfile; } inline const QString &setAudioProfile(const QString &audioProfile) { m_audioProfile = audioProfile.trimmed(); }
inline const QString &setAudioVersion(const QString &audioVersion) { m_audioVersion = audioVersion; } inline const QString &setAudioVersion(const QString &audioVersion) { m_audioVersion = audioVersion.trimmed(); }
inline const QString &setAudioEncodeLib(const QString &audioEncodeLib) { m_audioEncodeLib = audioEncodeLib; } inline const QString &setAudioEncodeLib(const QString &audioEncodeLib) { m_audioEncodeLib = audioEncodeLib.trimmed(); }
inline unsigned int setAudioSamplerate(const unsigned int audioSamplerate) { m_audioSamplerate = audioSamplerate; } inline unsigned int setAudioSamplerate(const unsigned int audioSamplerate) { m_audioSamplerate = audioSamplerate; }
inline unsigned int setAudioChannels(const unsigned int audioChannels) { m_audioChannels = audioChannels; } inline unsigned int setAudioChannels(const unsigned int audioChannels) { m_audioChannels = audioChannels; }
inline unsigned int setAudioBitdepth(const unsigned int audioBitdepth) { m_audioBitdepth = audioBitdepth; } inline unsigned int setAudioBitdepth(const unsigned int audioBitdepth) { m_audioBitdepth = audioBitdepth; }
inline unsigned int setAudioBitrate(const unsigned int audioBitrate) { m_audioBitrate = audioBitrate; } inline unsigned int setAudioBitrate(const unsigned int audioBitrate) { m_audioBitrate = audioBitrate; }
inline unsigned int setAudioBitrateMode(const unsigned int audioBitrateMode) { m_audioBitrateMode = audioBitrateMode; } inline unsigned int setAudioBitrateMode(const unsigned int audioBitrateMode) { m_audioBitrateMode = audioBitrateMode; }
inline void setDuration(const unsigned int duration) { m_duration = duration; }
//Reset //Reset
void reset(void); void reset(void);
@ -134,6 +136,7 @@ private:
unsigned int m_audioBitdepth; unsigned int m_audioBitdepth;
unsigned int m_audioBitrate; unsigned int m_audioBitrate;
unsigned int m_audioBitrateMode; unsigned int m_audioBitrateMode;
unsigned int m_duration;
}; };
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -157,7 +160,7 @@ public:
static const unsigned int BITDEPTH_IEEE_FLOAT32; static const unsigned int BITDEPTH_IEEE_FLOAT32;
//Constructors & Destructor //Constructors & Destructor
AudioFileModel(const QString &path); AudioFileModel(const QString &path = QString());
AudioFileModel(const AudioFileModel &model); AudioFileModel(const AudioFileModel &model);
AudioFileModel &operator=(const AudioFileModel &model); AudioFileModel &operator=(const AudioFileModel &model);
~AudioFileModel(void); ~AudioFileModel(void);

View File

@ -70,7 +70,7 @@ QVariant FileListModel::data(const QModelIndex &index, int role) const
switch(index.column()) switch(index.column())
{ {
case 0: case 0:
return m_fileStore.value(m_fileList.at(index.row())).fileName(); return m_fileStore.value(m_fileList.at(index.row())).metaInfo().title();
break; break;
case 1: case 1:
return QDir::toNativeSeparators(m_fileStore.value(m_fileList.at(index.row())).filePath()); return QDir::toNativeSeparators(m_fileStore.value(m_fileList.at(index.row())).filePath());
@ -143,8 +143,10 @@ void FileListModel::addFile(const QString &filePath)
if(!m_fileStore.contains(key)) if(!m_fileStore.contains(key))
{ {
AudioFileModel audioFile(fileInfo.canonicalFilePath());
audioFile.metaInfo().setTitle(fileInfo.baseName());
if(flag) beginInsertRows(QModelIndex(), m_fileList.count(), m_fileList.count()); if(flag) beginInsertRows(QModelIndex(), m_fileList.count(), m_fileList.count());
m_fileStore.insert(key, AudioFileModel(fileInfo.canonicalFilePath(), fileInfo.baseName())); m_fileStore.insert(key, audioFile);
m_fileList.append(key); m_fileList.append(key);
if(flag) endInsertRows(); if(flag) endInsertRows();
emit rowAppended(); emit rowAppended();
@ -205,15 +207,15 @@ bool FileListModel::moveFile(const QModelIndex &index, int delta)
} }
} }
AudioFileModel FileListModel::getFile(const QModelIndex &index) const AudioFileModel &FileListModel::getFile(const QModelIndex &index)
{ {
if(index.row() >= 0 && index.row() < m_fileList.count()) if(index.row() >= 0 && index.row() < m_fileList.count())
{ {
return m_fileStore.value(m_fileList.at(index.row())); return m_fileStore[m_fileList.at(index.row())]; //return m_fileStore.value(m_fileList.at(index.row()));
} }
else else
{ {
return AudioFileModel(); return m_nullAudioFile;
} }
} }
@ -251,15 +253,16 @@ int FileListModel::exportToCsv(const QString &outFile)
for(int i = 0; i < nFiles; i++) for(int i = 0; i < nFiles; i++)
{ {
AudioFileModel current = m_fileStore.value(m_fileList.at(i)); const AudioFileModel &current = m_fileStore.value(m_fileList.at(i));
const AudioFileModel_MetaInfo &metaInfo = current.metaInfo();
if(current.filePosition() > 0) havePosition = true; if(metaInfo.position() > 0) havePosition = true;
if(!current.fileName().isEmpty()) haveTitle = true; if(!metaInfo.title().isEmpty()) haveTitle = true;
if(!current.fileArtist().isEmpty()) haveArtist = true; if(!metaInfo.artist().isEmpty()) haveArtist = true;
if(!current.fileAlbum().isEmpty()) haveAlbum = true; if(!metaInfo.album().isEmpty()) haveAlbum = true;
if(!current.fileGenre().isEmpty()) haveGenre = true; if(!metaInfo.genre().isEmpty()) haveGenre = true;
if(current.fileYear() > 0) haveYear = true; if(metaInfo.year() > 0) haveYear = true;
if(!current.fileComment().isEmpty()) haveComment = true; if(!metaInfo.comment().isEmpty()) haveComment = true;
} }
if(!(haveTitle || haveArtist || haveAlbum || haveGenre || haveYear || haveComment)) if(!(haveTitle || haveArtist || haveAlbum || haveGenre || haveYear || haveComment))
@ -295,15 +298,16 @@ int FileListModel::exportToCsv(const QString &outFile)
for(int i = 0; i < nFiles; i++) for(int i = 0; i < nFiles; i++)
{ {
QStringList line; QStringList line;
AudioFileModel current = m_fileStore.value(m_fileList.at(i)); const AudioFileModel &current = m_fileStore.value(m_fileList.at(i));
const AudioFileModel_MetaInfo &metaInfo = current.metaInfo();
if(havePosition) line << QString::number(current.filePosition()); if(havePosition) line << QString::number(metaInfo.position());
if(haveTitle) line << current.fileName().trimmed(); if(haveTitle) line << metaInfo.title().trimmed();
if(haveArtist) line << current.fileArtist().trimmed(); if(haveArtist) line << metaInfo.artist().trimmed();
if(haveAlbum) line << current.fileAlbum().trimmed(); if(haveAlbum) line << metaInfo.album().trimmed();
if(haveGenre) line << current.fileGenre().trimmed(); if(haveGenre) line << metaInfo.genre().trimmed();
if(haveYear) line << QString::number(current.fileYear()); if(haveYear) line << QString::number(metaInfo.year());
if(haveComment) line << current.fileComment().trimmed(); if(haveComment) line << metaInfo.comment().trimmed();
if(file.write(line.replaceInStrings(";", ",").join(";").append("\r\n").toUtf8()) < 1) if(file.write(line.replaceInStrings(";", ",").join(";").append("\r\n").toUtf8()) < 1)
{ {
@ -455,38 +459,38 @@ int FileListModel::importFromCsv(QWidget *parent, const QString &inFile)
{ {
bool ok = false; bool ok = false;
unsigned int temp = data.at(j).trimmed().toUInt(&ok); unsigned int temp = data.at(j).trimmed().toUInt(&ok);
if(ok) m_fileStore[key].setFilePosition(temp); if(ok) m_fileStore[key].metaInfo().setPosition(temp);
} }
else if(CHECK_HDR(header.at(j), "TITLE")) else if(CHECK_HDR(header.at(j), "TITLE"))
{ {
QString temp = data.at(j).trimmed(); QString temp = data.at(j).trimmed();
if(!temp.isEmpty()) m_fileStore[key].setFileName(temp); if(!temp.isEmpty()) m_fileStore[key].metaInfo().setTitle(temp);
} }
else if(CHECK_HDR(header.at(j), "ARTIST")) else if(CHECK_HDR(header.at(j), "ARTIST"))
{ {
QString temp = data.at(j).trimmed(); QString temp = data.at(j).trimmed();
if(!temp.isEmpty()) m_fileStore[key].setFileArtist(temp); if(!temp.isEmpty()) m_fileStore[key].metaInfo().setArtist(temp);
} }
else if(CHECK_HDR(header.at(j), "ALBUM")) else if(CHECK_HDR(header.at(j), "ALBUM"))
{ {
QString temp = data.at(j).trimmed(); QString temp = data.at(j).trimmed();
if(!temp.isEmpty()) m_fileStore[key].setFileAlbum(temp); if(!temp.isEmpty()) m_fileStore[key].metaInfo().setAlbum(temp);
} }
else if(CHECK_HDR(header.at(j), "GENRE")) else if(CHECK_HDR(header.at(j), "GENRE"))
{ {
QString temp = data.at(j).trimmed(); QString temp = data.at(j).trimmed();
if(!temp.isEmpty()) m_fileStore[key].setFileGenre(temp); if(!temp.isEmpty()) m_fileStore[key].metaInfo().setGenre(temp);
} }
else if(CHECK_HDR(header.at(j), "YEAR")) else if(CHECK_HDR(header.at(j), "YEAR"))
{ {
bool ok = false; bool ok = false;
unsigned int temp = data.at(j).trimmed().toUInt(&ok); unsigned int temp = data.at(j).trimmed().toUInt(&ok);
if(ok) m_fileStore[key].setFileYear(temp); if(ok) m_fileStore[key].metaInfo().setYear(temp);
} }
else if(CHECK_HDR(header.at(j), "COMMENT")) else if(CHECK_HDR(header.at(j), "COMMENT"))
{ {
QString temp = data.at(j).trimmed(); QString temp = data.at(j).trimmed();
if(!temp.isEmpty()) m_fileStore[key].setFileComment(temp); if(!temp.isEmpty()) m_fileStore[key].metaInfo().setComment(temp);
} }
else else
{ {

View File

@ -44,7 +44,7 @@ public:
bool removeFile(const QModelIndex &index); bool removeFile(const QModelIndex &index);
void clearFiles(void); void clearFiles(void);
bool moveFile(const QModelIndex &index, int delta); bool moveFile(const QModelIndex &index, int delta);
AudioFileModel getFile(const QModelIndex &index); const AudioFileModel &getFile(const QModelIndex &index);
bool setFile(const QModelIndex &index, const AudioFileModel &audioFile); bool setFile(const QModelIndex &index, const AudioFileModel &audioFile);
AudioFileModel &operator[] (const QModelIndex &index); AudioFileModel &operator[] (const QModelIndex &index);
@ -72,6 +72,8 @@ public:
if(!flag) reset(); if(!flag) reset();
} }
const AudioFileModel m_nullAudioFile;
public slots: public slots:
void addFile(const QString &filePath); void addFile(const QString &filePath);
void addFile(const AudioFileModel &file); void addFile(const AudioFileModel &file);

View File

@ -81,37 +81,37 @@ QVariant MetaInfoModel::data(const QModelIndex &index, int role) const
return (!index.column()) ? tr("Full Path") : CHECK1(m_audioFile->filePath()); return (!index.column()) ? tr("Full Path") : CHECK1(m_audioFile->filePath());
break; break;
case 1: case 1:
return (!index.column()) ? tr("Format") : CHECK1(m_audioFile->formatAudioBaseInfo()); return (!index.column()) ? tr("Format") : CHECK1(m_audioFile->audioBaseInfo());
break; break;
case 2: case 2:
return (!index.column()) ? tr("Container") : CHECK1(m_audioFile->formatContainerInfo()); return (!index.column()) ? tr("Container") : CHECK1(m_audioFile->containerInfo());
break; break;
case 3: case 3:
return (!index.column()) ? tr("Compression") : CHECK1(m_audioFile->formatAudioCompressInfo()); return (!index.column()) ? tr("Compression") : CHECK1(m_audioFile->audioCompressInfo());
break; break;
case 4: case 4:
return (!index.column()) ? tr("Duration") : CHECK1(m_audioFile->fileDurationInfo()); return (!index.column()) ? tr("Duration") : CHECK1(m_audioFile->durationInfo());
break; break;
case 5: case 5:
return (!index.column()) ? tr("Title") : CHECK1(m_audioFile->fileName()); return (!index.column()) ? tr("Title") : CHECK1(m_audioFile->metaInfo().title());
break; break;
case 6: case 6:
return (!index.column()) ? tr("Artist") : CHECK1(m_audioFile->fileArtist()); return (!index.column()) ? tr("Artist") : CHECK1(m_audioFile->metaInfo().artist());
break; break;
case 7: case 7:
return (!index.column()) ? tr("Album") : CHECK1(m_audioFile->fileAlbum()); return (!index.column()) ? tr("Album") : CHECK1(m_audioFile->metaInfo().album());
break; break;
case 8: case 8:
return (!index.column()) ? tr("Genre") : CHECK1(m_audioFile->fileGenre()); return (!index.column()) ? tr("Genre") : CHECK1(m_audioFile->metaInfo().genre());
break; break;
case 9: case 9:
return (!index.column()) ? tr("Year") : CHECK2(m_audioFile->fileYear()); return (!index.column()) ? tr("Year") : CHECK2(m_audioFile->metaInfo().year());
break; break;
case 10: case 10:
return (!index.column()) ? tr("Position") : ((m_audioFile->filePosition() == UINT_MAX) ? tr("Generate from list position") : CHECK2(m_audioFile->filePosition())); return (!index.column()) ? tr("Position") : ((m_audioFile->metaInfo().position() == UINT_MAX) ? tr("Generate from list position") : CHECK2(m_audioFile->metaInfo().position()));
break; break;
case 11: case 11:
return (!index.column()) ? tr("Comment") : CHECK1(m_audioFile->fileComment()); return (!index.column()) ? tr("Comment") : CHECK1(m_audioFile->metaInfo().comment());
break; break;
default: default:
return QVariant(); return QVariant();
@ -171,37 +171,37 @@ QVariant MetaInfoModel::data(const QModelIndex &index, int role) const
return CHECK3(m_audioFile->filePath()); return CHECK3(m_audioFile->filePath());
break; break;
case 1: case 1:
return CHECK3(m_audioFile->formatAudioBaseInfo()); return CHECK3(m_audioFile->audioBaseInfo());
break; break;
case 2: case 2:
return CHECK3(m_audioFile->formatContainerInfo()); return CHECK3(m_audioFile->containerInfo());
break; break;
case 3: case 3:
return CHECK3(m_audioFile->formatAudioCompressInfo()); return CHECK3(m_audioFile->audioCompressInfo());
break; break;
case 4: case 4:
return CHECK4(m_audioFile->fileDurationInfo()); return CHECK4(m_audioFile->durationInfo());
break; break;
case 5: case 5:
return CHECK3(m_audioFile->fileName()); return CHECK3(m_audioFile->metaInfo().title());
break; break;
case 6: case 6:
return CHECK3(m_audioFile->fileArtist()); return CHECK3(m_audioFile->metaInfo().artist());
break; break;
case 7: case 7:
return CHECK3(m_audioFile->fileAlbum()); return CHECK3(m_audioFile->metaInfo().album());
break; break;
case 8: case 8:
return CHECK3(m_audioFile->fileGenre()); return CHECK3(m_audioFile->metaInfo().genre());
break; break;
case 9: case 9:
return CHECK4(m_audioFile->fileYear()); return CHECK4(m_audioFile->metaInfo().year());
break; break;
case 10: case 10:
return CHECK4(m_audioFile->filePosition()); return CHECK4(m_audioFile->metaInfo().position());
break; break;
case 11: case 11:
return CHECK3(m_audioFile->fileComment()); return CHECK3(m_audioFile->metaInfo().comment());
break; break;
default: default:
return QVariant(); return QVariant();
@ -262,28 +262,28 @@ bool MetaInfoModel::setData (const QModelIndex &index, const QVariant &value, in
return false; return false;
break; break;
case 4: case 4:
m_audioFile->setFileDuration(value.toUInt()); m_audioFile->techInfo().setDuration(value.toUInt());
break; break;
case 5: case 5:
m_audioFile->setFileName(value.toString()); m_audioFile->metaInfo().setTitle(value.toString());
break; break;
case 6: case 6:
m_audioFile->setFileArtist(value.toString()); m_audioFile->metaInfo().setArtist(value.toString());
break; break;
case 7: case 7:
m_audioFile->setFileAlbum(value.toString()); m_audioFile->metaInfo().setAlbum(value.toString());
break; break;
case 8: case 8:
m_audioFile->setFileGenre(value.toString()); m_audioFile->metaInfo().setGenre(value.toString());
break; break;
case 9: case 9:
m_audioFile->setFileYear(value.toUInt()); m_audioFile->metaInfo().setYear(value.toUInt());
break; break;
case 10: case 10:
m_audioFile->setFilePosition(value.toUInt()); m_audioFile->metaInfo().setPosition(value.toUInt());
break; break;
case 11: case 11:
m_audioFile->setFileComment(value.toString()); m_audioFile->metaInfo().setComment(value.toString());
break; break;
default: default:
return false; return false;
@ -311,7 +311,7 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
case 5: case 5:
input.setWindowTitle(tr("Edit Title")); input.setWindowTitle(tr("Edit Title"));
input.setLabelText(EXPAND(tr("Please enter the title for this file:"))); input.setLabelText(EXPAND(tr("Please enter the title for this file:")));
input.setTextValue(m_audioFile->fileName()); input.setTextValue(m_audioFile->metaInfo().title());
if(input.exec() != 0) if(input.exec() != 0)
{ {
temp = input.textValue().simplified(); temp = input.textValue().simplified();
@ -323,31 +323,31 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
if(index >= 0) temp = temp.mid(index + 3).trimmed(); if(index >= 0) temp = temp.mid(index + 3).trimmed();
} }
beginResetModel(); beginResetModel();
m_audioFile->setFileName(temp.isEmpty() ? QString() : temp); m_audioFile->metaInfo().setTitle(temp.isEmpty() ? QString() : temp);
endResetModel(); endResetModel();
} }
break; break;
case 6: case 6:
input.setWindowTitle(tr("Edit Artist")); input.setWindowTitle(tr("Edit Artist"));
input.setLabelText(EXPAND(tr("Please enter the artist for this file:"))); input.setLabelText(EXPAND(tr("Please enter the artist for this file:")));
input.setTextValue(m_audioFile->fileArtist()); input.setTextValue(m_audioFile->metaInfo().artist());
if(input.exec() != 0) if(input.exec() != 0)
{ {
temp = input.textValue().simplified(); temp = input.textValue().simplified();
beginResetModel(); beginResetModel();
m_audioFile->setFileArtist(temp.isEmpty() ? QString() : temp); m_audioFile->metaInfo().setArtist(temp.isEmpty() ? QString() : temp);
endResetModel(); endResetModel();
} }
break; break;
case 7: case 7:
input.setWindowTitle(tr("Edit Album")); input.setWindowTitle(tr("Edit Album"));
input.setLabelText(EXPAND(tr("Please enter the album for this file:"))); input.setLabelText(EXPAND(tr("Please enter the album for this file:")));
input.setTextValue(m_audioFile->fileAlbum()); input.setTextValue(m_audioFile->metaInfo().album());
if(input.exec() != 0) if(input.exec() != 0)
{ {
temp = input.textValue().simplified(); temp = input.textValue().simplified();
beginResetModel(); beginResetModel();
m_audioFile->setFileAlbum(temp.isEmpty() ? QString() : temp); m_audioFile->metaInfo().setAlbum(temp.isEmpty() ? QString() : temp);
endResetModel(); endResetModel();
} }
break; break;
@ -356,12 +356,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
input.setLabelText(EXPAND(tr("Please enter the genre for this file:"))); input.setLabelText(EXPAND(tr("Please enter the genre for this file:")));
for(int i = 0; g_lamexp_generes[i]; i++) generes << g_lamexp_generes[i]; for(int i = 0; g_lamexp_generes[i]; i++) generes << g_lamexp_generes[i];
input.setComboBoxItems(generes); input.setComboBoxItems(generes);
input.setTextValue(m_audioFile->fileGenre()); input.setTextValue(m_audioFile->metaInfo().genre());
if(input.exec() != 0) if(input.exec() != 0)
{ {
temp = input.textValue().simplified(); temp = input.textValue().simplified();
beginResetModel(); beginResetModel();
m_audioFile->setFileGenre((temp.isEmpty() || !temp.compare(generes.at(0), Qt::CaseInsensitive)) ? QString() : temp); m_audioFile->metaInfo().setGenre((temp.isEmpty() || !temp.compare(generes.at(0), Qt::CaseInsensitive)) ? QString() : temp);
endResetModel(); endResetModel();
} }
break; break;
@ -369,13 +369,13 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
input.setWindowTitle(tr("Edit Year")); input.setWindowTitle(tr("Edit Year"));
input.setLabelText(EXPAND(tr("Please enter the year for this file:"))); input.setLabelText(EXPAND(tr("Please enter the year for this file:")));
input.setIntRange(0, 2100); input.setIntRange(0, 2100);
input.setIntValue((m_audioFile->fileYear() ? m_audioFile->fileYear() : 1900)); input.setIntValue((m_audioFile->metaInfo().year() ? m_audioFile->metaInfo().year() : 1900));
input.setIntStep(1); input.setIntStep(1);
if(input.exec() != 0) if(input.exec() != 0)
{ {
val = input.intValue(); val = input.intValue();
beginResetModel(); beginResetModel();
m_audioFile->setFileYear(val); m_audioFile->metaInfo().setYear(val);
endResetModel(); endResetModel();
} }
break; break;
@ -385,13 +385,13 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
input.setWindowTitle(tr("Edit Position")); input.setWindowTitle(tr("Edit Position"));
input.setLabelText(EXPAND(tr("Please enter the position (track no.) for this file:"))); input.setLabelText(EXPAND(tr("Please enter the position (track no.) for this file:")));
input.setIntRange(0, 99); input.setIntRange(0, 99);
input.setIntValue((m_audioFile->filePosition() ? m_audioFile->filePosition() : 1)); input.setIntValue((m_audioFile->metaInfo().position() ? m_audioFile->metaInfo().position() : 1));
input.setIntStep(1); input.setIntStep(1);
if(input.exec() != 0) if(input.exec() != 0)
{ {
val = input.intValue(); val = input.intValue();
beginResetModel(); beginResetModel();
m_audioFile->setFilePosition(val); m_audioFile->metaInfo().setPosition(val);
endResetModel(); endResetModel();
} }
} }
@ -402,12 +402,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
input.setWindowTitle(tr("Edit Position")); input.setWindowTitle(tr("Edit Position"));
input.setLabelText(EXPAND(tr("Please enter the position (track no.) for this file:"))); input.setLabelText(EXPAND(tr("Please enter the position (track no.) for this file:")));
input.setComboBoxItems(options); input.setComboBoxItems(options);
input.setTextValue(options.value((m_audioFile->filePosition() == UINT_MAX) ? 1 : 0)); input.setTextValue(options.value((m_audioFile->metaInfo().position() == UINT_MAX) ? 1 : 0));
if(input.exec() != 0) if(input.exec() != 0)
{ {
temp = input.textValue().simplified(); temp = input.textValue().simplified();
beginResetModel(); beginResetModel();
m_audioFile->setFilePosition((options.indexOf(temp) == 1) ? UINT_MAX : 0); m_audioFile->metaInfo().setPosition((options.indexOf(temp) == 1) ? UINT_MAX : 0);
endResetModel(); endResetModel();
} }
} }
@ -415,12 +415,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
case 11: case 11:
input.setWindowTitle(tr("Edit Comment")); input.setWindowTitle(tr("Edit Comment"));
input.setLabelText(EXPAND(tr("Please enter the comment for this file:"))); input.setLabelText(EXPAND(tr("Please enter the comment for this file:")));
input.setTextValue((m_audioFile->fileComment().isEmpty() ? tr("Encoded with LameXP") : m_audioFile->fileComment())); input.setTextValue((m_audioFile->metaInfo().comment().isEmpty() ? tr("Encoded with LameXP") : m_audioFile->metaInfo().comment()));
if(input.exec() != 0) if(input.exec() != 0)
{ {
temp = input.textValue().simplified(); temp = input.textValue().simplified();
beginResetModel(); beginResetModel();
m_audioFile->setFileComment(temp.isEmpty() ? QString() : temp); m_audioFile->metaInfo().setComment(temp.isEmpty() ? QString() : temp);
endResetModel(); endResetModel();
} }
break; break;
@ -432,7 +432,7 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
void MetaInfoModel::editArtwork(const QString &imagePath) void MetaInfoModel::editArtwork(const QString &imagePath)
{ {
m_audioFile->setFileCover(imagePath, false); m_audioFile->metaInfo().setCover(imagePath, false);
} }
void MetaInfoModel::clearData(bool clearMetaOnly) void MetaInfoModel::clearData(bool clearMetaOnly)
@ -442,33 +442,39 @@ void MetaInfoModel::clearData(bool clearMetaOnly)
m_textUnknown = QString("(%1)").arg(tr("Unknown")); m_textUnknown = QString("(%1)").arg(tr("Unknown"));
m_textNotSpecified = QString("(%1)").arg(tr("Not Specified")); m_textNotSpecified = QString("(%1)").arg(tr("Not Specified"));
m_audioFile->setFileArtist(QString()); m_audioFile->metaInfo().reset();
m_audioFile->setFileAlbum(QString()); m_audioFile->metaInfo().setComment(tr("Encoded with LameXP"));
m_audioFile->setFileGenre(QString()); m_audioFile->metaInfo().setPosition(m_offset ? UINT_MAX : 0);
m_audioFile->setFileComment(tr("Encoded with LameXP"));
m_audioFile->setFileCover(QString(), false); //m_audioFile->setFileArtist(QString());
m_audioFile->setFileYear(0); //m_audioFile->setFileAlbum(QString());
m_audioFile->setFilePosition(m_offset ? UINT_MAX : 0); //m_audioFile->setFileGenre(QString());
//m_audioFile->setFileComment(tr("Encoded with LameXP"));
//m_audioFile->setFileCover(QString(), false);
//m_audioFile->setFileYear(0);
//m_audioFile->setFilePosition(m_offset ? UINT_MAX : 0);
if(!clearMetaOnly) if(!clearMetaOnly)
{ {
m_audioFile->setFilePath(QString()); m_audioFile->techInfo().reset();
m_audioFile->setFileName(QString());
m_audioFile->setFileDuration(0); //m_audioFile->setFilePath(QString());
m_audioFile->setFormatContainerType(QString()); //m_audioFile->setFileName(QString());
m_audioFile->setFormatContainerProfile(QString()); //m_audioFile->setFileDuration(0);
m_audioFile->setFormatAudioType(QString()); //m_audioFile->setFormatContainerType(QString());
m_audioFile->setFormatAudioProfile(QString()); //m_audioFile->setFormatContainerProfile(QString());
m_audioFile->setFormatAudioVersion(QString()); //m_audioFile->setFormatAudioType(QString());
m_audioFile->setFormatAudioSamplerate(0); //m_audioFile->setFormatAudioProfile(QString());
m_audioFile->setFormatAudioChannels(0); //m_audioFile->setFormatAudioVersion(QString());
m_audioFile->setFormatAudioBitdepth(0); //m_audioFile->setFormatAudioSamplerate(0);
//m_audioFile->setFormatAudioChannels(0);
//m_audioFile->setFormatAudioBitdepth(0);
} }
else else
{ {
QString temp = QFileInfo(m_audioFile->filePath()).baseName(); QString temp = QFileInfo(m_audioFile->filePath()).baseName();
temp = temp.split("-", QString::SkipEmptyParts).last().trimmed(); temp = temp.split("-", QString::SkipEmptyParts).last().trimmed();
m_audioFile->setFileName(temp); m_audioFile->metaInfo().setTitle(temp);
} }
endResetModel(); endResetModel();
@ -479,9 +485,9 @@ Qt::ItemFlags MetaInfoModel::flags(const QModelIndex &index) const
return QAbstractTableModel::flags(index); return QAbstractTableModel::flags(index);
} }
void MetaInfoModel::assignInfoFrom(AudioFileModel &file) void MetaInfoModel::assignInfoFrom(const AudioFileModel &file)
{ {
beginResetModel(); beginResetModel();
m_audioFile->updateMetaInfo(file); m_audioFile->metaInfo().update(file.metaInfo());
endResetModel(); endResetModel();
} }

View File

@ -43,7 +43,7 @@ public:
Qt::ItemFlags flags(const QModelIndex &index) const; Qt::ItemFlags flags(const QModelIndex &index) const;
void editItem(const QModelIndex &index, QWidget *parent); void editItem(const QModelIndex &index, QWidget *parent);
void editArtwork(const QString &imagePath); void editArtwork(const QString &imagePath);
void assignInfoFrom(AudioFileModel &file); void assignInfoFrom(const AudioFileModel &file);
void clearData(bool clearMetaOnly = false); void clearData(bool clearMetaOnly = false);
private: private:

View File

@ -108,10 +108,10 @@ void CueSplitter::run()
//Decompress all input files //Decompress all input files
for(int i = 0; i < nInputFiles; i++) for(int i = 0; i < nInputFiles; i++)
{ {
AudioFileModel &inputFileInfo = m_inputFilesInfo[inputFileList.at(i)]; const AudioFileModel_TechInfo &inputFileInfo = m_inputFilesInfo[inputFileList.at(i)].techInfo();
if(inputFileInfo.formatContainerType().compare("Wave", Qt::CaseInsensitive) || inputFileInfo.formatAudioType().compare("PCM", Qt::CaseInsensitive)) if(inputFileInfo.containerType().compare("Wave", Qt::CaseInsensitive) || inputFileInfo.audioType().compare("PCM", Qt::CaseInsensitive))
{ {
AbstractDecoder *decoder = DecoderRegistry::lookup(inputFileInfo.formatContainerType(), inputFileInfo.formatContainerProfile(), inputFileInfo.formatAudioType(), inputFileInfo.formatAudioProfile(), inputFileInfo.formatAudioVersion()); AbstractDecoder *decoder = DecoderRegistry::lookup(inputFileInfo.containerType(), inputFileInfo.containerProfile(), inputFileInfo.audioType(), inputFileInfo.audioProfile(), inputFileInfo.audioVersion());
if(decoder) if(decoder)
{ {
m_activeFile = shortName(QFileInfo(inputFileList.at(i)).fileName()); m_activeFile = shortName(QFileInfo(inputFileList.at(i)).fileName());
@ -193,41 +193,42 @@ void CueSplitter::run()
} }
//Setup meta info //Setup meta info
AudioFileModel trackMetaInfo(QString().sprintf("cue://File%02d/Track%02d", i, j)); AudioFileModel_MetaInfo trackMetaInfo; /*QString().sprintf("cue://File%02d/Track%02d", i, j)*/;
trackMetaInfo.setFileName(m_model->getTrackTitle(i, j)); trackMetaInfo.setTitle(m_model->getTrackTitle(i, j));
trackMetaInfo.setFileArtist(m_model->getTrackPerformer(i, j)); trackMetaInfo.setArtist(m_model->getTrackPerformer(i, j));
trackMetaInfo.setFileGenre(m_model->getTrackGenre(i, j)); trackMetaInfo.setGenre(m_model->getTrackGenre(i, j));
trackMetaInfo.setFileYear(m_model->getTrackYear(i, j)); trackMetaInfo.setYear(m_model->getTrackYear(i, j));
trackMetaInfo.setFilePosition(trackNo); trackMetaInfo.setPosition(trackNo);
//Apply album meta data on files //Apply album meta data on files
if(trackMetaInfo.fileName().trimmed().isEmpty()) if(trackMetaInfo.title().trimmed().isEmpty())
{ {
trackMetaInfo.setFileName(QString().sprintf("Track %02d", trackNo)); trackMetaInfo.setTitle(QString().sprintf("Track %02d", trackNo));
} }
if(!albumTitle.isEmpty()) if(!albumTitle.isEmpty())
{ {
trackMetaInfo.setFileAlbum(albumTitle); trackMetaInfo.setAlbum(albumTitle);
} }
if(!albumPerformer.isEmpty() && trackMetaInfo.fileArtist().isEmpty()) if(!albumPerformer.isEmpty() && trackMetaInfo.artist().isEmpty())
{ {
trackMetaInfo.setFileArtist(albumPerformer); trackMetaInfo.setArtist(albumPerformer);
} }
if(!albumGenre.isEmpty() && trackMetaInfo.fileGenre().isEmpty()) if(!albumGenre.isEmpty() && trackMetaInfo.genre().isEmpty())
{ {
trackMetaInfo.setFileGenre(albumGenre); trackMetaInfo.setGenre(albumGenre);
} }
if((albumYear > 0) && (trackMetaInfo.fileYear() == 0)) if((albumYear > 0) && (trackMetaInfo.year() == 0))
{ {
trackMetaInfo.setFileYear(albumYear); trackMetaInfo.setYear(albumYear);
} }
if(_finite(trackLength)) if(_finite(trackLength))
{ {
trackMetaInfo.setFileDuration(static_cast<unsigned int>(abs(trackLength))); //FIXME !!!
//trackMetaInfo.setDuration(static_cast<unsigned int>(abs(trackLength)));
} }
//Generate output file name //Generate output file name
QString trackTitle = trackMetaInfo.fileName().isEmpty() ? QString().sprintf("Track %02d", trackNo) : trackMetaInfo.fileName(); QString trackTitle = trackMetaInfo.title().isEmpty() ? QString().sprintf("Track %02d", trackNo) : trackMetaInfo.title();
QString outputFile = QString("%1/[%2] %3 - %4.wav").arg(m_outputDir, QString().sprintf("%02d", trackNo), lamexp_clean_filename(m_baseName), lamexp_clean_filename(trackTitle)); QString outputFile = QString("%1/[%2] %3 - %4.wav").arg(m_outputDir, QString().sprintf("%02d", trackNo), lamexp_clean_filename(m_baseName), lamexp_clean_filename(trackTitle));
for(int n = 2; QFileInfo(outputFile).exists(); n++) for(int n = 2; QFileInfo(outputFile).exists(); n++)
{ {
@ -264,14 +265,14 @@ void CueSplitter::handleUpdate(int progress)
// Privtae Functions // Privtae Functions
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
void CueSplitter::splitFile(const QString &output, const int trackNo, const QString &file, const double offset, const double length, const AudioFileModel &metaInfo, int &maxProgress) void CueSplitter::splitFile(const QString &output, const int trackNo, const QString &file, const double offset, const double length, const AudioFileModel_MetaInfo &metaInfo, int &maxProgress)
{ {
qDebug("[Track %02d]", trackNo); qDebug("[Track %02d]", trackNo);
qDebug("File: <%s>", file.toUtf8().constData()); qDebug("File: <%s>", file.toUtf8().constData());
qDebug("Offset: <%f> <%s>", offset, indexToString(offset).toLatin1().constData()); qDebug("Offset: <%f> <%s>", offset, indexToString(offset).toLatin1().constData());
qDebug("Length: <%f> <%s>", length, indexToString(length).toLatin1().constData()); qDebug("Length: <%f> <%s>", length, indexToString(length).toLatin1().constData());
qDebug("Artist: <%s>", metaInfo.fileArtist().toUtf8().constData()); qDebug("Artist: <%s>", metaInfo.artist().toUtf8().constData());
qDebug("Title: <%s>", metaInfo.fileName().toUtf8().constData()); qDebug("Title: <%s>", metaInfo.title().toUtf8().constData());
if(!m_decompressedFiles.contains(file)) if(!m_decompressedFiles.contains(file))
{ {
@ -286,10 +287,11 @@ void CueSplitter::splitFile(const QString &output, const int trackNo, const QStr
emit fileSelected(QString("%1 [%2%]").arg(baseName, QString::number(maxProgress))); emit fileSelected(QString("%1 [%2%]").arg(baseName, QString::number(maxProgress)));
AudioFileModel outFileInfo(metaInfo); AudioFileModel outFileInfo;
outFileInfo.setMetaInfo(metaInfo);
outFileInfo.setFilePath(output); outFileInfo.setFilePath(output);
outFileInfo.setFormatContainerType("Wave"); outFileInfo.techInfo().setContainerType("Wave");
outFileInfo.setFormatAudioType("PCM"); outFileInfo.techInfo().setAudioType("PCM");
QStringList args; QStringList args;
args << "-S" << "-V3"; args << "-S" << "-V3";
@ -364,19 +366,19 @@ void CueSplitter::splitFile(const QString &output, const int trackNo, const QStr
{ {
bool ok = false; bool ok = false;
unsigned int channels = rxChannels.cap(1).toUInt(&ok); unsigned int channels = rxChannels.cap(1).toUInt(&ok);
if(ok) outFileInfo.setFormatAudioChannels(channels); if(ok) outFileInfo.techInfo().setAudioChannels(channels);
} }
else if(rxSamplerate.lastIndexIn(text) >= 0) else if(rxSamplerate.lastIndexIn(text) >= 0)
{ {
bool ok = false; bool ok = false;
unsigned int samplerate = rxSamplerate.cap(1).toUInt(&ok); unsigned int samplerate = rxSamplerate.cap(1).toUInt(&ok);
if(ok) outFileInfo.setFormatAudioSamplerate(samplerate); if(ok) outFileInfo.techInfo().setAudioSamplerate(samplerate);
} }
else if(rxPrecision.lastIndexIn(text) >= 0) else if(rxPrecision.lastIndexIn(text) >= 0)
{ {
bool ok = false; bool ok = false;
unsigned int precision = rxPrecision.cap(1).toUInt(&ok); unsigned int precision = rxPrecision.cap(1).toUInt(&ok);
if(ok) outFileInfo.setFormatAudioBitdepth(precision); if(ok) outFileInfo.techInfo().setAudioBitdepth(precision);
} }
else if(rxDuration.lastIndexIn(text) >= 0) else if(rxDuration.lastIndexIn(text) >= 0)
{ {
@ -392,7 +394,7 @@ void CueSplitter::splitFile(const QString &output, const int trackNo, const QStr
qDebug("Duration updated from SoX info!"); qDebug("Duration updated from SoX info!");
int duration = intputLen - static_cast<int>(floor(offset + 0.5)); int duration = intputLen - static_cast<int>(floor(offset + 0.5));
if(duration < 0) qWarning("Track is out of bounds: Track offset exceeds input file duration!"); if(duration < 0) qWarning("Track is out of bounds: Track offset exceeds input file duration!");
outFileInfo.setFileDuration(qMax(0, duration)); outFileInfo.techInfo().setDuration(qMax(0, duration));
} }
else else
{ {

View File

@ -26,6 +26,7 @@
#include <QMap> #include <QMap>
class AudioFileModel; class AudioFileModel;
class AudioFileModel_MetaInfo;
class CueSheetModel; class CueSheetModel;
class QFile; class QFile;
class QDir; class QDir;
@ -62,7 +63,7 @@ public slots:
void abortProcess(void) { m_abortFlag = true; } void abortProcess(void) { m_abortFlag = true; }
private: private:
void splitFile(const QString &output, const int trackNo, const QString &file, const double offset, const double length, const AudioFileModel &metaInfo, int &maxProgress); void splitFile(const QString &output, const int trackNo, const QString &file, const double offset, const double length, const AudioFileModel_MetaInfo &metaInfo, int &maxProgress);
QString indexToString(const double index) const; QString indexToString(const double index) const;
QString shortName(const QString &longName) const; QString shortName(const QString &longName) const;

View File

@ -107,7 +107,7 @@ void AnalyzeTask::run_ex(void)
qWarning("Dummy CDDA file detected, skipping!"); qWarning("Dummy CDDA file detected, skipping!");
break; break;
default: default:
if(file.fileName().isEmpty() || file.formatContainerType().isEmpty() || file.formatAudioType().isEmpty()) if(file.metaInfo().title().isEmpty() || file.techInfo().containerType().isEmpty() || file.techInfo().audioType().isEmpty())
{ {
fileType = fileTypeUnknown; fileType = fileTypeUnknown;
if(!QFileInfo(currentFile).suffix().compare("cue", Qt::CaseInsensitive)) if(!QFileInfo(currentFile).suffix().compare("cue", Qt::CaseInsensitive))
@ -227,7 +227,7 @@ const AudioFileModel AnalyzeTask::analyzeFile(const QString &filePath, int *type
} }
} }
if(audioFile.fileName().isEmpty()) if(audioFile.metaInfo().title().isEmpty())
{ {
QString baseName = QFileInfo(filePath).fileName(); QString baseName = QFileInfo(filePath).fileName();
int index = baseName.lastIndexOf("."); int index = baseName.lastIndexOf(".");
@ -245,7 +245,7 @@ const AudioFileModel AnalyzeTask::analyzeFile(const QString &filePath, int *type
baseName = baseName.mid(index + 3).trimmed(); baseName = baseName.mid(index + 3).trimmed();
} }
audioFile.setFileName(baseName); audioFile.metaInfo().setTitle(baseName);
} }
process.waitForFinished(); process.waitForFinished();
@ -260,9 +260,9 @@ const AudioFileModel AnalyzeTask::analyzeFile(const QString &filePath, int *type
retrieveCover(audioFile, coverType, coverData); retrieveCover(audioFile, coverType, coverData);
} }
if((audioFile.formatAudioType().compare("PCM", Qt::CaseInsensitive) == 0) && (audioFile.formatAudioProfile().compare("Float", Qt::CaseInsensitive) == 0)) if((audioFile.techInfo().audioType().compare("PCM", Qt::CaseInsensitive) == 0) && (audioFile.techInfo().audioProfile().compare("Float", Qt::CaseInsensitive) == 0))
{ {
if(audioFile.formatAudioBitdepth() == 32) audioFile.setFormatAudioBitdepth(AudioFileModel::BITDEPTH_IEEE_FLOAT32); if(audioFile.techInfo().audioBitdepth() == 32) audioFile.techInfo().setAudioBitdepth(AudioFileModel::BITDEPTH_IEEE_FLOAT32);
} }
return audioFile; return audioFile;
@ -311,8 +311,8 @@ void AnalyzeTask::updateInfo(AudioFileModel &audioFile, bool *skipNext, unsigned
if(IS_KEY("Aud_Source")) if(IS_KEY("Aud_Source"))
{ {
*skipNext = true; *skipNext = true;
audioFile.setFormatContainerType(QString()); audioFile.techInfo().setContainerType(QString());
audioFile.setFormatAudioType(QString()); audioFile.techInfo().setAudioType(QString());
qWarning("Skipping info for playlist file!"); qWarning("Skipping info for playlist file!");
return; return;
} }
@ -322,47 +322,47 @@ void AnalyzeTask::updateInfo(AudioFileModel &audioFile, bool *skipNext, unsigned
{ {
if(IS_KEY("Gen_Format")) if(IS_KEY("Gen_Format"))
{ {
audioFile.setFormatContainerType(value); audioFile.techInfo().setContainerType(value);
} }
else if(IS_KEY("Gen_Format_Profile")) else if(IS_KEY("Gen_Format_Profile"))
{ {
audioFile.setFormatContainerProfile(value); audioFile.techInfo().setContainerProfile(value);
} }
else if(IS_KEY("Gen_Title") || IS_KEY("Gen_Track")) else if(IS_KEY("Gen_Title") || IS_KEY("Gen_Track"))
{ {
audioFile.setFileName(value); audioFile.metaInfo().setTitle(value);
} }
else if(IS_KEY("Gen_Duration")) else if(IS_KEY("Gen_Duration"))
{ {
unsigned int tmp = parseDuration(value); unsigned int tmp = parseDuration(value);
if(tmp > 0) audioFile.setFileDuration(tmp); if(tmp > 0) audioFile.techInfo().setDuration(tmp);
} }
else if(IS_KEY("Gen_Artist") || IS_KEY("Gen_Performer")) else if(IS_KEY("Gen_Artist") || IS_KEY("Gen_Performer"))
{ {
audioFile.setFileArtist(value); audioFile.metaInfo().setArtist(value);
} }
else if(IS_KEY("Gen_Album")) else if(IS_KEY("Gen_Album"))
{ {
audioFile.setFileAlbum(value); audioFile.metaInfo().setAlbum(value);
} }
else if(IS_KEY("Gen_Genre")) else if(IS_KEY("Gen_Genre"))
{ {
audioFile.setFileGenre(value); audioFile.metaInfo().setGenre(value);
} }
else if(IS_KEY("Gen_Released_Date") || IS_KEY("Gen_Recorded_Date")) else if(IS_KEY("Gen_Released_Date") || IS_KEY("Gen_Recorded_Date"))
{ {
unsigned int tmp = parseYear(value); unsigned int tmp = parseYear(value);
if(tmp > 0) audioFile.setFileYear(tmp); if(tmp > 0) audioFile.metaInfo().setYear(tmp);
} }
else if(IS_KEY("Gen_Comment")) else if(IS_KEY("Gen_Comment"))
{ {
audioFile.setFileComment(value); audioFile.metaInfo().setComment(value);
} }
else if(IS_KEY("Gen_Track/Position")) else if(IS_KEY("Gen_Track/Position"))
{ {
bool ok = false; bool ok = false;
unsigned int tmp = value.toUInt(&ok); unsigned int tmp = value.toUInt(&ok);
if(ok) audioFile.setFilePosition(tmp); if(ok) audioFile.metaInfo().setPosition(tmp);
} }
else if(IS_KEY("Gen_Cover") || IS_KEY("Gen_Cover_Type")) else if(IS_KEY("Gen_Cover") || IS_KEY("Gen_Cover_Type"))
{ {
@ -396,53 +396,53 @@ void AnalyzeTask::updateInfo(AudioFileModel &audioFile, bool *skipNext, unsigned
if(IS_KEY("Aud_Format")) if(IS_KEY("Aud_Format"))
{ {
audioFile.setFormatAudioType(value); audioFile.techInfo().setAudioType(value);
} }
else if(IS_KEY("Aud_Format_Profile")) else if(IS_KEY("Aud_Format_Profile"))
{ {
audioFile.setFormatAudioProfile(value); audioFile.techInfo().setAudioProfile(value);
} }
else if(IS_KEY("Aud_Format_Version")) else if(IS_KEY("Aud_Format_Version"))
{ {
audioFile.setFormatAudioVersion(value); audioFile.techInfo().setAudioVersion(value);
} }
else if(IS_KEY("Aud_Channel(s)")) else if(IS_KEY("Aud_Channel(s)"))
{ {
bool ok = false; bool ok = false;
unsigned int tmp = value.toUInt(&ok); unsigned int tmp = value.toUInt(&ok);
if(ok) audioFile.setFormatAudioChannels(tmp); if(ok) audioFile.techInfo().setAudioChannels(tmp);
} }
else if(IS_KEY("Aud_SamplingRate")) else if(IS_KEY("Aud_SamplingRate"))
{ {
bool ok = false; bool ok = false;
unsigned int tmp = value.toUInt(&ok); unsigned int tmp = value.toUInt(&ok);
if(ok) audioFile.setFormatAudioSamplerate(tmp); if(ok) audioFile.techInfo().setAudioSamplerate(tmp);
} }
else if(IS_KEY("Aud_BitDepth")) else if(IS_KEY("Aud_BitDepth"))
{ {
bool ok = false; bool ok = false;
unsigned int tmp = value.toUInt(&ok); unsigned int tmp = value.toUInt(&ok);
if(ok) audioFile.setFormatAudioBitdepth(tmp); if(ok) audioFile.techInfo().setAudioBitdepth(tmp);
} }
else if(IS_KEY("Aud_Duration")) else if(IS_KEY("Aud_Duration"))
{ {
unsigned int tmp = parseDuration(value); unsigned int tmp = parseDuration(value);
if(tmp > 0) audioFile.setFileDuration(tmp); if(tmp > 0) audioFile.techInfo().setDuration(tmp);
} }
else if(IS_KEY("Aud_BitRate")) else if(IS_KEY("Aud_BitRate"))
{ {
bool ok = false; bool ok = false;
unsigned int tmp = value.toUInt(&ok); unsigned int tmp = value.toUInt(&ok);
if(ok) audioFile.setFormatAudioBitrate(tmp/1000); if(ok) audioFile.techInfo().setAudioBitrate(tmp/1000);
} }
else if(IS_KEY("Aud_BitRate_Mode")) else if(IS_KEY("Aud_BitRate_Mode"))
{ {
if(!value.compare("CBR", Qt::CaseInsensitive)) audioFile.setFormatAudioBitrateMode(AudioFileModel::BitrateModeConstant); if(!value.compare("CBR", Qt::CaseInsensitive)) audioFile.techInfo().setAudioBitrateMode(AudioFileModel::BitrateModeConstant);
if(!value.compare("VBR", Qt::CaseInsensitive)) audioFile.setFormatAudioBitrateMode(AudioFileModel::BitrateModeVariable); if(!value.compare("VBR", Qt::CaseInsensitive)) audioFile.techInfo().setAudioBitrateMode(AudioFileModel::BitrateModeVariable);
} }
else if(IS_KEY("Aud_Encoded_Library")) else if(IS_KEY("Aud_Encoded_Library"))
{ {
audioFile.setFormatAudioEncodeLib(value); audioFile.techInfo().setAudioEncodeLib(value);
} }
else else
{ {
@ -492,7 +492,7 @@ void AnalyzeTask::retrieveCover(AudioFileModel &audioFile, cover_t coverType, co
{ {
coverFile.write(coverData); coverFile.write(coverData);
coverFile.close(); coverFile.close();
audioFile.setFileCover(coverFile.fileName(), true); audioFile.metaInfo().setCover(coverFile.fileName(), true);
} }
} }
else else
@ -558,25 +558,25 @@ bool AnalyzeTask::analyzeAvisynthFile(const QString &filePath, AudioFileModel &i
{ {
bool ok = false; bool ok = false;
unsigned int duration = val.toUInt(&ok); unsigned int duration = val.toUInt(&ok);
if(ok) info.setFileDuration(duration); if(ok) info.techInfo().setDuration(duration);
} }
if(key.compare("SamplesPerSec", Qt::CaseInsensitive) == 0) if(key.compare("SamplesPerSec", Qt::CaseInsensitive) == 0)
{ {
bool ok = false; bool ok = false;
unsigned int samplerate = val.toUInt(&ok); unsigned int samplerate = val.toUInt(&ok);
if(ok) info.setFormatAudioSamplerate (samplerate); if(ok) info.techInfo().setAudioSamplerate (samplerate);
} }
if(key.compare("Channels", Qt::CaseInsensitive) == 0) if(key.compare("Channels", Qt::CaseInsensitive) == 0)
{ {
bool ok = false; bool ok = false;
unsigned int channels = val.toUInt(&ok); unsigned int channels = val.toUInt(&ok);
if(ok) info.setFormatAudioChannels(channels); if(ok) info.techInfo().setAudioChannels(channels);
} }
if(key.compare("BitsPerSample", Qt::CaseInsensitive) == 0) if(key.compare("BitsPerSample", Qt::CaseInsensitive) == 0)
{ {
bool ok = false; bool ok = false;
unsigned int bitdepth = val.toUInt(&ok); unsigned int bitdepth = val.toUInt(&ok);
if(ok) info.setFormatAudioBitdepth(bitdepth); if(ok) info.techInfo().setAudioBitdepth(bitdepth);
} }
} }
} }
@ -584,8 +584,8 @@ bool AnalyzeTask::analyzeAvisynthFile(const QString &filePath, AudioFileModel &i
{ {
if(line.contains("[Audio Info]", Qt::CaseInsensitive)) if(line.contains("[Audio Info]", Qt::CaseInsensitive))
{ {
info.setFormatAudioType("Avisynth"); info.techInfo().setAudioType("Avisynth");
info.setFormatContainerType("Avisynth"); info.techInfo().setContainerType("Avisynth");
bInfoHeaderFound = true; bInfoHeaderFound = true;
} }
} }

View File

@ -46,7 +46,7 @@
#include <stdlib.h> #include <stdlib.h>
#define DIFF(X,Y) ((X > Y) ? (X-Y) : (Y-X)) #define DIFF(X,Y) ((X > Y) ? (X-Y) : (Y-X))
#define IS_WAVE(X) ((X.formatContainerType().compare("Wave", Qt::CaseInsensitive) == 0) && (X.formatAudioType().compare("PCM", Qt::CaseInsensitive) == 0)) #define IS_WAVE(X) ((X.containerType().compare("Wave", Qt::CaseInsensitive) == 0) && (X.audioType().compare("PCM", Qt::CaseInsensitive) == 0))
#define STRDEF(STR,DEF) ((!STR.isEmpty()) ? STR : DEF) #define STRDEF(STR,DEF) ((!STR.isEmpty()) ? STR : DEF)
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -202,10 +202,11 @@ void ProcessThread::processFile()
//------------------ //------------------
//Decode source file //Decode source file
//------------------ //------------------
if(!m_filters.isEmpty() || !m_encoder->isFormatSupported(m_audioFile.formatContainerType(), m_audioFile.formatContainerProfile(), m_audioFile.formatAudioType(), m_audioFile.formatAudioProfile(), m_audioFile.formatAudioVersion())) const AudioFileModel_TechInfo &formatInfo = m_audioFile.techInfo();
if(!m_filters.isEmpty() || !m_encoder->isFormatSupported(formatInfo.containerType(), formatInfo.containerProfile(), formatInfo.audioType(), formatInfo.audioProfile(), formatInfo.audioVersion()))
{ {
m_currentStep = DecodingStep; m_currentStep = DecodingStep;
AbstractDecoder *decoder = DecoderRegistry::lookup(m_audioFile.formatContainerType(), m_audioFile.formatContainerProfile(), m_audioFile.formatAudioType(), m_audioFile.formatAudioProfile(), m_audioFile.formatAudioVersion()); AbstractDecoder *decoder = DecoderRegistry::lookup(formatInfo.containerType(), formatInfo.containerProfile(), formatInfo.audioType(), formatInfo.audioProfile(), formatInfo.audioVersion());
if(decoder) if(decoder)
{ {
@ -220,8 +221,8 @@ void ProcessThread::processFile()
if(bSuccess) if(bSuccess)
{ {
sourceFile = tempFile; sourceFile = tempFile;
m_audioFile.setFormatContainerType(QString::fromLatin1("Wave")); m_audioFile.techInfo().setContainerType(QString::fromLatin1("Wave"));
m_audioFile.setFormatAudioType(QString::fromLatin1("PCM")); m_audioFile.techInfo().setAudioType(QString::fromLatin1("PCM"));
if(QFileInfo(sourceFile).size() >= 4294967296i64) if(QFileInfo(sourceFile).size() >= 4294967296i64)
{ {
@ -234,7 +235,7 @@ void ProcessThread::processFile()
else else
{ {
if(QFileInfo(m_outFileName).exists() && (QFileInfo(m_outFileName).size() < 512)) QFile::remove(m_outFileName); if(QFileInfo(m_outFileName).exists() && (QFileInfo(m_outFileName).size() < 512)) QFile::remove(m_outFileName);
handleMessage(QString("%1\n%2\n\n%3\t%4\n%5\t%6").arg(tr("The format of this file is NOT supported:"), m_audioFile.filePath(), tr("Container Format:"), m_audioFile.formatContainerInfo(), tr("Audio Format:"), m_audioFile.formatAudioCompressInfo())); handleMessage(QString("%1\n%2\n\n%3\t%4\n%5\t%6").arg(tr("The format of this file is NOT supported:"), m_audioFile.filePath(), tr("Container Format:"), m_audioFile.containerInfo(), tr("Audio Format:"), m_audioFile.audioCompressInfo()));
emit processStateChanged(m_jobId, tr("Unsupported!"), ProgressModel::JobFailed); emit processStateChanged(m_jobId, tr("Unsupported!"), ProgressModel::JobFailed);
emit processStateFinished(m_jobId, m_outFileName, 0); emit processStateFinished(m_jobId, m_outFileName, 0);
return; return;
@ -244,12 +245,12 @@ void ProcessThread::processFile()
//------------------------------------ //------------------------------------
//Update audio properties after decode //Update audio properties after decode
//------------------------------------ //------------------------------------
if(bSuccess && !m_aborted && IS_WAVE(m_audioFile)) if(bSuccess && !m_aborted && IS_WAVE(m_audioFile.techInfo()))
{ {
if(m_encoder->supportedSamplerates() || m_encoder->supportedBitdepths() || m_encoder->supportedChannelCount() || m_encoder->needsTimingInfo() || !m_filters.isEmpty()) if(m_encoder->supportedSamplerates() || m_encoder->supportedBitdepths() || m_encoder->supportedChannelCount() || m_encoder->needsTimingInfo() || !m_filters.isEmpty())
{ {
m_currentStep = AnalyzeStep; m_currentStep = AnalyzeStep;
bSuccess = m_propDetect->detect(sourceFile, &m_audioFile, &m_aborted); bSuccess = m_propDetect->detect(sourceFile, &m_audioFile.techInfo(), &m_aborted);
if(bSuccess) if(bSuccess)
{ {
@ -284,7 +285,7 @@ void ProcessThread::processFile()
connect(poFilter, SIGNAL(statusUpdated(int)), this, SLOT(handleUpdate(int)), Qt::DirectConnection); connect(poFilter, SIGNAL(statusUpdated(int)), this, SLOT(handleUpdate(int)), Qt::DirectConnection);
connect(poFilter, SIGNAL(messageLogged(QString)), this, SLOT(handleMessage(QString)), Qt::DirectConnection); connect(poFilter, SIGNAL(messageLogged(QString)), this, SLOT(handleMessage(QString)), Qt::DirectConnection);
if(poFilter->apply(sourceFile, tempFile, &m_audioFile, &m_aborted)) if(poFilter->apply(sourceFile, tempFile, &m_audioFile.techInfo(), &m_aborted))
{ {
sourceFile = tempFile; sourceFile = tempFile;
} }
@ -300,7 +301,7 @@ void ProcessThread::processFile()
if(bSuccess && !m_aborted) if(bSuccess && !m_aborted)
{ {
m_currentStep = EncodingStep; m_currentStep = EncodingStep;
bSuccess = m_encoder->encode(sourceFile, m_audioFile, m_outFileName, &m_aborted); bSuccess = m_encoder->encode(sourceFile, m_audioFile.metaInfo(), m_audioFile.techInfo().duration(), m_outFileName, &m_aborted);
} }
//Clean-up //Clean-up
@ -426,15 +427,7 @@ int ProcessThread::generateOutFileName(QString &outFileName)
} }
//Apply rename pattern //Apply rename pattern
QString fileName = m_renamePattern; QString fileName = applyRenamePattern(baseName, m_audioFile.metaInfo());
fileName.replace("<BaseName>", STRDEF(baseName, tr("Unknown File Name")), Qt::CaseInsensitive);
fileName.replace("<TrackNo>", QString().sprintf("%02d", m_audioFile.filePosition()), Qt::CaseInsensitive);
fileName.replace("<Title>", STRDEF(m_audioFile.fileName(), tr("Unknown Title")) , Qt::CaseInsensitive);
fileName.replace("<Artist>", STRDEF(m_audioFile.fileArtist(), tr("Unknown Artist")), Qt::CaseInsensitive);
fileName.replace("<Album>", STRDEF(m_audioFile.fileAlbum(), tr("Unknown Album")), Qt::CaseInsensitive);
fileName.replace("<Year>", QString().sprintf("%04d", m_audioFile.fileYear()), Qt::CaseInsensitive);
fileName.replace("<Comment>", STRDEF(m_audioFile.fileComment(), tr("Unknown Comment")), Qt::CaseInsensitive);
fileName = lamexp_clean_filename(fileName).simplified();
//Generate full output path //Generate full output path
outFileName = QString("%1/%2.%3").arg(targetDir.canonicalPath(), fileName, m_encoder->extension()); outFileName = QString("%1/%2.%3").arg(targetDir.canonicalPath(), fileName, m_encoder->extension());
@ -482,6 +475,22 @@ int ProcessThread::generateOutFileName(QString &outFileName)
return 1; return 1;
} }
QString ProcessThread::applyRenamePattern(const QString &baseName, const AudioFileModel_MetaInfo &metaInfo)
{
QString fileName = m_renamePattern;
fileName.replace("<BaseName>", STRDEF(baseName, tr("Unknown File Name")), Qt::CaseInsensitive);
fileName.replace("<TrackNo>", QString().sprintf("%02d", metaInfo.position()), Qt::CaseInsensitive);
fileName.replace("<Title>", STRDEF(metaInfo.title(), tr("Unknown Title")) , Qt::CaseInsensitive);
fileName.replace("<Artist>", STRDEF(metaInfo.artist(), tr("Unknown Artist")), Qt::CaseInsensitive);
fileName.replace("<Album>", STRDEF(metaInfo.album(), tr("Unknown Album")), Qt::CaseInsensitive);
fileName.replace("<Year>", QString().sprintf("%04d", metaInfo.year()), Qt::CaseInsensitive);
fileName.replace("<Comment>", STRDEF(metaInfo.comment(), tr("Unknown Comment")), Qt::CaseInsensitive);
fileName = lamexp_clean_filename(fileName).simplified();
return fileName;
}
QString ProcessThread::generateTempFileName(void) QString ProcessThread::generateTempFileName(void)
{ {
bool bOkay = false; bool bOkay = false;
@ -520,7 +529,7 @@ void ProcessThread::insertDownsampleFilter(void)
int targetBitDepth = 0; int targetBitDepth = 0;
/* Adjust sample rate */ /* Adjust sample rate */
if(m_encoder->supportedSamplerates() && m_audioFile.formatAudioSamplerate()) if(m_encoder->supportedSamplerates() && m_audioFile.techInfo().audioSamplerate())
{ {
bool applyDownsampling = true; bool applyDownsampling = true;
@ -539,7 +548,7 @@ void ProcessThread::insertDownsampleFilter(void)
if(applyDownsampling) if(applyDownsampling)
{ {
const unsigned int *supportedRates = m_encoder->supportedSamplerates(); const unsigned int *supportedRates = m_encoder->supportedSamplerates();
const unsigned int inputRate = m_audioFile.formatAudioSamplerate(); const unsigned int inputRate = m_audioFile.techInfo().audioSamplerate();
unsigned int currentDiff = UINT_MAX, minimumDiff = UINT_MAX, bestRate = UINT_MAX; unsigned int currentDiff = UINT_MAX, minimumDiff = UINT_MAX, bestRate = UINT_MAX;
//Find the most suitable supported sampling rate //Find the most suitable supported sampling rate
@ -562,9 +571,9 @@ void ProcessThread::insertDownsampleFilter(void)
} }
/* Adjust bit depth (word size) */ /* Adjust bit depth (word size) */
if(m_encoder->supportedBitdepths() && m_audioFile.formatAudioBitdepth()) if(m_encoder->supportedBitdepths() && m_audioFile.techInfo().audioBitdepth())
{ {
const unsigned int inputBPS = m_audioFile.formatAudioBitdepth(); const unsigned int inputBPS = m_audioFile.techInfo().audioBitdepth();
const unsigned int *supportedBPS = m_encoder->supportedBitdepths(); const unsigned int *supportedBPS = m_encoder->supportedBitdepths();
bool bAdjustBitdepth = true; bool bAdjustBitdepth = true;
@ -628,7 +637,7 @@ void ProcessThread::insertDownmixFilter(void)
{ {
bool requiresDownmix = true; bool requiresDownmix = true;
const unsigned int *supportedChannels = m_encoder->supportedChannelCount(); const unsigned int *supportedChannels = m_encoder->supportedChannelCount();
unsigned int channels = m_audioFile.formatAudioChannels(); unsigned int channels = m_audioFile.techInfo().audioChannels();
for(int i = 0; supportedChannels[i]; i++) for(int i = 0; supportedChannels[i]; i++)
{ {

View File

@ -78,6 +78,7 @@ private:
void processFile(); void processFile();
int generateOutFileName(QString &outFileName); int generateOutFileName(QString &outFileName);
QString applyRenamePattern(const QString &baseName, const AudioFileModel_MetaInfo &metaInfo);
QString generateTempFileName(void); QString generateTempFileName(void);
void insertDownmixFilter(void); void insertDownmixFilter(void);
void insertDownsampleFilter(void); void insertDownsampleFilter(void);

View File

@ -40,7 +40,7 @@ WaveProperties::~WaveProperties(void)
{ {
} }
bool WaveProperties::detect(const QString &sourceFile, AudioFileModel *info, volatile bool *abortFlag) bool WaveProperties::detect(const QString &sourceFile, AudioFileModel_TechInfo *info, volatile bool *abortFlag)
{ {
QProcess process; QProcess process;
QStringList args; QStringList args;
@ -89,21 +89,21 @@ bool WaveProperties::detect(const QString &sourceFile, AudioFileModel *info, vol
{ {
bool ok = false; bool ok = false;
unsigned int tmp = regExp_precision.cap(1).toUInt(&ok); unsigned int tmp = regExp_precision.cap(1).toUInt(&ok);
if(ok) info->setFormatAudioBitdepth(tmp); if(ok) info->setAudioBitdepth(tmp);
emit statusUpdated(qMin(progress += 25, 100)); emit statusUpdated(qMin(progress += 25, 100));
} }
if(regExp_encoding.lastIndexIn(text) >= 0) if(regExp_encoding.lastIndexIn(text) >= 0)
{ {
bool ok = false; bool ok = false;
unsigned int tmp = regExp_encoding.cap(1).toUInt(&ok); unsigned int tmp = regExp_encoding.cap(1).toUInt(&ok);
if(ok) info->setFormatAudioBitdepth((tmp == 32) ? AudioFileModel::BITDEPTH_IEEE_FLOAT32 : tmp); if(ok) info->setAudioBitdepth((tmp == 32) ? AudioFileModel::BITDEPTH_IEEE_FLOAT32 : tmp);
emit statusUpdated(qMin(progress += 25, 100)); emit statusUpdated(qMin(progress += 25, 100));
} }
if(regExp_samplerate.lastIndexIn(text) >= 0) if(regExp_samplerate.lastIndexIn(text) >= 0)
{ {
bool ok = false; bool ok = false;
unsigned int tmp = regExp_samplerate.cap(1).toUInt(&ok); unsigned int tmp = regExp_samplerate.cap(1).toUInt(&ok);
if(ok) info->setFormatAudioSamplerate(tmp); if(ok) info->setAudioSamplerate(tmp);
emit statusUpdated(qMin(progress += 25, 100)); emit statusUpdated(qMin(progress += 25, 100));
} }
if(regExp_duration.lastIndexIn(text) >= 0) if(regExp_duration.lastIndexIn(text) >= 0)
@ -115,7 +115,7 @@ bool WaveProperties::detect(const QString &sourceFile, AudioFileModel *info, vol
unsigned int tmp4 = regExp_duration.cap(4).toUInt(&ok[3]); unsigned int tmp4 = regExp_duration.cap(4).toUInt(&ok[3]);
if(ok[0] && ok[1] && ok[2] && ok[3]) if(ok[0] && ok[1] && ok[2] && ok[3])
{ {
info->setFileDuration((tmp1 * 3600) + (tmp2 * 60) + tmp3 + qRound(static_cast<double>(tmp4) / 100.0)); info->setDuration((tmp1 * 3600) + (tmp2 * 60) + tmp3 + qRound(static_cast<double>(tmp4) / 100.0));
} }
emit statusUpdated(qMin(progress += 25, 100)); emit statusUpdated(qMin(progress += 25, 100));
} }
@ -123,7 +123,7 @@ bool WaveProperties::detect(const QString &sourceFile, AudioFileModel *info, vol
{ {
bool ok = false; bool ok = false;
unsigned int tmp = regExp_channels.cap(1).toUInt(&ok); unsigned int tmp = regExp_channels.cap(1).toUInt(&ok);
if(ok) info->setFormatAudioChannels(tmp); if(ok) info->setAudioChannels(tmp);
emit statusUpdated(qMin(progress += 25, 100)); emit statusUpdated(qMin(progress += 25, 100));
} }
if(!text.isEmpty()) if(!text.isEmpty())

View File

@ -22,7 +22,7 @@
#include "Tool_Abstract.h" #include "Tool_Abstract.h"
class AudioFileModel; class AudioFileModel_TechInfo;
class WaveProperties : public AbstractTool class WaveProperties : public AbstractTool
{ {
@ -32,7 +32,7 @@ public:
WaveProperties(void); WaveProperties(void);
~WaveProperties(void); ~WaveProperties(void);
bool detect(const QString &sourceFile, AudioFileModel *info, volatile bool *abortFlag); bool detect(const QString &sourceFile, AudioFileModel_TechInfo *info, volatile bool *abortFlag);
private: private:
const QString m_binary; const QString m_binary;