Fix compilation after previous changes to AudioFileModel in previous commit.
This commit is contained in:
parent
feccffdfd1
commit
0435637c75
@ -34,7 +34,7 @@
|
||||
#define VER_LAMEXP_MINOR_LO 9
|
||||
#define VER_LAMEXP_TYPE Alpha
|
||||
#define VER_LAMEXP_PATCH 2
|
||||
#define VER_LAMEXP_BUILD 1378
|
||||
#define VER_LAMEXP_BUILD 1380
|
||||
#define VER_LAMEXP_CONFG 1348
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -315,7 +315,7 @@ void CueImportDialog::loadOtherButtonClicked(void)
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -2705,36 +2705,40 @@ void MainWindow::makeFolderButtonClicked(void)
|
||||
QDir basePath(m_fileSystemModel->fileInfo(ui->outputFolderView->currentIndex()).absoluteFilePath());
|
||||
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
|
||||
{
|
||||
for(int i = 0; i < m_fileListModel->rowCount(); i++)
|
||||
{
|
||||
AudioFileModel audioFile = m_fileListModel->getFile(m_fileListModel->index(i, 0));
|
||||
if(!audioFile.fileAlbum().isEmpty() || !audioFile.fileArtist().isEmpty())
|
||||
const AudioFileModel &audioFile = m_fileListModel->getFile(m_fileListModel->index(i, 0));
|
||||
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;
|
||||
}
|
||||
@ -3187,7 +3191,7 @@ void MainWindow::editMetaButtonClicked(void)
|
||||
|
||||
if(index.row() == 4)
|
||||
{
|
||||
m_settings->metaInfoPosition(m_metaData->filePosition());
|
||||
m_settings->metaInfoPosition(m_metaData->metaInfo().position());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -109,10 +109,10 @@ int MetaInfoDialog::exec(AudioFileModel &audioFile, bool allowUp, bool allowDown
|
||||
downButton->setEnabled(allowDown);
|
||||
buttonArtwork->setChecked(false);
|
||||
|
||||
if(!audioFile.fileCover().isEmpty())
|
||||
if(!audioFile.metaInfo().cover().isEmpty())
|
||||
{
|
||||
QImage artwork;
|
||||
if(artwork.load(audioFile.fileCover()))
|
||||
if(artwork.load(audioFile.metaInfo().cover()))
|
||||
{
|
||||
if((artwork.width() > 256) || (artwork.height() > 256))
|
||||
{
|
||||
|
@ -585,7 +585,7 @@ void ProcessingDialog::startNextJob(void)
|
||||
}
|
||||
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()]));
|
||||
}
|
||||
@ -964,10 +964,10 @@ void ProcessingDialog::writePlayList(void)
|
||||
int counter = 1;
|
||||
|
||||
//Generate playlist name
|
||||
QString playListName = (m_metaInfo->fileAlbum().isEmpty() ? "Playlist" : m_metaInfo->fileAlbum());
|
||||
if(!m_metaInfo->fileArtist().isEmpty())
|
||||
QString playListName = (m_metaInfo->metaInfo().album().isEmpty() ? "Playlist" : m_metaInfo->metaInfo().album());
|
||||
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
|
||||
@ -1031,22 +1031,22 @@ void ProcessingDialog::writePlayList(void)
|
||||
}
|
||||
}
|
||||
|
||||
AudioFileModel ProcessingDialog::updateMetaInfo(const AudioFileModel &audioFile)
|
||||
AudioFileModel ProcessingDialog::updateMetaInfo(AudioFileModel &audioFile)
|
||||
{
|
||||
if(!m_settings->writeMetaTags())
|
||||
{
|
||||
return AudioFileModel(audioFile, false);
|
||||
audioFile.metaInfo().reset();
|
||||
return audioFile;
|
||||
}
|
||||
|
||||
AudioFileModel result = audioFile;
|
||||
result.updateMetaInfo(*m_metaInfo);
|
||||
audioFile.metaInfo().update(m_metaInfo->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)
|
||||
|
@ -98,7 +98,7 @@ protected:
|
||||
private:
|
||||
Ui::ProcessingDialog *ui; //for Qt UIC
|
||||
|
||||
AudioFileModel updateMetaInfo(const AudioFileModel &audioFile);
|
||||
AudioFileModel updateMetaInfo(AudioFileModel &audioFile);
|
||||
void writePlayList(void);
|
||||
bool shutdownComputer(void);
|
||||
QString time2text(const double timeVal) const;
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
const QString baseName = QFileInfo(outputFile).fileName();
|
||||
@ -220,9 +218,9 @@ bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
|
||||
{
|
||||
bool ok = false;
|
||||
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)
|
||||
{
|
||||
emit statusUpdated(newProgress);
|
||||
@ -234,9 +232,9 @@ bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
|
||||
{
|
||||
bool ok = false;
|
||||
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)
|
||||
{
|
||||
emit statusUpdated(newProgress);
|
||||
@ -248,9 +246,9 @@ bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
|
||||
{
|
||||
bool ok = false;
|
||||
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)
|
||||
{
|
||||
emit statusUpdated(newProgress);
|
||||
@ -285,14 +283,14 @@ bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
|
||||
args.clear();
|
||||
args << QDir::toNativeSeparators(outputFile);
|
||||
|
||||
if(!metaInfo.fileName().isEmpty()) args << QString("-meta:title=%1").arg(cleanTag(metaInfo.fileName()));
|
||||
if(!metaInfo.fileArtist().isEmpty()) args << QString("-meta:artist=%1").arg(cleanTag(metaInfo.fileArtist()));
|
||||
if(!metaInfo.fileAlbum().isEmpty()) args << QString("-meta:album=%1").arg(cleanTag(metaInfo.fileAlbum()));
|
||||
if(!metaInfo.fileGenre().isEmpty()) args << QString("-meta:genre=%1").arg(cleanTag(metaInfo.fileGenre()));
|
||||
if(!metaInfo.fileComment().isEmpty()) args << QString("-meta:comment=%1").arg(cleanTag(metaInfo.fileComment()));
|
||||
if(metaInfo.fileYear()) args << QString("-meta:year=%1").arg(QString::number(metaInfo.fileYear()));
|
||||
if(metaInfo.filePosition()) args << QString("-meta:track=%1").arg(QString::number(metaInfo.filePosition()));
|
||||
if(!metaInfo.fileCover().isEmpty()) args << QString("-add-cover:%1:%2").arg("front", metaInfo.fileCover());
|
||||
if(!metaInfo.title().isEmpty()) args << QString("-meta:title=%1").arg(cleanTag(metaInfo.title()));
|
||||
if(!metaInfo.artist().isEmpty()) args << QString("-meta:artist=%1").arg(cleanTag(metaInfo.artist()));
|
||||
if(!metaInfo.album().isEmpty()) args << QString("-meta:album=%1").arg(cleanTag(metaInfo.album()));
|
||||
if(!metaInfo.genre().isEmpty()) args << QString("-meta:genre=%1").arg(cleanTag(metaInfo.genre()));
|
||||
if(!metaInfo.comment().isEmpty()) args << QString("-meta:comment=%1").arg(cleanTag(metaInfo.comment()));
|
||||
if(metaInfo.year()) args << QString("-meta:year=%1").arg(QString::number(metaInfo.year()));
|
||||
if(metaInfo.position()) args << QString("-meta:track=%1").arg(QString::number(metaInfo.position()));
|
||||
if(!metaInfo.cover().isEmpty()) args << QString("-add-cover:%1:%2").arg("front", metaInfo.cover());
|
||||
|
||||
if(!startProcess(process, m_binary_tag, args))
|
||||
{
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
virtual const bool needsTimingInfo(void);
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
virtual const unsigned int *supportedChannelCount(void);
|
||||
|
@ -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;
|
||||
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(!metaInfo.fileName().isEmpty()) args << "--title" << cleanTag(metaInfo.fileName());
|
||||
if(!metaInfo.fileArtist().isEmpty()) args << "--artist" << cleanTag(metaInfo.fileArtist());
|
||||
if(!metaInfo.fileAlbum().isEmpty()) args << "--album" << cleanTag(metaInfo.fileAlbum());
|
||||
if(!metaInfo.fileGenre().isEmpty()) args << "--genre" << cleanTag(metaInfo.fileGenre());
|
||||
if(!metaInfo.fileComment().isEmpty()) args << "--comment" << cleanTag( metaInfo.fileComment());
|
||||
if(metaInfo.fileYear()) args << "--date" << QString::number(metaInfo.fileYear());
|
||||
if(metaInfo.filePosition()) args << "--track" << QString::number(metaInfo.filePosition());
|
||||
if(!metaInfo.fileCover().isEmpty()) args << "--artwork" << metaInfo.fileCover();
|
||||
if(!metaInfo.title().isEmpty()) args << "--title" << cleanTag(metaInfo.title());
|
||||
if(!metaInfo.artist().isEmpty()) args << "--artist" << cleanTag(metaInfo.artist());
|
||||
if(!metaInfo.album().isEmpty()) args << "--album" << cleanTag(metaInfo.album());
|
||||
if(!metaInfo.genre().isEmpty()) args << "--genre" << cleanTag(metaInfo.genre());
|
||||
if(!metaInfo.comment().isEmpty()) args << "--comment" << cleanTag( metaInfo.comment());
|
||||
if(metaInfo.year()) args << "--date" << QString::number(metaInfo.year());
|
||||
if(metaInfo.position()) args << "--track" << QString::number(metaInfo.position());
|
||||
if(!metaInfo.cover().isEmpty()) args << "--artwork" << metaInfo.cover();
|
||||
|
||||
args << "-d" << ".";
|
||||
args << "-o" << QDir::toNativeSeparators(outputFile);
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
virtual const unsigned int *supportedChannelCount(void);
|
||||
|
@ -58,7 +58,7 @@ public:
|
||||
virtual ~AbstractEncoder(void);
|
||||
|
||||
//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 QString extension(void) = 0;
|
||||
virtual const unsigned int *supportedSamplerates(void);
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
virtual const unsigned int *supportedChannelCount(void);
|
||||
|
@ -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;
|
||||
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 << "--channel-map=none";
|
||||
|
||||
if(!metaInfo.fileName().isEmpty()) args << "-T" << QString("title=%1").arg(cleanTag(metaInfo.fileName()));
|
||||
if(!metaInfo.fileArtist().isEmpty()) args << "-T" << QString("artist=%1").arg(cleanTag(metaInfo.fileArtist()));
|
||||
if(!metaInfo.fileAlbum().isEmpty()) args << "-T" << QString("album=%1").arg(cleanTag(metaInfo.fileAlbum()));
|
||||
if(!metaInfo.fileGenre().isEmpty()) args << "-T" << QString("genre=%1").arg(cleanTag(metaInfo.fileGenre()));
|
||||
if(!metaInfo.fileComment().isEmpty()) args << "-T" << QString("comment=%1").arg(cleanTag(metaInfo.fileComment()));
|
||||
if(metaInfo.fileYear()) args << "-T" << QString("date=%1").arg(QString::number(metaInfo.fileYear()));
|
||||
if(metaInfo.filePosition()) args << "-T" << QString("track=%1").arg(QString::number(metaInfo.filePosition()));
|
||||
if(!metaInfo.fileCover().isEmpty()) args << QString("--picture=%1").arg(metaInfo.fileCover());
|
||||
if(!metaInfo.title().isEmpty()) args << "-T" << QString("title=%1").arg(cleanTag(metaInfo.title()));
|
||||
if(!metaInfo.artist().isEmpty()) args << "-T" << QString("artist=%1").arg(cleanTag(metaInfo.artist()));
|
||||
if(!metaInfo.album().isEmpty()) args << "-T" << QString("album=%1").arg(cleanTag(metaInfo.album()));
|
||||
if(!metaInfo.genre().isEmpty()) args << "-T" << QString("genre=%1").arg(cleanTag(metaInfo.genre()));
|
||||
if(!metaInfo.comment().isEmpty()) args << "-T" << QString("comment=%1").arg(cleanTag(metaInfo.comment()));
|
||||
if(metaInfo.year()) args << "-T" << QString("date=%1").arg(QString::number(metaInfo.year()));
|
||||
if(metaInfo.position()) args << "-T" << QString("track=%1").arg(QString::number(metaInfo.position()));
|
||||
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());
|
||||
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
virtual const unsigned int *supportedChannelCount(void);
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
@ -194,22 +194,22 @@ bool MP3Encoder::encode(const QString &sourceFile, const AudioFileModel &metaInf
|
||||
|
||||
bool bUseUCS2 = false;
|
||||
|
||||
if(!metaInfo.fileName().isEmpty() && isUnicode(metaInfo.fileName())) bUseUCS2 = true;
|
||||
if(!metaInfo.fileArtist().isEmpty() && isUnicode(metaInfo.fileArtist())) bUseUCS2 = true;
|
||||
if(!metaInfo.fileAlbum().isEmpty() && isUnicode(metaInfo.fileAlbum())) bUseUCS2 = true;
|
||||
if(!metaInfo.fileGenre().isEmpty() && isUnicode(metaInfo.fileGenre())) bUseUCS2 = true;
|
||||
if(!metaInfo.fileComment().isEmpty() && isUnicode(metaInfo.fileComment())) bUseUCS2 = true;
|
||||
if(!metaInfo.title().isEmpty() && isUnicode(metaInfo.title())) bUseUCS2 = true;
|
||||
if(!metaInfo.artist().isEmpty() && isUnicode(metaInfo.artist())) bUseUCS2 = true;
|
||||
if(!metaInfo.album().isEmpty() && isUnicode(metaInfo.album())) bUseUCS2 = true;
|
||||
if(!metaInfo.genre().isEmpty() && isUnicode(metaInfo.genre())) bUseUCS2 = true;
|
||||
if(!metaInfo.comment().isEmpty() && isUnicode(metaInfo.comment())) bUseUCS2 = true;
|
||||
|
||||
if(bUseUCS2) args << "--id3v2-ucs2"; //Must specify this BEFORE "--tt" and friends!
|
||||
|
||||
if(!metaInfo.fileName().isEmpty()) args << "--tt" << cleanTag(metaInfo.fileName());
|
||||
if(!metaInfo.fileArtist().isEmpty()) args << "--ta" << cleanTag(metaInfo.fileArtist());
|
||||
if(!metaInfo.fileAlbum().isEmpty()) args << "--tl" <<cleanTag( metaInfo.fileAlbum());
|
||||
if(!metaInfo.fileGenre().isEmpty()) args << "--tg" << cleanTag(metaInfo.fileGenre());
|
||||
if(!metaInfo.fileComment().isEmpty()) args << "--tc" << cleanTag(metaInfo.fileComment());
|
||||
if(metaInfo.fileYear()) args << "--ty" << QString::number(metaInfo.fileYear());
|
||||
if(metaInfo.filePosition()) args << "--tn" << QString::number(metaInfo.filePosition());
|
||||
if(!metaInfo.fileCover().isEmpty()) args << "--ti" << QDir::toNativeSeparators(metaInfo.fileCover());
|
||||
if(!metaInfo.title().isEmpty()) args << "--tt" << cleanTag(metaInfo.title());
|
||||
if(!metaInfo.artist().isEmpty()) args << "--ta" << cleanTag(metaInfo.artist());
|
||||
if(!metaInfo.album().isEmpty()) args << "--tl" <<cleanTag( metaInfo.album());
|
||||
if(!metaInfo.genre().isEmpty()) args << "--tg" << cleanTag(metaInfo.genre());
|
||||
if(!metaInfo.comment().isEmpty()) args << "--tc" << cleanTag(metaInfo.comment());
|
||||
if(metaInfo.year()) args << "--ty" << QString::number(metaInfo.year());
|
||||
if(metaInfo.position()) args << "--tn" << QString::number(metaInfo.position());
|
||||
if(!metaInfo.cover().isEmpty()) args << "--ti" << QDir::toNativeSeparators(metaInfo.cover());
|
||||
|
||||
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
|
||||
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
virtual const unsigned int *supportedChannelCount(void);
|
||||
|
@ -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;
|
||||
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));
|
||||
|
||||
if(!metaInfo.fileName().isEmpty()) args << "--title" << cleanTag(metaInfo.fileName());
|
||||
if(!metaInfo.fileArtist().isEmpty()) args << "--artist" << cleanTag(metaInfo.fileArtist());
|
||||
if(!metaInfo.fileAlbum().isEmpty()) args << "--album" << cleanTag(metaInfo.fileAlbum());
|
||||
if(!metaInfo.fileGenre().isEmpty()) args << "--genre" << cleanTag(metaInfo.fileGenre());
|
||||
if(metaInfo.fileYear()) args << "--date" << QString::number(metaInfo.fileYear());
|
||||
if(metaInfo.filePosition()) args << "--comment" << QString("tracknumber=%1").arg(QString::number(metaInfo.filePosition()));
|
||||
if(!metaInfo.fileComment().isEmpty()) args << "--comment" << QString("comment=%1").arg(cleanTag(metaInfo.fileComment()));
|
||||
if(!metaInfo.title().isEmpty()) args << "--title" << cleanTag(metaInfo.title());
|
||||
if(!metaInfo.artist().isEmpty()) args << "--artist" << cleanTag(metaInfo.artist());
|
||||
if(!metaInfo.album().isEmpty()) args << "--album" << cleanTag(metaInfo.album());
|
||||
if(!metaInfo.genre().isEmpty()) args << "--genre" << cleanTag(metaInfo.genre());
|
||||
if(metaInfo.year()) args << "--date" << QString::number(metaInfo.year());
|
||||
if(metaInfo.position()) args << "--comment" << QString("tracknumber=%1").arg(QString::number(metaInfo.position()));
|
||||
if(!metaInfo.comment().isEmpty()) args << "--comment" << QString("comment=%1").arg(cleanTag(metaInfo.comment()));
|
||||
|
||||
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
|
||||
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
virtual const unsigned int *supportedChannelCount(void);
|
||||
|
@ -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;
|
||||
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);
|
||||
}
|
||||
|
||||
if(!metaInfo.fileName().isEmpty()) args << "-t" << cleanTag(metaInfo.fileName());
|
||||
if(!metaInfo.fileArtist().isEmpty()) args << "-a" << cleanTag(metaInfo.fileArtist());
|
||||
if(!metaInfo.fileAlbum().isEmpty()) args << "-l" << cleanTag(metaInfo.fileAlbum());
|
||||
if(!metaInfo.fileGenre().isEmpty()) args << "-G" << cleanTag(metaInfo.fileGenre());
|
||||
if(!metaInfo.fileComment().isEmpty()) args << "-c" << QString("comment=%1").arg(cleanTag(metaInfo.fileComment()));
|
||||
if(metaInfo.fileYear()) args << "-d" << QString::number(metaInfo.fileYear());
|
||||
if(metaInfo.filePosition()) args << "-N" << QString::number(metaInfo.filePosition());
|
||||
if(!metaInfo.title().isEmpty()) args << "-t" << cleanTag(metaInfo.title());
|
||||
if(!metaInfo.artist().isEmpty()) args << "-a" << cleanTag(metaInfo.artist());
|
||||
if(!metaInfo.album().isEmpty()) args << "-l" << cleanTag(metaInfo.album());
|
||||
if(!metaInfo.genre().isEmpty()) args << "-G" << cleanTag(metaInfo.genre());
|
||||
if(!metaInfo.comment().isEmpty()) args << "-c" << QString("comment=%1").arg(cleanTag(metaInfo.comment()));
|
||||
if(metaInfo.year()) args << "-d" << QString::number(metaInfo.year());
|
||||
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());
|
||||
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
virtual void setBitrateLimits(int minimumBitrate, int maximumBitrate);
|
||||
|
@ -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;
|
||||
memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW));
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
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 QString extension(void);
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
#include "Tool_Abstract.h"
|
||||
|
||||
class AudioFileModel;
|
||||
class AudioFileModel_TechInfo;
|
||||
|
||||
class AbstractFilter : public AbstractTool
|
||||
{
|
||||
@ -34,6 +34,6 @@ public:
|
||||
~AbstractFilter(void);
|
||||
|
||||
//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;
|
||||
};
|
||||
|
||||
|
@ -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));
|
||||
|
||||
if(channels == 2)
|
||||
@ -156,6 +156,6 @@ bool DownmixFilter::apply(const QString &sourceFile, const QString &outputFile,
|
||||
return false;
|
||||
}
|
||||
|
||||
formatInfo->setFormatAudioChannels(2);
|
||||
formatInfo->setAudioChannels(2);
|
||||
return true;
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ public:
|
||||
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:
|
||||
const QString m_binary;
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
NormalizeFilter(int peakVolume = -50, int equalizationMode = 0);
|
||||
~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:
|
||||
const QString m_binary;
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
|
||||
if((m_samplingRate == formatInfo->formatAudioSamplerate()) && (m_bitDepth == formatInfo->formatAudioBitdepth()))
|
||||
if((m_samplingRate == formatInfo->audioSamplerate()) && (m_bitDepth == formatInfo->audioBitdepth()))
|
||||
{
|
||||
messageLogged("Skipping resample filter!");
|
||||
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;
|
||||
}
|
||||
|
||||
if(m_samplingRate) formatInfo->setFormatAudioSamplerate(m_samplingRate);
|
||||
if(m_bitDepth) formatInfo->setFormatAudioBitdepth(m_bitDepth);
|
||||
if(m_samplingRate) formatInfo->setAudioSamplerate(m_samplingRate);
|
||||
if(m_bitDepth) formatInfo->setAudioBitdepth(m_bitDepth);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
ResampleFilter(int samplingRate = 0, int bitDepth = 0);
|
||||
~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:
|
||||
const QString m_binary;
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
ToneAdjustFilter(int bass = 0, int treble = 0);
|
||||
~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:
|
||||
const QString m_binary;
|
||||
|
@ -40,6 +40,8 @@ public:
|
||||
void setFilePath(const QString &newPath, bool isOwner = true);
|
||||
void clear(void);
|
||||
|
||||
inline bool isEmpty(void) const { return (m_data != NULL); }
|
||||
|
||||
private:
|
||||
const QString m_nullString;
|
||||
ArtworkModel_SharedData *m_data;
|
||||
|
@ -51,7 +51,6 @@ AudioFileModel_MetaInfo::AudioFileModel_MetaInfo(const AudioFileModel_MetaInfo &
|
||||
m_cover = model.m_cover;
|
||||
m_year = model.m_year;
|
||||
m_position = model.m_position;
|
||||
m_duration = model.m_duration;
|
||||
}
|
||||
|
||||
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_year = model.m_year;
|
||||
m_position = model.m_position;
|
||||
m_duration = model.m_duration;
|
||||
|
||||
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)
|
||||
{
|
||||
/*nothing to do*/
|
||||
@ -84,7 +94,6 @@ void AudioFileModel_MetaInfo::reset(void)
|
||||
m_cover.clear();
|
||||
m_year = 0;
|
||||
m_position = 0;
|
||||
m_duration = 0;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -109,6 +118,7 @@ AudioFileModel_TechInfo::AudioFileModel_TechInfo(const AudioFileModel_TechInfo &
|
||||
m_audioBitdepth = model.m_audioBitdepth;
|
||||
m_audioBitrate = model.m_audioBitrate;
|
||||
m_audioBitrateMode = model.m_audioBitrateMode;
|
||||
m_duration = model.m_duration;
|
||||
}
|
||||
|
||||
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_audioBitrate = model.m_audioBitrate;
|
||||
m_audioBitrateMode = model.m_audioBitrateMode;
|
||||
m_duration = model.m_duration;
|
||||
|
||||
|
||||
return (*this);
|
||||
}
|
||||
@ -146,6 +158,7 @@ void AudioFileModel_TechInfo::reset(void)
|
||||
m_audioBitdepth = 0;
|
||||
m_audioBitrate = 0;
|
||||
m_audioBitrateMode = 0;
|
||||
m_duration = 0;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
@ -195,9 +208,9 @@ void AudioFileModel::reset(void)
|
||||
|
||||
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");
|
||||
}
|
||||
else
|
||||
|
@ -50,7 +50,6 @@ public:
|
||||
inline const QString &cover(void) const { return m_cover.filePath(); }
|
||||
inline unsigned int year(void) const { return m_year; }
|
||||
inline unsigned int position(void) const { return m_position; }
|
||||
inline unsigned int duration(void) const { return m_duration; }
|
||||
|
||||
//Setter
|
||||
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 setGenre(const QString &genre) { m_genre = genre.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 setPosition(const unsigned int position) { m_position = position; }
|
||||
inline void setDuration(const unsigned int duration) { m_duration = duration; }
|
||||
|
||||
//Reset
|
||||
void reset(void);
|
||||
|
||||
//Update
|
||||
void update(const AudioFileModel_MetaInfo &model);
|
||||
|
||||
private:
|
||||
QString m_titel;
|
||||
QString m_artist;
|
||||
@ -75,7 +76,6 @@ private:
|
||||
ArtworkModel m_cover;
|
||||
unsigned int m_year;
|
||||
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 audioBitrate(void) const { return m_audioBitrate; }
|
||||
inline unsigned int audioBitrateMode(void) const { return m_audioBitrateMode; }
|
||||
inline unsigned int duration(void) const { return m_duration; }
|
||||
|
||||
//Setter
|
||||
inline const QString &setContainerType(const QString &containerType) { m_containerType = containerType; }
|
||||
inline const QString &setContainerProfile(const QString &containerProfile) { m_containerProfile = containerProfile; }
|
||||
inline const QString &setAudioType(const QString &audioType) { m_audioType = audioType; }
|
||||
inline const QString &setAudioProfile(const QString &audioProfile) { m_audioProfile = audioProfile; }
|
||||
inline const QString &setAudioVersion(const QString &audioVersion) { m_audioVersion = audioVersion; }
|
||||
inline const QString &setAudioEncodeLib(const QString &audioEncodeLib) { m_audioEncodeLib = audioEncodeLib; }
|
||||
inline const QString &setContainerType(const QString &containerType) { m_containerType = containerType.trimmed(); }
|
||||
inline const QString &setContainerProfile(const QString &containerProfile) { m_containerProfile = containerProfile.trimmed(); }
|
||||
inline const QString &setAudioType(const QString &audioType) { m_audioType = audioType.trimmed(); }
|
||||
inline const QString &setAudioProfile(const QString &audioProfile) { m_audioProfile = audioProfile.trimmed(); }
|
||||
inline const QString &setAudioVersion(const QString &audioVersion) { m_audioVersion = audioVersion.trimmed(); }
|
||||
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 setAudioChannels(const unsigned int audioChannels) { m_audioChannels = audioChannels; }
|
||||
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 setAudioBitrateMode(const unsigned int audioBitrateMode) { m_audioBitrateMode = audioBitrateMode; }
|
||||
inline void setDuration(const unsigned int duration) { m_duration = duration; }
|
||||
|
||||
//Reset
|
||||
void reset(void);
|
||||
@ -134,6 +136,7 @@ private:
|
||||
unsigned int m_audioBitdepth;
|
||||
unsigned int m_audioBitrate;
|
||||
unsigned int m_audioBitrateMode;
|
||||
unsigned int m_duration;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -157,7 +160,7 @@ public:
|
||||
static const unsigned int BITDEPTH_IEEE_FLOAT32;
|
||||
|
||||
//Constructors & Destructor
|
||||
AudioFileModel(const QString &path);
|
||||
AudioFileModel(const QString &path = QString());
|
||||
AudioFileModel(const AudioFileModel &model);
|
||||
AudioFileModel &operator=(const AudioFileModel &model);
|
||||
~AudioFileModel(void);
|
||||
|
@ -70,7 +70,7 @@ QVariant FileListModel::data(const QModelIndex &index, int role) const
|
||||
switch(index.column())
|
||||
{
|
||||
case 0:
|
||||
return m_fileStore.value(m_fileList.at(index.row())).fileName();
|
||||
return m_fileStore.value(m_fileList.at(index.row())).metaInfo().title();
|
||||
break;
|
||||
case 1:
|
||||
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))
|
||||
{
|
||||
AudioFileModel audioFile(fileInfo.canonicalFilePath());
|
||||
audioFile.metaInfo().setTitle(fileInfo.baseName());
|
||||
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);
|
||||
if(flag) endInsertRows();
|
||||
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())
|
||||
{
|
||||
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
|
||||
{
|
||||
return AudioFileModel();
|
||||
return m_nullAudioFile;
|
||||
}
|
||||
}
|
||||
|
||||
@ -251,15 +253,16 @@ int FileListModel::exportToCsv(const QString &outFile)
|
||||
|
||||
for(int i = 0; i < nFiles; i++)
|
||||
{
|
||||
AudioFileModel current = m_fileStore.value(m_fileList.at(i));
|
||||
const AudioFileModel ¤t = m_fileStore.value(m_fileList.at(i));
|
||||
const AudioFileModel_MetaInfo &metaInfo = current.metaInfo();
|
||||
|
||||
if(current.filePosition() > 0) havePosition = true;
|
||||
if(!current.fileName().isEmpty()) haveTitle = true;
|
||||
if(!current.fileArtist().isEmpty()) haveArtist = true;
|
||||
if(!current.fileAlbum().isEmpty()) haveAlbum = true;
|
||||
if(!current.fileGenre().isEmpty()) haveGenre = true;
|
||||
if(current.fileYear() > 0) haveYear = true;
|
||||
if(!current.fileComment().isEmpty()) haveComment = true;
|
||||
if(metaInfo.position() > 0) havePosition = true;
|
||||
if(!metaInfo.title().isEmpty()) haveTitle = true;
|
||||
if(!metaInfo.artist().isEmpty()) haveArtist = true;
|
||||
if(!metaInfo.album().isEmpty()) haveAlbum = true;
|
||||
if(!metaInfo.genre().isEmpty()) haveGenre = true;
|
||||
if(metaInfo.year() > 0) haveYear = true;
|
||||
if(!metaInfo.comment().isEmpty()) haveComment = true;
|
||||
}
|
||||
|
||||
if(!(haveTitle || haveArtist || haveAlbum || haveGenre || haveYear || haveComment))
|
||||
@ -295,15 +298,16 @@ int FileListModel::exportToCsv(const QString &outFile)
|
||||
for(int i = 0; i < nFiles; i++)
|
||||
{
|
||||
QStringList line;
|
||||
AudioFileModel current = m_fileStore.value(m_fileList.at(i));
|
||||
const AudioFileModel ¤t = m_fileStore.value(m_fileList.at(i));
|
||||
const AudioFileModel_MetaInfo &metaInfo = current.metaInfo();
|
||||
|
||||
if(havePosition) line << QString::number(current.filePosition());
|
||||
if(haveTitle) line << current.fileName().trimmed();
|
||||
if(haveArtist) line << current.fileArtist().trimmed();
|
||||
if(haveAlbum) line << current.fileAlbum().trimmed();
|
||||
if(haveGenre) line << current.fileGenre().trimmed();
|
||||
if(haveYear) line << QString::number(current.fileYear());
|
||||
if(haveComment) line << current.fileComment().trimmed();
|
||||
if(havePosition) line << QString::number(metaInfo.position());
|
||||
if(haveTitle) line << metaInfo.title().trimmed();
|
||||
if(haveArtist) line << metaInfo.artist().trimmed();
|
||||
if(haveAlbum) line << metaInfo.album().trimmed();
|
||||
if(haveGenre) line << metaInfo.genre().trimmed();
|
||||
if(haveYear) line << QString::number(metaInfo.year());
|
||||
if(haveComment) line << metaInfo.comment().trimmed();
|
||||
|
||||
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;
|
||||
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"))
|
||||
{
|
||||
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"))
|
||||
{
|
||||
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"))
|
||||
{
|
||||
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"))
|
||||
{
|
||||
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"))
|
||||
{
|
||||
bool ok = false;
|
||||
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"))
|
||||
{
|
||||
QString temp = data.at(j).trimmed();
|
||||
if(!temp.isEmpty()) m_fileStore[key].setFileComment(temp);
|
||||
if(!temp.isEmpty()) m_fileStore[key].metaInfo().setComment(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
bool removeFile(const QModelIndex &index);
|
||||
void clearFiles(void);
|
||||
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);
|
||||
AudioFileModel &operator[] (const QModelIndex &index);
|
||||
|
||||
@ -72,6 +72,8 @@ public:
|
||||
if(!flag) reset();
|
||||
}
|
||||
|
||||
const AudioFileModel m_nullAudioFile;
|
||||
|
||||
public slots:
|
||||
void addFile(const QString &filePath);
|
||||
void addFile(const AudioFileModel &file);
|
||||
|
@ -81,37 +81,37 @@ QVariant MetaInfoModel::data(const QModelIndex &index, int role) const
|
||||
return (!index.column()) ? tr("Full Path") : CHECK1(m_audioFile->filePath());
|
||||
break;
|
||||
case 1:
|
||||
return (!index.column()) ? tr("Format") : CHECK1(m_audioFile->formatAudioBaseInfo());
|
||||
return (!index.column()) ? tr("Format") : CHECK1(m_audioFile->audioBaseInfo());
|
||||
break;
|
||||
case 2:
|
||||
return (!index.column()) ? tr("Container") : CHECK1(m_audioFile->formatContainerInfo());
|
||||
return (!index.column()) ? tr("Container") : CHECK1(m_audioFile->containerInfo());
|
||||
break;
|
||||
case 3:
|
||||
return (!index.column()) ? tr("Compression") : CHECK1(m_audioFile->formatAudioCompressInfo());
|
||||
return (!index.column()) ? tr("Compression") : CHECK1(m_audioFile->audioCompressInfo());
|
||||
break;
|
||||
case 4:
|
||||
return (!index.column()) ? tr("Duration") : CHECK1(m_audioFile->fileDurationInfo());
|
||||
return (!index.column()) ? tr("Duration") : CHECK1(m_audioFile->durationInfo());
|
||||
break;
|
||||
case 5:
|
||||
return (!index.column()) ? tr("Title") : CHECK1(m_audioFile->fileName());
|
||||
return (!index.column()) ? tr("Title") : CHECK1(m_audioFile->metaInfo().title());
|
||||
break;
|
||||
case 6:
|
||||
return (!index.column()) ? tr("Artist") : CHECK1(m_audioFile->fileArtist());
|
||||
return (!index.column()) ? tr("Artist") : CHECK1(m_audioFile->metaInfo().artist());
|
||||
break;
|
||||
case 7:
|
||||
return (!index.column()) ? tr("Album") : CHECK1(m_audioFile->fileAlbum());
|
||||
return (!index.column()) ? tr("Album") : CHECK1(m_audioFile->metaInfo().album());
|
||||
break;
|
||||
case 8:
|
||||
return (!index.column()) ? tr("Genre") : CHECK1(m_audioFile->fileGenre());
|
||||
return (!index.column()) ? tr("Genre") : CHECK1(m_audioFile->metaInfo().genre());
|
||||
break;
|
||||
case 9:
|
||||
return (!index.column()) ? tr("Year") : CHECK2(m_audioFile->fileYear());
|
||||
return (!index.column()) ? tr("Year") : CHECK2(m_audioFile->metaInfo().year());
|
||||
break;
|
||||
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;
|
||||
case 11:
|
||||
return (!index.column()) ? tr("Comment") : CHECK1(m_audioFile->fileComment());
|
||||
return (!index.column()) ? tr("Comment") : CHECK1(m_audioFile->metaInfo().comment());
|
||||
break;
|
||||
default:
|
||||
return QVariant();
|
||||
@ -171,37 +171,37 @@ QVariant MetaInfoModel::data(const QModelIndex &index, int role) const
|
||||
return CHECK3(m_audioFile->filePath());
|
||||
break;
|
||||
case 1:
|
||||
return CHECK3(m_audioFile->formatAudioBaseInfo());
|
||||
return CHECK3(m_audioFile->audioBaseInfo());
|
||||
break;
|
||||
case 2:
|
||||
return CHECK3(m_audioFile->formatContainerInfo());
|
||||
return CHECK3(m_audioFile->containerInfo());
|
||||
break;
|
||||
case 3:
|
||||
return CHECK3(m_audioFile->formatAudioCompressInfo());
|
||||
return CHECK3(m_audioFile->audioCompressInfo());
|
||||
break;
|
||||
case 4:
|
||||
return CHECK4(m_audioFile->fileDurationInfo());
|
||||
return CHECK4(m_audioFile->durationInfo());
|
||||
break;
|
||||
case 5:
|
||||
return CHECK3(m_audioFile->fileName());
|
||||
return CHECK3(m_audioFile->metaInfo().title());
|
||||
break;
|
||||
case 6:
|
||||
return CHECK3(m_audioFile->fileArtist());
|
||||
return CHECK3(m_audioFile->metaInfo().artist());
|
||||
break;
|
||||
case 7:
|
||||
return CHECK3(m_audioFile->fileAlbum());
|
||||
return CHECK3(m_audioFile->metaInfo().album());
|
||||
break;
|
||||
case 8:
|
||||
return CHECK3(m_audioFile->fileGenre());
|
||||
return CHECK3(m_audioFile->metaInfo().genre());
|
||||
break;
|
||||
case 9:
|
||||
return CHECK4(m_audioFile->fileYear());
|
||||
return CHECK4(m_audioFile->metaInfo().year());
|
||||
break;
|
||||
case 10:
|
||||
return CHECK4(m_audioFile->filePosition());
|
||||
return CHECK4(m_audioFile->metaInfo().position());
|
||||
break;
|
||||
case 11:
|
||||
return CHECK3(m_audioFile->fileComment());
|
||||
return CHECK3(m_audioFile->metaInfo().comment());
|
||||
break;
|
||||
default:
|
||||
return QVariant();
|
||||
@ -262,28 +262,28 @@ bool MetaInfoModel::setData (const QModelIndex &index, const QVariant &value, in
|
||||
return false;
|
||||
break;
|
||||
case 4:
|
||||
m_audioFile->setFileDuration(value.toUInt());
|
||||
m_audioFile->techInfo().setDuration(value.toUInt());
|
||||
break;
|
||||
case 5:
|
||||
m_audioFile->setFileName(value.toString());
|
||||
m_audioFile->metaInfo().setTitle(value.toString());
|
||||
break;
|
||||
case 6:
|
||||
m_audioFile->setFileArtist(value.toString());
|
||||
m_audioFile->metaInfo().setArtist(value.toString());
|
||||
break;
|
||||
case 7:
|
||||
m_audioFile->setFileAlbum(value.toString());
|
||||
m_audioFile->metaInfo().setAlbum(value.toString());
|
||||
break;
|
||||
case 8:
|
||||
m_audioFile->setFileGenre(value.toString());
|
||||
m_audioFile->metaInfo().setGenre(value.toString());
|
||||
break;
|
||||
case 9:
|
||||
m_audioFile->setFileYear(value.toUInt());
|
||||
m_audioFile->metaInfo().setYear(value.toUInt());
|
||||
break;
|
||||
case 10:
|
||||
m_audioFile->setFilePosition(value.toUInt());
|
||||
m_audioFile->metaInfo().setPosition(value.toUInt());
|
||||
break;
|
||||
case 11:
|
||||
m_audioFile->setFileComment(value.toString());
|
||||
m_audioFile->metaInfo().setComment(value.toString());
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
@ -311,7 +311,7 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
|
||||
case 5:
|
||||
input.setWindowTitle(tr("Edit Title"));
|
||||
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)
|
||||
{
|
||||
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();
|
||||
}
|
||||
beginResetModel();
|
||||
m_audioFile->setFileName(temp.isEmpty() ? QString() : temp);
|
||||
m_audioFile->metaInfo().setTitle(temp.isEmpty() ? QString() : temp);
|
||||
endResetModel();
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
input.setWindowTitle(tr("Edit Artist"));
|
||||
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)
|
||||
{
|
||||
temp = input.textValue().simplified();
|
||||
beginResetModel();
|
||||
m_audioFile->setFileArtist(temp.isEmpty() ? QString() : temp);
|
||||
m_audioFile->metaInfo().setArtist(temp.isEmpty() ? QString() : temp);
|
||||
endResetModel();
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
input.setWindowTitle(tr("Edit Album"));
|
||||
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)
|
||||
{
|
||||
temp = input.textValue().simplified();
|
||||
beginResetModel();
|
||||
m_audioFile->setFileAlbum(temp.isEmpty() ? QString() : temp);
|
||||
m_audioFile->metaInfo().setAlbum(temp.isEmpty() ? QString() : temp);
|
||||
endResetModel();
|
||||
}
|
||||
break;
|
||||
@ -356,12 +356,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
|
||||
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];
|
||||
input.setComboBoxItems(generes);
|
||||
input.setTextValue(m_audioFile->fileGenre());
|
||||
input.setTextValue(m_audioFile->metaInfo().genre());
|
||||
if(input.exec() != 0)
|
||||
{
|
||||
temp = input.textValue().simplified();
|
||||
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();
|
||||
}
|
||||
break;
|
||||
@ -369,13 +369,13 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
|
||||
input.setWindowTitle(tr("Edit Year"));
|
||||
input.setLabelText(EXPAND(tr("Please enter the year for this file:")));
|
||||
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);
|
||||
if(input.exec() != 0)
|
||||
{
|
||||
val = input.intValue();
|
||||
beginResetModel();
|
||||
m_audioFile->setFileYear(val);
|
||||
m_audioFile->metaInfo().setYear(val);
|
||||
endResetModel();
|
||||
}
|
||||
break;
|
||||
@ -385,13 +385,13 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
|
||||
input.setWindowTitle(tr("Edit Position"));
|
||||
input.setLabelText(EXPAND(tr("Please enter the position (track no.) for this file:")));
|
||||
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);
|
||||
if(input.exec() != 0)
|
||||
{
|
||||
val = input.intValue();
|
||||
beginResetModel();
|
||||
m_audioFile->setFilePosition(val);
|
||||
m_audioFile->metaInfo().setPosition(val);
|
||||
endResetModel();
|
||||
}
|
||||
}
|
||||
@ -402,12 +402,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
|
||||
input.setWindowTitle(tr("Edit Position"));
|
||||
input.setLabelText(EXPAND(tr("Please enter the position (track no.) for this file:")));
|
||||
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)
|
||||
{
|
||||
temp = input.textValue().simplified();
|
||||
beginResetModel();
|
||||
m_audioFile->setFilePosition((options.indexOf(temp) == 1) ? UINT_MAX : 0);
|
||||
m_audioFile->metaInfo().setPosition((options.indexOf(temp) == 1) ? UINT_MAX : 0);
|
||||
endResetModel();
|
||||
}
|
||||
}
|
||||
@ -415,12 +415,12 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
|
||||
case 11:
|
||||
input.setWindowTitle(tr("Edit Comment"));
|
||||
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)
|
||||
{
|
||||
temp = input.textValue().simplified();
|
||||
beginResetModel();
|
||||
m_audioFile->setFileComment(temp.isEmpty() ? QString() : temp);
|
||||
m_audioFile->metaInfo().setComment(temp.isEmpty() ? QString() : temp);
|
||||
endResetModel();
|
||||
}
|
||||
break;
|
||||
@ -432,7 +432,7 @@ void MetaInfoModel::editItem(const QModelIndex &index, QWidget *parent)
|
||||
|
||||
void MetaInfoModel::editArtwork(const QString &imagePath)
|
||||
{
|
||||
m_audioFile->setFileCover(imagePath, false);
|
||||
m_audioFile->metaInfo().setCover(imagePath, false);
|
||||
}
|
||||
|
||||
void MetaInfoModel::clearData(bool clearMetaOnly)
|
||||
@ -442,33 +442,39 @@ void MetaInfoModel::clearData(bool clearMetaOnly)
|
||||
m_textUnknown = QString("(%1)").arg(tr("Unknown"));
|
||||
m_textNotSpecified = QString("(%1)").arg(tr("Not Specified"));
|
||||
|
||||
m_audioFile->setFileArtist(QString());
|
||||
m_audioFile->setFileAlbum(QString());
|
||||
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);
|
||||
m_audioFile->metaInfo().reset();
|
||||
m_audioFile->metaInfo().setComment(tr("Encoded with LameXP"));
|
||||
m_audioFile->metaInfo().setPosition(m_offset ? UINT_MAX : 0);
|
||||
|
||||
//m_audioFile->setFileArtist(QString());
|
||||
//m_audioFile->setFileAlbum(QString());
|
||||
//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)
|
||||
{
|
||||
m_audioFile->setFilePath(QString());
|
||||
m_audioFile->setFileName(QString());
|
||||
m_audioFile->setFileDuration(0);
|
||||
m_audioFile->setFormatContainerType(QString());
|
||||
m_audioFile->setFormatContainerProfile(QString());
|
||||
m_audioFile->setFormatAudioType(QString());
|
||||
m_audioFile->setFormatAudioProfile(QString());
|
||||
m_audioFile->setFormatAudioVersion(QString());
|
||||
m_audioFile->setFormatAudioSamplerate(0);
|
||||
m_audioFile->setFormatAudioChannels(0);
|
||||
m_audioFile->setFormatAudioBitdepth(0);
|
||||
m_audioFile->techInfo().reset();
|
||||
|
||||
//m_audioFile->setFilePath(QString());
|
||||
//m_audioFile->setFileName(QString());
|
||||
//m_audioFile->setFileDuration(0);
|
||||
//m_audioFile->setFormatContainerType(QString());
|
||||
//m_audioFile->setFormatContainerProfile(QString());
|
||||
//m_audioFile->setFormatAudioType(QString());
|
||||
//m_audioFile->setFormatAudioProfile(QString());
|
||||
//m_audioFile->setFormatAudioVersion(QString());
|
||||
//m_audioFile->setFormatAudioSamplerate(0);
|
||||
//m_audioFile->setFormatAudioChannels(0);
|
||||
//m_audioFile->setFormatAudioBitdepth(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
QString temp = QFileInfo(m_audioFile->filePath()).baseName();
|
||||
temp = temp.split("-", QString::SkipEmptyParts).last().trimmed();
|
||||
m_audioFile->setFileName(temp);
|
||||
m_audioFile->metaInfo().setTitle(temp);
|
||||
}
|
||||
|
||||
endResetModel();
|
||||
@ -479,9 +485,9 @@ Qt::ItemFlags MetaInfoModel::flags(const QModelIndex &index) const
|
||||
return QAbstractTableModel::flags(index);
|
||||
}
|
||||
|
||||
void MetaInfoModel::assignInfoFrom(AudioFileModel &file)
|
||||
void MetaInfoModel::assignInfoFrom(const AudioFileModel &file)
|
||||
{
|
||||
beginResetModel();
|
||||
m_audioFile->updateMetaInfo(file);
|
||||
m_audioFile->metaInfo().update(file.metaInfo());
|
||||
endResetModel();
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public:
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
void editItem(const QModelIndex &index, QWidget *parent);
|
||||
void editArtwork(const QString &imagePath);
|
||||
void assignInfoFrom(AudioFileModel &file);
|
||||
void assignInfoFrom(const AudioFileModel &file);
|
||||
void clearData(bool clearMetaOnly = false);
|
||||
|
||||
private:
|
||||
|
@ -108,10 +108,10 @@ void CueSplitter::run()
|
||||
//Decompress all input files
|
||||
for(int i = 0; i < nInputFiles; i++)
|
||||
{
|
||||
AudioFileModel &inputFileInfo = m_inputFilesInfo[inputFileList.at(i)];
|
||||
if(inputFileInfo.formatContainerType().compare("Wave", Qt::CaseInsensitive) || inputFileInfo.formatAudioType().compare("PCM", Qt::CaseInsensitive))
|
||||
const AudioFileModel_TechInfo &inputFileInfo = m_inputFilesInfo[inputFileList.at(i)].techInfo();
|
||||
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)
|
||||
{
|
||||
m_activeFile = shortName(QFileInfo(inputFileList.at(i)).fileName());
|
||||
@ -193,41 +193,42 @@ void CueSplitter::run()
|
||||
}
|
||||
|
||||
//Setup meta info
|
||||
AudioFileModel trackMetaInfo(QString().sprintf("cue://File%02d/Track%02d", i, j));
|
||||
trackMetaInfo.setFileName(m_model->getTrackTitle(i, j));
|
||||
trackMetaInfo.setFileArtist(m_model->getTrackPerformer(i, j));
|
||||
trackMetaInfo.setFileGenre(m_model->getTrackGenre(i, j));
|
||||
trackMetaInfo.setFileYear(m_model->getTrackYear(i, j));
|
||||
trackMetaInfo.setFilePosition(trackNo);
|
||||
AudioFileModel_MetaInfo trackMetaInfo; /*QString().sprintf("cue://File%02d/Track%02d", i, j)*/;
|
||||
trackMetaInfo.setTitle(m_model->getTrackTitle(i, j));
|
||||
trackMetaInfo.setArtist(m_model->getTrackPerformer(i, j));
|
||||
trackMetaInfo.setGenre(m_model->getTrackGenre(i, j));
|
||||
trackMetaInfo.setYear(m_model->getTrackYear(i, j));
|
||||
trackMetaInfo.setPosition(trackNo);
|
||||
|
||||
//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())
|
||||
{
|
||||
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))
|
||||
{
|
||||
trackMetaInfo.setFileDuration(static_cast<unsigned int>(abs(trackLength)));
|
||||
//FIXME !!!
|
||||
//trackMetaInfo.setDuration(static_cast<unsigned int>(abs(trackLength)));
|
||||
}
|
||||
|
||||
//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));
|
||||
for(int n = 2; QFileInfo(outputFile).exists(); n++)
|
||||
{
|
||||
@ -264,14 +265,14 @@ void CueSplitter::handleUpdate(int progress)
|
||||
// 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("File: <%s>", file.toUtf8().constData());
|
||||
qDebug("Offset: <%f> <%s>", offset, indexToString(offset).toLatin1().constData());
|
||||
qDebug("Length: <%f> <%s>", length, indexToString(length).toLatin1().constData());
|
||||
qDebug("Artist: <%s>", metaInfo.fileArtist().toUtf8().constData());
|
||||
qDebug("Title: <%s>", metaInfo.fileName().toUtf8().constData());
|
||||
qDebug("Artist: <%s>", metaInfo.artist().toUtf8().constData());
|
||||
qDebug("Title: <%s>", metaInfo.title().toUtf8().constData());
|
||||
|
||||
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)));
|
||||
|
||||
AudioFileModel outFileInfo(metaInfo);
|
||||
AudioFileModel outFileInfo;
|
||||
outFileInfo.setMetaInfo(metaInfo);
|
||||
outFileInfo.setFilePath(output);
|
||||
outFileInfo.setFormatContainerType("Wave");
|
||||
outFileInfo.setFormatAudioType("PCM");
|
||||
outFileInfo.techInfo().setContainerType("Wave");
|
||||
outFileInfo.techInfo().setAudioType("PCM");
|
||||
|
||||
QStringList args;
|
||||
args << "-S" << "-V3";
|
||||
@ -364,19 +366,19 @@ void CueSplitter::splitFile(const QString &output, const int trackNo, const QStr
|
||||
{
|
||||
bool ok = false;
|
||||
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)
|
||||
{
|
||||
bool ok = false;
|
||||
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)
|
||||
{
|
||||
bool ok = false;
|
||||
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)
|
||||
{
|
||||
@ -392,7 +394,7 @@ void CueSplitter::splitFile(const QString &output, const int trackNo, const QStr
|
||||
qDebug("Duration updated from SoX info!");
|
||||
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!");
|
||||
outFileInfo.setFileDuration(qMax(0, duration));
|
||||
outFileInfo.techInfo().setDuration(qMax(0, duration));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <QMap>
|
||||
|
||||
class AudioFileModel;
|
||||
class AudioFileModel_MetaInfo;
|
||||
class CueSheetModel;
|
||||
class QFile;
|
||||
class QDir;
|
||||
@ -62,7 +63,7 @@ public slots:
|
||||
void abortProcess(void) { m_abortFlag = true; }
|
||||
|
||||
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 shortName(const QString &longName) const;
|
||||
|
||||
|
@ -107,7 +107,7 @@ void AnalyzeTask::run_ex(void)
|
||||
qWarning("Dummy CDDA file detected, skipping!");
|
||||
break;
|
||||
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;
|
||||
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();
|
||||
int index = baseName.lastIndexOf(".");
|
||||
@ -245,7 +245,7 @@ const AudioFileModel AnalyzeTask::analyzeFile(const QString &filePath, int *type
|
||||
baseName = baseName.mid(index + 3).trimmed();
|
||||
}
|
||||
|
||||
audioFile.setFileName(baseName);
|
||||
audioFile.metaInfo().setTitle(baseName);
|
||||
}
|
||||
|
||||
process.waitForFinished();
|
||||
@ -260,9 +260,9 @@ const AudioFileModel AnalyzeTask::analyzeFile(const QString &filePath, int *type
|
||||
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;
|
||||
@ -311,8 +311,8 @@ void AnalyzeTask::updateInfo(AudioFileModel &audioFile, bool *skipNext, unsigned
|
||||
if(IS_KEY("Aud_Source"))
|
||||
{
|
||||
*skipNext = true;
|
||||
audioFile.setFormatContainerType(QString());
|
||||
audioFile.setFormatAudioType(QString());
|
||||
audioFile.techInfo().setContainerType(QString());
|
||||
audioFile.techInfo().setAudioType(QString());
|
||||
qWarning("Skipping info for playlist file!");
|
||||
return;
|
||||
}
|
||||
@ -322,47 +322,47 @@ void AnalyzeTask::updateInfo(AudioFileModel &audioFile, bool *skipNext, unsigned
|
||||
{
|
||||
if(IS_KEY("Gen_Format"))
|
||||
{
|
||||
audioFile.setFormatContainerType(value);
|
||||
audioFile.techInfo().setContainerType(value);
|
||||
}
|
||||
else if(IS_KEY("Gen_Format_Profile"))
|
||||
{
|
||||
audioFile.setFormatContainerProfile(value);
|
||||
audioFile.techInfo().setContainerProfile(value);
|
||||
}
|
||||
else if(IS_KEY("Gen_Title") || IS_KEY("Gen_Track"))
|
||||
{
|
||||
audioFile.setFileName(value);
|
||||
audioFile.metaInfo().setTitle(value);
|
||||
}
|
||||
else if(IS_KEY("Gen_Duration"))
|
||||
{
|
||||
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"))
|
||||
{
|
||||
audioFile.setFileArtist(value);
|
||||
audioFile.metaInfo().setArtist(value);
|
||||
}
|
||||
else if(IS_KEY("Gen_Album"))
|
||||
{
|
||||
audioFile.setFileAlbum(value);
|
||||
audioFile.metaInfo().setAlbum(value);
|
||||
}
|
||||
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"))
|
||||
{
|
||||
unsigned int tmp = parseYear(value);
|
||||
if(tmp > 0) audioFile.setFileYear(tmp);
|
||||
if(tmp > 0) audioFile.metaInfo().setYear(tmp);
|
||||
}
|
||||
else if(IS_KEY("Gen_Comment"))
|
||||
{
|
||||
audioFile.setFileComment(value);
|
||||
audioFile.metaInfo().setComment(value);
|
||||
}
|
||||
else if(IS_KEY("Gen_Track/Position"))
|
||||
{
|
||||
bool ok = false;
|
||||
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"))
|
||||
{
|
||||
@ -396,53 +396,53 @@ void AnalyzeTask::updateInfo(AudioFileModel &audioFile, bool *skipNext, unsigned
|
||||
|
||||
if(IS_KEY("Aud_Format"))
|
||||
{
|
||||
audioFile.setFormatAudioType(value);
|
||||
audioFile.techInfo().setAudioType(value);
|
||||
}
|
||||
else if(IS_KEY("Aud_Format_Profile"))
|
||||
{
|
||||
audioFile.setFormatAudioProfile(value);
|
||||
audioFile.techInfo().setAudioProfile(value);
|
||||
}
|
||||
else if(IS_KEY("Aud_Format_Version"))
|
||||
{
|
||||
audioFile.setFormatAudioVersion(value);
|
||||
audioFile.techInfo().setAudioVersion(value);
|
||||
}
|
||||
else if(IS_KEY("Aud_Channel(s)"))
|
||||
{
|
||||
bool ok = false;
|
||||
unsigned int tmp = value.toUInt(&ok);
|
||||
if(ok) audioFile.setFormatAudioChannels(tmp);
|
||||
if(ok) audioFile.techInfo().setAudioChannels(tmp);
|
||||
}
|
||||
else if(IS_KEY("Aud_SamplingRate"))
|
||||
{
|
||||
bool ok = false;
|
||||
unsigned int tmp = value.toUInt(&ok);
|
||||
if(ok) audioFile.setFormatAudioSamplerate(tmp);
|
||||
if(ok) audioFile.techInfo().setAudioSamplerate(tmp);
|
||||
}
|
||||
else if(IS_KEY("Aud_BitDepth"))
|
||||
{
|
||||
bool ok = false;
|
||||
unsigned int tmp = value.toUInt(&ok);
|
||||
if(ok) audioFile.setFormatAudioBitdepth(tmp);
|
||||
if(ok) audioFile.techInfo().setAudioBitdepth(tmp);
|
||||
}
|
||||
else if(IS_KEY("Aud_Duration"))
|
||||
{
|
||||
unsigned int tmp = parseDuration(value);
|
||||
if(tmp > 0) audioFile.setFileDuration(tmp);
|
||||
if(tmp > 0) audioFile.techInfo().setDuration(tmp);
|
||||
}
|
||||
else if(IS_KEY("Aud_BitRate"))
|
||||
{
|
||||
bool ok = false;
|
||||
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"))
|
||||
{
|
||||
if(!value.compare("CBR", Qt::CaseInsensitive)) audioFile.setFormatAudioBitrateMode(AudioFileModel::BitrateModeConstant);
|
||||
if(!value.compare("VBR", Qt::CaseInsensitive)) audioFile.setFormatAudioBitrateMode(AudioFileModel::BitrateModeVariable);
|
||||
if(!value.compare("CBR", Qt::CaseInsensitive)) audioFile.techInfo().setAudioBitrateMode(AudioFileModel::BitrateModeConstant);
|
||||
if(!value.compare("VBR", Qt::CaseInsensitive)) audioFile.techInfo().setAudioBitrateMode(AudioFileModel::BitrateModeVariable);
|
||||
}
|
||||
else if(IS_KEY("Aud_Encoded_Library"))
|
||||
{
|
||||
audioFile.setFormatAudioEncodeLib(value);
|
||||
audioFile.techInfo().setAudioEncodeLib(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -492,7 +492,7 @@ void AnalyzeTask::retrieveCover(AudioFileModel &audioFile, cover_t coverType, co
|
||||
{
|
||||
coverFile.write(coverData);
|
||||
coverFile.close();
|
||||
audioFile.setFileCover(coverFile.fileName(), true);
|
||||
audioFile.metaInfo().setCover(coverFile.fileName(), true);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -558,25 +558,25 @@ bool AnalyzeTask::analyzeAvisynthFile(const QString &filePath, AudioFileModel &i
|
||||
{
|
||||
bool ok = false;
|
||||
unsigned int duration = val.toUInt(&ok);
|
||||
if(ok) info.setFileDuration(duration);
|
||||
if(ok) info.techInfo().setDuration(duration);
|
||||
}
|
||||
if(key.compare("SamplesPerSec", Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
bool ok = false;
|
||||
unsigned int samplerate = val.toUInt(&ok);
|
||||
if(ok) info.setFormatAudioSamplerate (samplerate);
|
||||
if(ok) info.techInfo().setAudioSamplerate (samplerate);
|
||||
}
|
||||
if(key.compare("Channels", Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
bool ok = false;
|
||||
unsigned int channels = val.toUInt(&ok);
|
||||
if(ok) info.setFormatAudioChannels(channels);
|
||||
if(ok) info.techInfo().setAudioChannels(channels);
|
||||
}
|
||||
if(key.compare("BitsPerSample", Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
bool ok = false;
|
||||
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))
|
||||
{
|
||||
info.setFormatAudioType("Avisynth");
|
||||
info.setFormatContainerType("Avisynth");
|
||||
info.techInfo().setAudioType("Avisynth");
|
||||
info.techInfo().setContainerType("Avisynth");
|
||||
bInfoHeaderFound = true;
|
||||
}
|
||||
}
|
||||
|
@ -46,7 +46,7 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
#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)
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
@ -202,10 +202,11 @@ void ProcessThread::processFile()
|
||||
//------------------
|
||||
//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;
|
||||
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)
|
||||
{
|
||||
@ -220,8 +221,8 @@ void ProcessThread::processFile()
|
||||
if(bSuccess)
|
||||
{
|
||||
sourceFile = tempFile;
|
||||
m_audioFile.setFormatContainerType(QString::fromLatin1("Wave"));
|
||||
m_audioFile.setFormatAudioType(QString::fromLatin1("PCM"));
|
||||
m_audioFile.techInfo().setContainerType(QString::fromLatin1("Wave"));
|
||||
m_audioFile.techInfo().setAudioType(QString::fromLatin1("PCM"));
|
||||
|
||||
if(QFileInfo(sourceFile).size() >= 4294967296i64)
|
||||
{
|
||||
@ -234,7 +235,7 @@ void ProcessThread::processFile()
|
||||
else
|
||||
{
|
||||
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 processStateFinished(m_jobId, m_outFileName, 0);
|
||||
return;
|
||||
@ -244,12 +245,12 @@ void ProcessThread::processFile()
|
||||
//------------------------------------
|
||||
//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())
|
||||
{
|
||||
m_currentStep = AnalyzeStep;
|
||||
bSuccess = m_propDetect->detect(sourceFile, &m_audioFile, &m_aborted);
|
||||
bSuccess = m_propDetect->detect(sourceFile, &m_audioFile.techInfo(), &m_aborted);
|
||||
|
||||
if(bSuccess)
|
||||
{
|
||||
@ -284,7 +285,7 @@ void ProcessThread::processFile()
|
||||
connect(poFilter, SIGNAL(statusUpdated(int)), this, SLOT(handleUpdate(int)), 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;
|
||||
}
|
||||
@ -300,7 +301,7 @@ void ProcessThread::processFile()
|
||||
if(bSuccess && !m_aborted)
|
||||
{
|
||||
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
|
||||
@ -426,15 +427,7 @@ int ProcessThread::generateOutFileName(QString &outFileName)
|
||||
}
|
||||
|
||||
//Apply rename pattern
|
||||
QString fileName = m_renamePattern;
|
||||
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();
|
||||
QString fileName = applyRenamePattern(baseName, m_audioFile.metaInfo());
|
||||
|
||||
//Generate full output path
|
||||
outFileName = QString("%1/%2.%3").arg(targetDir.canonicalPath(), fileName, m_encoder->extension());
|
||||
@ -482,6 +475,22 @@ int ProcessThread::generateOutFileName(QString &outFileName)
|
||||
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)
|
||||
{
|
||||
bool bOkay = false;
|
||||
@ -520,7 +529,7 @@ void ProcessThread::insertDownsampleFilter(void)
|
||||
int targetBitDepth = 0;
|
||||
|
||||
/* Adjust sample rate */
|
||||
if(m_encoder->supportedSamplerates() && m_audioFile.formatAudioSamplerate())
|
||||
if(m_encoder->supportedSamplerates() && m_audioFile.techInfo().audioSamplerate())
|
||||
{
|
||||
bool applyDownsampling = true;
|
||||
|
||||
@ -539,7 +548,7 @@ void ProcessThread::insertDownsampleFilter(void)
|
||||
if(applyDownsampling)
|
||||
{
|
||||
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;
|
||||
|
||||
//Find the most suitable supported sampling rate
|
||||
@ -562,9 +571,9 @@ void ProcessThread::insertDownsampleFilter(void)
|
||||
}
|
||||
|
||||
/* 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();
|
||||
|
||||
bool bAdjustBitdepth = true;
|
||||
@ -628,7 +637,7 @@ void ProcessThread::insertDownmixFilter(void)
|
||||
{
|
||||
bool requiresDownmix = true;
|
||||
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++)
|
||||
{
|
||||
|
@ -78,6 +78,7 @@ private:
|
||||
|
||||
void processFile();
|
||||
int generateOutFileName(QString &outFileName);
|
||||
QString applyRenamePattern(const QString &baseName, const AudioFileModel_MetaInfo &metaInfo);
|
||||
QString generateTempFileName(void);
|
||||
void insertDownmixFilter(void);
|
||||
void insertDownsampleFilter(void);
|
||||
|
@ -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;
|
||||
QStringList args;
|
||||
@ -89,21 +89,21 @@ bool WaveProperties::detect(const QString &sourceFile, AudioFileModel *info, vol
|
||||
{
|
||||
bool ok = false;
|
||||
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));
|
||||
}
|
||||
if(regExp_encoding.lastIndexIn(text) >= 0)
|
||||
{
|
||||
bool ok = false;
|
||||
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));
|
||||
}
|
||||
if(regExp_samplerate.lastIndexIn(text) >= 0)
|
||||
{
|
||||
bool ok = false;
|
||||
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));
|
||||
}
|
||||
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]);
|
||||
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));
|
||||
}
|
||||
@ -123,7 +123,7 @@ bool WaveProperties::detect(const QString &sourceFile, AudioFileModel *info, vol
|
||||
{
|
||||
bool ok = false;
|
||||
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));
|
||||
}
|
||||
if(!text.isEmpty())
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
#include "Tool_Abstract.h"
|
||||
|
||||
class AudioFileModel;
|
||||
class AudioFileModel_TechInfo;
|
||||
|
||||
class WaveProperties : public AbstractTool
|
||||
{
|
||||
@ -32,7 +32,7 @@ public:
|
||||
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:
|
||||
const QString m_binary;
|
||||
|
Loading…
Reference in New Issue
Block a user