1
///////////////////////////////////////////////////////////////////////////////
2 // LameXP - Audio Encoder Front-End
3 // Copyright (C) 2004-2012 LoRd_MuldeR <MuldeR2@GMX.de>
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.
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"
26 #include <QMutexLocker>
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
)
43 AudioFileModel::AudioFileModel(const AudioFileModel
&model
, bool copyMetaInfo
)
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
);
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
);
100 AudioFileModel::~AudioFileModel(void)
104 ////////////////////////////////////////////////////////////
106 ////////////////////////////////////////////////////////////
108 void AudioFileModel::resetAll(void)
112 m_fileArtist
.clear();
115 m_fileComment
.clear();
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 ////////////////////////////////////////////////////////////
137 ////////////////////////////////////////////////////////////
139 // ---------------------------------
141 // ---------------------------------
143 const QString
&AudioFileModel::filePath(void) const
148 const QString
&AudioFileModel::fileName(void) const
153 const QString
&AudioFileModel::fileArtist(void) const
158 const QString
&AudioFileModel::fileAlbum(void) const
163 const QString
&AudioFileModel::fileGenre(void) const
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
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
247 QTime time
= QTime().addSecs(m_fileDuration
);
248 return time
.toString("hh:mm:ss");
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
));
270 const QString
AudioFileModel::formatAudioBaseInfo(void) const
272 if(m_formatAudioSamplerate
|| m_formatAudioChannels
|| m_formatAudioBitdepth
)
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
)));
298 const QString
AudioFileModel::formatAudioCompressInfo(void) const
300 if(!m_formatAudioType
.isEmpty())
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")));
323 case BitrateModeVariable
:
324 info
.append(U16Str(", %1: \u2248%2 kbps (%3)").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate
), tr("Variable")));
327 info
.append(U16Str(", %1: %2 kbps").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate
)));
339 // ---------------------------------
341 // ---------------------------------
343 void AudioFileModel::setFilePath(const QString
&path
)
348 void AudioFileModel::setFileName(const QString
&name
)
353 void AudioFileModel::setFileArtist(const QString
&artist
)
355 m_fileArtist
= artist
;
358 void AudioFileModel::setFileAlbum(const QString
&album
)
363 void AudioFileModel::setFileGenre(const QString
&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
)
383 void AudioFileModel::setFileYear(unsigned int 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());