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>
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
)
46 AudioFileModel::AudioFileModel(const AudioFileModel
&model
, bool copyMetaInfo
)
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
);
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
);
105 AudioFileModel::~AudioFileModel(void)
109 ////////////////////////////////////////////////////////////
111 ////////////////////////////////////////////////////////////
113 void AudioFileModel::resetAll(void)
117 m_fileArtist
.clear();
120 m_fileComment
.clear();
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 ////////////////////////////////////////////////////////////
143 ////////////////////////////////////////////////////////////
145 // ---------------------------------
147 // ---------------------------------
149 const QString
&AudioFileModel::filePath(void) const
154 const QString
&AudioFileModel::fileName(void) const
159 const QString
&AudioFileModel::fileArtist(void) const
164 const QString
&AudioFileModel::fileAlbum(void) const
169 const QString
&AudioFileModel::fileGenre(void) const
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
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
253 QTime time
= QTime().addSecs(m_fileDuration
);
254 return time
.toString("hh:mm:ss");
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
));
276 const QString
AudioFileModel::formatAudioBaseInfo(void) const
278 if(m_formatAudioSamplerate
|| m_formatAudioChannels
|| m_formatAudioBitdepth
)
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)));
300 info
.append(QString("%1: %2 Bit").arg(tr("Bitdepth"), QString::number(m_formatAudioBitdepth
)));
311 const QString
AudioFileModel::formatAudioCompressInfo(void) const
313 if(!m_formatAudioType
.isEmpty())
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")));
336 case BitrateModeVariable
:
337 info
.append(U16Str(", %1: \u2248%2 kbps (%3)").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate
), tr("Variable")));
340 info
.append(U16Str(", %1: %2 kbps").arg(tr("Bitrate"), QString::number(m_formatAudioBitrate
)));
344 if(!m_formatAudioEncodeLib
.isEmpty())
346 info
.append(QString(", %1: %2").arg(tr("Encoder"), m_formatAudioEncodeLib
));
356 // ---------------------------------
358 // ---------------------------------
360 void AudioFileModel::setFilePath(const QString
&path
)
365 void AudioFileModel::setFileName(const QString
&name
)
370 void AudioFileModel::setFileArtist(const QString
&artist
)
372 m_fileArtist
= artist
;
375 void AudioFileModel::setFileAlbum(const QString
&album
)
380 void AudioFileModel::setFileGenre(const QString
&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
)
400 void AudioFileModel::setFileYear(unsigned int 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());