Bump version.
[LameXP.git] / src / Model_AudioFile.cpp
blob5f106f94e3a22f6a277e8cc8911e517a594c6e13
1 ///////////////////////////////////////////////////////////////////////////////
2 // LameXP - Audio Encoder Front-End
3 // Copyright (C) 2004-2012 LoRd_MuldeR <MuldeR2@GMX.de>
4 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; either version 2 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License along
16 // with this program; if not, write to the Free Software Foundation, Inc.,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 // http://www.gnu.org/licenses/gpl-2.0.txt
20 ///////////////////////////////////////////////////////////////////////////////
22 #include "Model_AudioFile.h"
24 #include <QTime>
25 #include <QObject>
26 #include <QMutexLocker>
27 #include <QFile>
29 #define U16Str(X) QString::fromUtf16(reinterpret_cast<const unsigned short*>(L##X))
31 ////////////////////////////////////////////////////////////
32 // Constructor & Destructor
33 ////////////////////////////////////////////////////////////
35 AudioFileModel::AudioFileModel(const QString &path, const QString &name)
37 resetAll();
39 m_filePath = path;
40 m_fileName = name;
43 AudioFileModel::AudioFileModel(const AudioFileModel &model, bool copyMetaInfo)
45 resetAll();
47 setFilePath(model.m_filePath);
48 setFormatContainerType(model.m_formatContainerType);
49 setFormatContainerProfile(model.m_formatContainerProfile);
50 setFormatAudioType(model.m_formatAudioType);
51 setFormatAudioProfile(model.m_formatAudioProfile);
52 setFormatAudioVersion(model.m_formatAudioVersion);
53 setFormatAudioSamplerate(model.m_formatAudioSamplerate);
54 setFormatAudioChannels(model.m_formatAudioChannels);
55 setFormatAudioBitdepth(model.m_formatAudioBitdepth);
56 setFormatAudioBitrate(model.m_formatAudioBitrate);
57 setFormatAudioBitrateMode(model.m_formatAudioBitrateMode);
58 setFileDuration(model.m_fileDuration);
60 if(copyMetaInfo)
62 setFileName(model.m_fileName);
63 setFileArtist(model.m_fileArtist);
64 setFileAlbum(model.m_fileAlbum);
65 setFileGenre(model.m_fileGenre);
66 setFileComment(model.m_fileComment);
67 setFileCover(model.m_fileCover);
68 setFileYear(model.m_fileYear);
69 setFilePosition(model.m_filePosition);
73 AudioFileModel &AudioFileModel::operator=(const AudioFileModel &model)
75 setFilePath(model.m_filePath);
76 setFileName(model.m_fileName);
77 setFileArtist(model.m_fileArtist);
78 setFileAlbum(model.m_fileAlbum);
79 setFileGenre(model.m_fileGenre);
80 setFileComment(model.m_fileComment);
81 setFileCover(model.m_fileCover);
82 setFileYear(model.m_fileYear);
83 setFilePosition(model.m_filePosition);
84 setFileDuration(model.m_fileDuration);
86 setFormatContainerType(model.m_formatContainerType);
87 setFormatContainerProfile(model.m_formatContainerProfile);
88 setFormatAudioType(model.m_formatAudioType);
89 setFormatAudioProfile(model.m_formatAudioProfile);
90 setFormatAudioVersion(model.m_formatAudioVersion);
91 setFormatAudioSamplerate(model.m_formatAudioSamplerate);
92 setFormatAudioChannels(model.m_formatAudioChannels);
93 setFormatAudioBitdepth(model.m_formatAudioBitdepth);
94 setFormatAudioBitrate(model.m_formatAudioBitrate);
95 setFormatAudioBitrateMode(model.m_formatAudioBitrateMode);
97 return (*this);
100 AudioFileModel::~AudioFileModel(void)
104 ////////////////////////////////////////////////////////////
105 // Private Functions
106 ////////////////////////////////////////////////////////////
108 void AudioFileModel::resetAll(void)
110 m_filePath.clear();
111 m_fileName.clear();
112 m_fileArtist.clear();
113 m_fileAlbum.clear();
114 m_fileGenre.clear();
115 m_fileComment.clear();
116 m_fileCover.clear();
118 m_fileYear = 0;
119 m_filePosition = 0;
120 m_fileDuration = 0;
122 m_formatContainerType.clear();
123 m_formatContainerProfile.clear();
124 m_formatAudioType.clear();
125 m_formatAudioProfile.clear();
126 m_formatAudioVersion.clear();
128 m_formatAudioSamplerate = 0;
129 m_formatAudioChannels = 0;
130 m_formatAudioBitdepth = 0;
131 m_formatAudioBitrate = 0;
132 m_formatAudioBitrateMode = BitrateModeUndefined;
135 ////////////////////////////////////////////////////////////
136 // Public Functions
137 ////////////////////////////////////////////////////////////
139 // ---------------------------------
140 // Getter methods
141 // ---------------------------------
143 const QString &AudioFileModel::filePath(void) const
145 return m_filePath;
148 const QString &AudioFileModel::fileName(void) const
150 return m_fileName;
153 const QString &AudioFileModel::fileArtist(void) const
155 return m_fileArtist;
158 const QString &AudioFileModel::fileAlbum(void) const
160 return m_fileAlbum;
163 const QString &AudioFileModel::fileGenre(void) const
165 return m_fileGenre;
168 const QString &AudioFileModel::fileComment(void) const
170 return m_fileComment;
173 const QString &AudioFileModel::fileCover(void) const
175 return m_fileCover.filePath();
178 unsigned int AudioFileModel::fileYear(void) const
180 return m_fileYear;
183 unsigned int AudioFileModel::filePosition(void) const
185 return m_filePosition;
188 unsigned int AudioFileModel::fileDuration(void) const
190 return m_fileDuration;
193 const QString &AudioFileModel::formatContainerType(void) const
195 return m_formatContainerType;
198 const QString &AudioFileModel::formatContainerProfile(void) const
200 return m_formatContainerProfile;
203 const QString &AudioFileModel::formatAudioType(void) const
205 return m_formatAudioType;
208 const QString &AudioFileModel::formatAudioProfile(void) const
210 return m_formatAudioProfile;
213 const QString &AudioFileModel::formatAudioVersion(void) const
215 return m_formatAudioVersion;
218 unsigned int AudioFileModel::formatAudioSamplerate(void) const
220 return m_formatAudioSamplerate;
223 unsigned int AudioFileModel::formatAudioChannels(void) const
225 return m_formatAudioChannels;
228 unsigned int AudioFileModel::formatAudioBitdepth(void) const
230 return m_formatAudioBitdepth;
233 unsigned int AudioFileModel::formatAudioBitrate(void) const
235 return m_formatAudioBitrate;
238 unsigned int AudioFileModel::formatAudioBitrateMode(void) const
240 return m_formatAudioBitrateMode;
243 const QString AudioFileModel::fileDurationInfo(void) const
245 if(m_fileDuration)
247 QTime time = QTime().addSecs(m_fileDuration);
248 return time.toString("hh:mm:ss");
250 else
252 return QString();
256 const QString AudioFileModel::formatContainerInfo(void) const
258 if(!m_formatContainerType.isEmpty())
260 QString info = m_formatContainerType;
261 if(!m_formatContainerProfile.isEmpty()) info.append(QString(" (%1: %2)").arg(tr("Profile"), m_formatContainerProfile));
262 return info;
264 else
266 return QString();
270 const QString AudioFileModel::formatAudioBaseInfo(void) const
272 if(m_formatAudioSamplerate || m_formatAudioChannels || m_formatAudioBitdepth)
274 QString info;
275 if(m_formatAudioChannels)
277 if(!info.isEmpty()) info.append(", ");
278 info.append(QString("%1: %2").arg(tr("Channels"), QString::number(m_formatAudioChannels)));
280 if(m_formatAudioSamplerate)
282 if(!info.isEmpty()) info.append(", ");
283 info.append(QString("%1: %2 Hz").arg(tr("Samplerate"), QString::number(m_formatAudioSamplerate)));
285 if(m_formatAudioBitdepth)
287 if(!info.isEmpty()) info.append(", ");
288 info.append(QString("%1: %2 Bit").arg(tr("Bitdepth"), QString::number(m_formatAudioBitdepth)));
290 return info;
292 else
294 return QString();
298 const QString AudioFileModel::formatAudioCompressInfo(void) const
300 if(!m_formatAudioType.isEmpty())
302 QString info;
303 if(!m_formatAudioProfile.isEmpty() || !m_formatAudioVersion.isEmpty())
305 info.append(QString("%1: ").arg(tr("Type")));
307 info.append(m_formatAudioType);
308 if(!m_formatAudioProfile.isEmpty())
310 info.append(QString(", %1: %2").arg(tr("Profile"), m_formatAudioProfile));
312 if(!m_formatAudioVersion.isEmpty())
314 info.append(QString(", %1: %2").arg(tr("Version"), m_formatAudioVersion));
316 if(m_formatAudioBitrate > 0)
318 switch(m_formatAudioBitrateMode)
320 case BitrateModeConstant:
321 info.append(U16Str(", %1: %2 kbps (%3)").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate), tr("Constant")));
322 break;
323 case BitrateModeVariable:
324 info.append(U16Str(", %1: \u2248%2 kbps (%3)").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate), tr("Variable")));
325 break;
326 default:
327 info.append(U16Str(", %1: %2 kbps").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate)));
328 break;
331 return info;
333 else
335 return QString();
339 // ---------------------------------
340 // Setter methods
341 // ---------------------------------
343 void AudioFileModel::setFilePath(const QString &path)
345 m_filePath = path;
348 void AudioFileModel::setFileName(const QString &name)
350 m_fileName = name;
353 void AudioFileModel::setFileArtist(const QString &artist)
355 m_fileArtist = artist;
358 void AudioFileModel::setFileAlbum(const QString &album)
360 m_fileAlbum = album;
363 void AudioFileModel::setFileGenre(const QString &genre)
365 m_fileGenre = genre;
368 void AudioFileModel::setFileComment(const QString &comment)
370 m_fileComment = comment;
373 void AudioFileModel::setFileCover(const QString &coverFile, bool owner)
375 m_fileCover.setFilePath(coverFile, owner);
378 void AudioFileModel::setFileCover(const ArtworkModel &model)
380 m_fileCover = model;
383 void AudioFileModel::setFileYear(unsigned int year)
385 m_fileYear = year;
388 void AudioFileModel::setFilePosition(unsigned int position)
390 m_filePosition = position;
393 void AudioFileModel::setFileDuration(unsigned int duration)
395 m_fileDuration = duration;
398 void AudioFileModel::setFormatContainerType(const QString &type)
400 m_formatContainerType = type;
403 void AudioFileModel::setFormatContainerProfile(const QString &profile)
405 m_formatContainerProfile = profile;
408 void AudioFileModel::setFormatAudioType(const QString &type)
410 m_formatAudioType = type;
413 void AudioFileModel::setFormatAudioProfile(const QString &profile)
415 m_formatAudioProfile = profile;
418 void AudioFileModel::setFormatAudioVersion(const QString &version)
420 m_formatAudioVersion = version;
423 void AudioFileModel::setFormatAudioSamplerate(unsigned int samplerate)
425 m_formatAudioSamplerate = samplerate;
428 void AudioFileModel::setFormatAudioChannels(unsigned int channels)
430 m_formatAudioChannels = channels;
433 void AudioFileModel::setFormatAudioBitdepth(unsigned int bitdepth)
435 m_formatAudioBitdepth = bitdepth;
438 void AudioFileModel::setFormatAudioBitrate(unsigned int bitrate)
440 m_formatAudioBitrate = bitrate;
443 void AudioFileModel::setFormatAudioBitrateMode(unsigned int bitrateMode)
445 m_formatAudioBitrateMode = bitrateMode;
448 void AudioFileModel::updateMetaInfo(const AudioFileModel &model)
450 if(!model.fileArtist().isEmpty()) setFileArtist(model.fileArtist());
451 if(!model.fileAlbum().isEmpty()) setFileAlbum(model.fileAlbum());
452 if(!model.fileGenre().isEmpty()) setFileGenre(model.fileGenre());
453 if(!model.fileComment().isEmpty()) setFileComment(model.fileComment());
454 if(model.fileYear()) setFileYear(model.fileYear());