Updated Ukrainian translation.
[LameXP.git] / src / Model_AudioFile.cpp
blob92911f86e087be15246335dbde257c3881ebe343
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>
28 #include <limits.h>
30 #define U16Str(X) QString::fromUtf16(reinterpret_cast<const unsigned short*>(L##X))
32 const unsigned int AudioFileModel::BITDEPTH_IEEE_FLOAT32 = UINT_MAX-1;
34 ////////////////////////////////////////////////////////////
35 // Constructor & Destructor
36 ////////////////////////////////////////////////////////////
38 AudioFileModel::AudioFileModel(const QString &path, const QString &name)
40 resetAll();
42 m_filePath = path;
43 m_fileName = name;
46 AudioFileModel::AudioFileModel(const AudioFileModel &model, bool copyMetaInfo)
48 resetAll();
50 setFilePath(model.m_filePath);
51 setFormatContainerType(model.m_formatContainerType);
52 setFormatContainerProfile(model.m_formatContainerProfile);
53 setFormatAudioType(model.m_formatAudioType);
54 setFormatAudioProfile(model.m_formatAudioProfile);
55 setFormatAudioVersion(model.m_formatAudioVersion);
56 setFormatAudioEncodeLib(model.m_formatAudioEncodeLib);
57 setFormatAudioSamplerate(model.m_formatAudioSamplerate);
58 setFormatAudioChannels(model.m_formatAudioChannels);
59 setFormatAudioBitdepth(model.m_formatAudioBitdepth);
60 setFormatAudioBitrate(model.m_formatAudioBitrate);
61 setFormatAudioBitrateMode(model.m_formatAudioBitrateMode);
62 setFileDuration(model.m_fileDuration);
64 if(copyMetaInfo)
66 setFileName(model.m_fileName);
67 setFileArtist(model.m_fileArtist);
68 setFileAlbum(model.m_fileAlbum);
69 setFileGenre(model.m_fileGenre);
70 setFileComment(model.m_fileComment);
71 setFileCover(model.m_fileCover);
72 setFileYear(model.m_fileYear);
73 setFilePosition(model.m_filePosition);
77 AudioFileModel &AudioFileModel::operator=(const AudioFileModel &model)
79 setFilePath(model.m_filePath);
80 setFileName(model.m_fileName);
81 setFileArtist(model.m_fileArtist);
82 setFileAlbum(model.m_fileAlbum);
83 setFileGenre(model.m_fileGenre);
84 setFileComment(model.m_fileComment);
85 setFileCover(model.m_fileCover);
86 setFileYear(model.m_fileYear);
87 setFilePosition(model.m_filePosition);
88 setFileDuration(model.m_fileDuration);
90 setFormatContainerType(model.m_formatContainerType);
91 setFormatContainerProfile(model.m_formatContainerProfile);
92 setFormatAudioType(model.m_formatAudioType);
93 setFormatAudioProfile(model.m_formatAudioProfile);
94 setFormatAudioVersion(model.m_formatAudioVersion);
95 setFormatAudioEncodeLib(model.m_formatAudioEncodeLib);
96 setFormatAudioSamplerate(model.m_formatAudioSamplerate);
97 setFormatAudioChannels(model.m_formatAudioChannels);
98 setFormatAudioBitdepth(model.m_formatAudioBitdepth);
99 setFormatAudioBitrate(model.m_formatAudioBitrate);
100 setFormatAudioBitrateMode(model.m_formatAudioBitrateMode);
102 return (*this);
105 AudioFileModel::~AudioFileModel(void)
109 ////////////////////////////////////////////////////////////
110 // Private Functions
111 ////////////////////////////////////////////////////////////
113 void AudioFileModel::resetAll(void)
115 m_filePath.clear();
116 m_fileName.clear();
117 m_fileArtist.clear();
118 m_fileAlbum.clear();
119 m_fileGenre.clear();
120 m_fileComment.clear();
121 m_fileCover.clear();
123 m_fileYear = 0;
124 m_filePosition = 0;
125 m_fileDuration = 0;
127 m_formatContainerType.clear();
128 m_formatContainerProfile.clear();
129 m_formatAudioType.clear();
130 m_formatAudioProfile.clear();
131 m_formatAudioVersion.clear();
132 m_formatAudioEncodeLib.clear();
134 m_formatAudioSamplerate = 0;
135 m_formatAudioChannels = 0;
136 m_formatAudioBitdepth = 0;
137 m_formatAudioBitrate = 0;
138 m_formatAudioBitrateMode = BitrateModeUndefined;
141 ////////////////////////////////////////////////////////////
142 // Public Functions
143 ////////////////////////////////////////////////////////////
145 // ---------------------------------
146 // Getter methods
147 // ---------------------------------
149 const QString &AudioFileModel::filePath(void) const
151 return m_filePath;
154 const QString &AudioFileModel::fileName(void) const
156 return m_fileName;
159 const QString &AudioFileModel::fileArtist(void) const
161 return m_fileArtist;
164 const QString &AudioFileModel::fileAlbum(void) const
166 return m_fileAlbum;
169 const QString &AudioFileModel::fileGenre(void) const
171 return m_fileGenre;
174 const QString &AudioFileModel::fileComment(void) const
176 return m_fileComment;
179 const QString &AudioFileModel::fileCover(void) const
181 return m_fileCover.filePath();
184 unsigned int AudioFileModel::fileYear(void) const
186 return m_fileYear;
189 unsigned int AudioFileModel::filePosition(void) const
191 return m_filePosition;
194 unsigned int AudioFileModel::fileDuration(void) const
196 return m_fileDuration;
199 const QString &AudioFileModel::formatContainerType(void) const
201 return m_formatContainerType;
204 const QString &AudioFileModel::formatContainerProfile(void) const
206 return m_formatContainerProfile;
209 const QString &AudioFileModel::formatAudioType(void) const
211 return m_formatAudioType;
214 const QString &AudioFileModel::formatAudioProfile(void) const
216 return m_formatAudioProfile;
219 const QString &AudioFileModel::formatAudioVersion(void) const
221 return m_formatAudioVersion;
224 unsigned int AudioFileModel::formatAudioSamplerate(void) const
226 return m_formatAudioSamplerate;
229 unsigned int AudioFileModel::formatAudioChannels(void) const
231 return m_formatAudioChannels;
234 unsigned int AudioFileModel::formatAudioBitdepth(void) const
236 return m_formatAudioBitdepth;
239 unsigned int AudioFileModel::formatAudioBitrate(void) const
241 return m_formatAudioBitrate;
244 unsigned int AudioFileModel::formatAudioBitrateMode(void) const
246 return m_formatAudioBitrateMode;
249 const QString AudioFileModel::fileDurationInfo(void) const
251 if(m_fileDuration)
253 QTime time = QTime().addSecs(m_fileDuration);
254 return time.toString("hh:mm:ss");
256 else
258 return QString();
262 const QString AudioFileModel::formatContainerInfo(void) const
264 if(!m_formatContainerType.isEmpty())
266 QString info = m_formatContainerType;
267 if(!m_formatContainerProfile.isEmpty()) info.append(QString(" (%1: %2)").arg(tr("Profile"), m_formatContainerProfile));
268 return info;
270 else
272 return QString();
276 const QString AudioFileModel::formatAudioBaseInfo(void) const
278 if(m_formatAudioSamplerate || m_formatAudioChannels || m_formatAudioBitdepth)
280 QString info;
281 if(m_formatAudioChannels)
283 if(!info.isEmpty()) info.append(", ");
284 info.append(QString("%1: %2").arg(tr("Channels"), QString::number(m_formatAudioChannels)));
286 if(m_formatAudioSamplerate)
288 if(!info.isEmpty()) info.append(", ");
289 info.append(QString("%1: %2 Hz").arg(tr("Samplerate"), QString::number(m_formatAudioSamplerate)));
291 if(m_formatAudioBitdepth)
293 if(!info.isEmpty()) info.append(", ");
294 if(m_formatAudioBitdepth == BITDEPTH_IEEE_FLOAT32)
296 info.append(QString("%1: %2 Bit (IEEE Float)").arg(tr("Bitdepth"), QString::number(32)));
298 else
300 info.append(QString("%1: %2 Bit").arg(tr("Bitdepth"), QString::number(m_formatAudioBitdepth)));
303 return info;
305 else
307 return QString();
311 const QString AudioFileModel::formatAudioCompressInfo(void) const
313 if(!m_formatAudioType.isEmpty())
315 QString info;
316 if(!m_formatAudioProfile.isEmpty() || !m_formatAudioVersion.isEmpty())
318 info.append(QString("%1: ").arg(tr("Type")));
320 info.append(m_formatAudioType);
321 if(!m_formatAudioProfile.isEmpty())
323 info.append(QString(", %1: %2").arg(tr("Profile"), m_formatAudioProfile));
325 if(!m_formatAudioVersion.isEmpty())
327 info.append(QString(", %1: %2").arg(tr("Version"), m_formatAudioVersion));
329 if(m_formatAudioBitrate > 0)
331 switch(m_formatAudioBitrateMode)
333 case BitrateModeConstant:
334 info.append(U16Str(", %1: %2 kbps (%3)").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate), tr("Constant")));
335 break;
336 case BitrateModeVariable:
337 info.append(U16Str(", %1: \u2248%2 kbps (%3)").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate), tr("Variable")));
338 break;
339 default:
340 info.append(U16Str(", %1: %2 kbps").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate)));
341 break;
344 if(!m_formatAudioEncodeLib.isEmpty())
346 info.append(QString(", %1: %2").arg(tr("Encoder"), m_formatAudioEncodeLib));
348 return info;
350 else
352 return QString();
356 // ---------------------------------
357 // Setter methods
358 // ---------------------------------
360 void AudioFileModel::setFilePath(const QString &path)
362 m_filePath = path;
365 void AudioFileModel::setFileName(const QString &name)
367 m_fileName = name;
370 void AudioFileModel::setFileArtist(const QString &artist)
372 m_fileArtist = artist;
375 void AudioFileModel::setFileAlbum(const QString &album)
377 m_fileAlbum = album;
380 void AudioFileModel::setFileGenre(const QString &genre)
382 m_fileGenre = genre;
385 void AudioFileModel::setFileComment(const QString &comment)
387 m_fileComment = comment;
390 void AudioFileModel::setFileCover(const QString &coverFile, bool owner)
392 m_fileCover.setFilePath(coverFile, owner);
395 void AudioFileModel::setFileCover(const ArtworkModel &model)
397 m_fileCover = model;
400 void AudioFileModel::setFileYear(unsigned int year)
402 m_fileYear = year;
405 void AudioFileModel::setFilePosition(unsigned int position)
407 m_filePosition = position;
410 void AudioFileModel::setFileDuration(unsigned int duration)
412 m_fileDuration = duration;
415 void AudioFileModel::setFormatContainerType(const QString &type)
417 m_formatContainerType = type;
420 void AudioFileModel::setFormatContainerProfile(const QString &profile)
422 m_formatContainerProfile = profile;
425 void AudioFileModel::setFormatAudioType(const QString &type)
427 m_formatAudioType = type;
430 void AudioFileModel::setFormatAudioProfile(const QString &profile)
432 m_formatAudioProfile = profile;
435 void AudioFileModel::setFormatAudioVersion(const QString &version)
437 m_formatAudioVersion = version;
440 void AudioFileModel::setFormatAudioEncodeLib(const QString &encodeLib)
442 m_formatAudioEncodeLib = encodeLib;
445 void AudioFileModel::setFormatAudioSamplerate(unsigned int samplerate)
447 m_formatAudioSamplerate = samplerate;
450 void AudioFileModel::setFormatAudioChannels(unsigned int channels)
452 m_formatAudioChannels = channels;
455 void AudioFileModel::setFormatAudioBitdepth(unsigned int bitdepth)
457 m_formatAudioBitdepth = bitdepth;
460 void AudioFileModel::setFormatAudioBitrate(unsigned int bitrate)
462 m_formatAudioBitrate = bitrate;
465 void AudioFileModel::setFormatAudioBitrateMode(unsigned int bitrateMode)
467 m_formatAudioBitrateMode = bitrateMode;
470 void AudioFileModel::updateMetaInfo(const AudioFileModel &model)
472 if(!model.fileArtist().isEmpty()) setFileArtist(model.fileArtist());
473 if(!model.fileAlbum().isEmpty()) setFileAlbum(model.fileAlbum());
474 if(!model.fileGenre().isEmpty()) setFileGenre(model.fileGenre());
475 if(!model.fileComment().isEmpty()) setFileComment(model.fileComment());
476 if(model.fileYear()) setFileYear(model.fileYear());