Happy new year 2019!
[LameXP.git] / src / Model_AudioFile.h
blob7f73273bae7de64f04d4299211f7c815c72187d1
1 ///////////////////////////////////////////////////////////////////////////////
2 // LameXP - Audio Encoder Front-End
3 // Copyright (C) 2004-2019 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, but always including the *additional*
9 // restrictions defined in the "License.txt" file.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with this program; if not, write to the Free Software Foundation, Inc.,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 // http://www.gnu.org/licenses/gpl-2.0.txt
21 ///////////////////////////////////////////////////////////////////////////////
23 #pragma once
25 #include <QObject>
26 #include <QString>
28 #include "Model_Artwork.h"
30 ///////////////////////////////////////////////////////////////////////////////
31 // Audio File - Meta Info
32 ///////////////////////////////////////////////////////////////////////////////
34 class AudioFileModel_MetaInfo : public QObject
36 Q_OBJECT
38 public:
39 //Constructors & Destructor
40 AudioFileModel_MetaInfo(void);
41 AudioFileModel_MetaInfo(const AudioFileModel_MetaInfo &model);
42 AudioFileModel_MetaInfo &operator=(const AudioFileModel_MetaInfo &model);
43 ~AudioFileModel_MetaInfo(void);
45 //Getter
46 inline const QString &title(void) const { return m_titel; }
47 inline const QString &artist(void) const { return m_artist; }
48 inline const QString &album(void) const { return m_album; }
49 inline const QString &genre(void) const { return m_genre; }
50 inline const QString &comment(void) const { return m_comment; }
51 inline const QString &cover(void) const { return m_cover.filePath(); }
52 inline unsigned int year(void) const { return m_year; }
53 inline unsigned int position(void) const { return m_position; }
55 //Setter
56 inline void setTitle(const QString &titel) { m_titel = titel.trimmed(); }
57 inline void setArtist(const QString &artist) { m_artist = artist.trimmed(); }
58 inline void setAlbum(const QString &album) { m_album = album.trimmed(); }
59 inline void setGenre(const QString &genre) { m_genre = genre.trimmed(); }
60 inline void setComment(const QString &comment) { m_comment = comment.trimmed(); }
61 inline void setCover(const QString &path, const bool isOwner) { m_cover.setFilePath(path, isOwner); }
62 inline void setYear(const unsigned int year) { m_year = year; }
63 inline void setPosition(const unsigned int position) { m_position = position; }
65 //Is empty?
66 bool empty(const bool &ignoreArtwork) const;
68 //Reset
69 void reset(void);
71 //Update
72 void update(const AudioFileModel_MetaInfo &model, const bool replace);
74 //Debug
75 void print(void) const;
77 private:
78 QString m_titel;
79 QString m_artist;
80 QString m_album;
81 QString m_genre;
82 QString m_comment;
83 ArtworkModel m_cover;
84 unsigned int m_year;
85 unsigned int m_position;
88 ///////////////////////////////////////////////////////////////////////////////
89 // Audio File - Technical Info
90 ///////////////////////////////////////////////////////////////////////////////
92 class AudioFileModel_TechInfo : public QObject
94 Q_OBJECT
96 public:
97 //Constructors & Destructor
98 AudioFileModel_TechInfo(void);
99 AudioFileModel_TechInfo(const AudioFileModel_TechInfo &model);
100 AudioFileModel_TechInfo &operator=(const AudioFileModel_TechInfo &model);
101 ~AudioFileModel_TechInfo(void);
103 //Getter
104 inline const QString &containerType(void) const { return m_containerType; }
105 inline const QString &containerProfile(void) const { return m_containerProfile; }
106 inline const QString &audioType(void) const { return m_audioType; }
107 inline const QString &audioProfile(void) const { return m_audioProfile; }
108 inline const QString &audioVersion(void) const { return m_audioVersion; }
109 inline const QString &audioEncodeLib(void) const { return m_audioEncodeLib; }
110 inline unsigned int audioSamplerate(void) const { return m_audioSamplerate; }
111 inline unsigned int audioChannels(void) const { return m_audioChannels; }
112 inline unsigned int audioBitdepth(void) const { return m_audioBitdepth; }
113 inline unsigned int audioBitrate(void) const { return m_audioBitrate; }
114 inline unsigned int audioBitrateMode(void) const { return m_audioBitrateMode; }
115 inline unsigned int duration(void) const { return m_duration; }
117 //Setter
118 inline void setContainerType(const QString &containerType) { m_containerType = containerType.trimmed(); }
119 inline void setContainerProfile(const QString &containerProfile) { m_containerProfile = containerProfile.trimmed(); }
120 inline void setAudioType(const QString &audioType) { m_audioType = audioType.trimmed(); }
121 inline void setAudioProfile(const QString &audioProfile) { m_audioProfile = audioProfile.trimmed(); }
122 inline void setAudioVersion(const QString &audioVersion) { m_audioVersion = audioVersion.trimmed(); }
123 inline void setAudioEncodeLib(const QString &audioEncodeLib) { m_audioEncodeLib = audioEncodeLib.trimmed(); }
124 inline void setAudioSamplerate(const unsigned int audioSamplerate) { m_audioSamplerate = audioSamplerate; }
125 inline void setAudioChannels(const unsigned int audioChannels) { m_audioChannels = audioChannels; }
126 inline void setAudioBitdepth(const unsigned int audioBitdepth) { m_audioBitdepth = audioBitdepth; }
127 inline void setAudioBitrate(const unsigned int audioBitrate) { m_audioBitrate = audioBitrate; }
128 inline void setAudioBitrateMode(const unsigned int audioBitrateMode) { m_audioBitrateMode = audioBitrateMode; }
129 inline void setDuration(const unsigned int duration) { m_duration = duration; }
131 //Reset
132 void reset(void);
134 private:
135 QString m_containerType;
136 QString m_containerProfile;
137 QString m_audioType;
138 QString m_audioProfile;
139 QString m_audioVersion;
140 QString m_audioEncodeLib;
141 unsigned int m_audioSamplerate;
142 unsigned int m_audioChannels;
143 unsigned int m_audioBitdepth;
144 unsigned int m_audioBitrate;
145 unsigned int m_audioBitrateMode;
146 unsigned int m_duration;
149 ///////////////////////////////////////////////////////////////////////////////
150 // Audio File Model
151 ///////////////////////////////////////////////////////////////////////////////
153 class AudioFileModel : public QObject
155 Q_OBJECT
157 public:
158 //Types
159 enum BitrateMode
161 BitrateModeUndefined = 0,
162 BitrateModeConstant = 1,
163 BitrateModeVariable = 2,
166 //Constants
167 static const unsigned int BITDEPTH_IEEE_FLOAT32;
169 //Constructors & Destructor
170 AudioFileModel(const QString &path = QString());
171 AudioFileModel(const AudioFileModel &model);
172 AudioFileModel &operator=(const AudioFileModel &model);
173 ~AudioFileModel(void);
175 //Getter
176 inline const QString &filePath(void) const { return m_filePath; }
177 inline const AudioFileModel_MetaInfo &metaInfo(void) const { return m_metaInfo; }
178 inline const AudioFileModel_TechInfo &techInfo(void) const { return m_techInfo; }
179 inline AudioFileModel_MetaInfo &metaInfo(void) { return m_metaInfo; }
180 inline AudioFileModel_TechInfo &techInfo(void) { return m_techInfo; }
182 //Setter
183 inline void setFilePath(const QString &filePath) { m_filePath = filePath; }
184 inline void setMetaInfo(const AudioFileModel_MetaInfo &metaInfo) { m_metaInfo = metaInfo; }
185 inline void setTechInfo(const AudioFileModel_TechInfo &techInfo) { m_techInfo = techInfo; }
187 //Helpers
188 const QString durationInfo(void) const;
189 const QString containerInfo(void) const;
190 const QString audioBaseInfo(void) const;
191 const QString audioCompressInfo(void) const;
193 //Reset
194 void reset(void);
196 private:
197 QString m_filePath;
198 AudioFileModel_MetaInfo m_metaInfo;
199 AudioFileModel_TechInfo m_techInfo;