OSDN Git Service

Set creation/modified time of the encoded file the same value as the original file...
[lamexp/LameXP.git] / src / Model_AudioFile.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // LameXP - Audio Encoder Front-End
3 // Copyright (C) 2004-2015 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.
10 //
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.
15 //
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.
19 //
20 // http://www.gnu.org/licenses/gpl-2.0.txt
21 ///////////////////////////////////////////////////////////////////////////////
22
23 #pragma once
24
25 #include <QObject>
26 #include <QString>
27
28 #include "Model_Artwork.h"
29
30 ///////////////////////////////////////////////////////////////////////////////
31 // Audio File - Meta Info
32 ///////////////////////////////////////////////////////////////////////////////
33
34 class AudioFileModel_MetaInfo : public QObject
35 {
36         Q_OBJECT
37
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);
44
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; }
54
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; }
64
65         //Is empty?
66         bool empty(const bool &ignoreArtwork) const;
67
68         //Reset
69         void reset(void);
70
71         //Update
72         void update(const AudioFileModel_MetaInfo &model, const bool replace);
73
74         //Debug
75         void print(void) const;
76
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;
86 };
87
88 ///////////////////////////////////////////////////////////////////////////////
89 // Audio File - Technical Info
90 ///////////////////////////////////////////////////////////////////////////////
91
92 class AudioFileModel_TechInfo : public QObject
93 {
94         Q_OBJECT
95
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);
102
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; }
116
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; }
130
131         //Reset
132         void reset(void);
133
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;
147 };
148
149 ///////////////////////////////////////////////////////////////////////////////
150 // Audio File Model
151 ///////////////////////////////////////////////////////////////////////////////
152
153 class AudioFileModel : public QObject
154 {
155         Q_OBJECT
156
157 public:
158         //Types
159         enum BitrateMode
160         {
161                 BitrateModeUndefined = 0,
162                 BitrateModeConstant = 1,
163                 BitrateModeVariable = 2,
164         };
165
166         //Constants
167         static const unsigned int BITDEPTH_IEEE_FLOAT32;
168
169         //Constructors & Destructor
170         AudioFileModel(const QString &path = QString());
171         AudioFileModel(const AudioFileModel &model);
172         AudioFileModel &operator=(const AudioFileModel &model);
173         ~AudioFileModel(void);
174
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; }
181
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; }
186
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;
192
193         //Reset
194         void reset(void);
195
196 private:
197         QString m_filePath;
198         AudioFileModel_MetaInfo m_metaInfo;
199         AudioFileModel_TechInfo m_techInfo;
200 };