File indexing completed on 2024-04-28 08:40:20
0001 /* AUDEX CDDA EXTRACTOR 0002 * SPDX-FileCopyrightText: Copyright (C) 2007 Marco Nelles 0003 * <https://userbase.kde.org/Audex> 0004 * 0005 * SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 #include "cuesheetwriter.h" 0009 0010 CueSheetWriter::CueSheetWriter(CDDAModel *model) 0011 { 0012 this->model = model; 0013 } 0014 0015 CueSheetWriter::~CueSheetWriter() 0016 { 0017 } 0018 0019 QStringList CueSheetWriter::cueSheet(const QString &binFilename, const int frameOffset, const bool writeMCN, const bool writeISRC) const 0020 { 0021 QStringList result; 0022 0023 result << "REM cue file written by Audex Version " AUDEX_VERSION; 0024 result << QString("REM DISCID %1").arg(DiscIDCalculator::CDDBId(model->discSignature()), 8, 16, QLatin1Char('g')).toUpper(); 0025 result << QString("REM GENRE \"%1\"").arg(model->genre()); 0026 result << QString("REM DATE \"%1\"").arg(model->year()); 0027 if (writeMCN) { 0028 QString mcn = model->cdio()->getMCN(); 0029 if (!mcn.isEmpty() && mcn != "0") 0030 result << QString("CATALOG %1").arg(mcn); 0031 } 0032 result << QString("PERFORMER \"%1\"").arg(model->artist()); 0033 result << QString("TITLE \"%1\"").arg(model->title()); 0034 0035 QFileInfo info(binFilename); 0036 result << QString("FILE \"%1\" %2").arg(info.fileName(), p_filetype(binFilename)); 0037 0038 for (int i = 0; i < model->cdio()->numOfTracks(); ++i) { 0039 if (!model->isAudioTrack(i + 1)) 0040 continue; 0041 result << QString(" TRACK %1 AUDIO").arg(i + 1, 2, 10, QChar('0')); 0042 if (writeISRC) { 0043 QString isrc = model->cdio()->getISRC(i + 1); 0044 if (!isrc.isEmpty() && isrc != "0") 0045 result << QString(" ISRC %1").arg(isrc); 0046 } 0047 result << QString(" PERFORMER \"%1\"").arg(model->data(model->index(i, CDDA_MODEL_COLUMN_ARTIST_INDEX)).toString()); 0048 result << QString(" TITLE \"%1\"").arg(model->data(model->index(i, CDDA_MODEL_COLUMN_TITLE_INDEX)).toString()); 0049 0050 if (i == 0 && model->cdio()->firstSectorOfDisc() < model->cdio()->firstSectorOfTrack(1) + frameOffset) { 0051 result << QString(" INDEX 00 %1").arg(CDDACDIO::LSN2MSF(model->cdio()->firstSectorOfDisc())); 0052 } 0053 0054 result << QString(" INDEX 01 %1").arg(model->cdio()->msfOfTrack(i + 1)); 0055 } 0056 0057 return result; 0058 } 0059 0060 QStringList CueSheetWriter::cueSheet(const QStringList &filenames, const int frameOffset, const bool writeMCN, const bool writeISRC) const 0061 { 0062 Q_UNUSED(frameOffset); 0063 0064 QStringList result; 0065 result << "REM cue file written by Audex Version " AUDEX_VERSION; 0066 result << QString("REM DISCID %1").arg(DiscIDCalculator::CDDBId(model->discSignature()), 8, 16, QLatin1Char('g')).toUpper(); 0067 result << QString("REM GENRE \"%1\"").arg(model->genre()); 0068 result << QString("REM DATE \"%1\"").arg(model->year()); 0069 if (writeMCN) { 0070 QString mcn = model->cdio()->getMCN(); 0071 if (!mcn.isEmpty() && mcn != "0") 0072 result << QString("CATALOG %1").arg(mcn); 0073 } 0074 result << QString("PERFORMER \"%1\"").arg(model->artist()); 0075 result << QString("TITLE \"%1\"").arg(model->title()); 0076 0077 for (int i = 0; i < filenames.count(); ++i) { 0078 QFileInfo info(filenames.at(i)); 0079 result << QString("FILE \"%1\" %2").arg(info.fileName(), p_filetype(filenames.at(i))); 0080 0081 result << QString(" TRACK %1 AUDIO").arg(i + 1, 2, 10, QChar('0')); 0082 if (writeISRC) { 0083 QString isrc = model->cdio()->getISRC(i + 1); 0084 if (!isrc.isEmpty() && isrc != "0") 0085 result << QString(" ISRC %1").arg(isrc); 0086 } 0087 result << QString(" PERFORMER \"%1\"").arg(model->data(model->index(i, CDDA_MODEL_COLUMN_ARTIST_INDEX)).toString()); 0088 result << QString(" TITLE \"%1\"").arg(model->data(model->index(i, CDDA_MODEL_COLUMN_TITLE_INDEX)).toString()); 0089 result << QString(" INDEX 01 00:00:00"); 0090 } 0091 0092 return result; 0093 } 0094 0095 QString CueSheetWriter::p_filetype(const QString &filename) const 0096 { 0097 QString result = "WAVE"; 0098 if ((filename.endsWith(QLatin1String("aiff"), Qt::CaseInsensitive)) || (filename.endsWith(QLatin1String("aif"), Qt::CaseInsensitive))) { 0099 result = "AIFF"; 0100 } else if (filename.endsWith(QLatin1String("mp3"), Qt::CaseInsensitive)) { 0101 result = "MP3"; 0102 } 0103 0104 return result; 0105 }