OSDN Git Service

Major redesign of the AudioFileModel class: Split data into separate AudioFileModel_M...
[lamexp/LameXP.git] / src / Model_AudioFile.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // LameXP - Audio Encoder Front-End
3 // Copyright (C) 2004-2013 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.
14 //
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.
18 //
19 // http://www.gnu.org/licenses/gpl-2.0.txt
20 ///////////////////////////////////////////////////////////////////////////////
21
22 #pragma once
23
24 #include <QObject>
25 #include <QString>
26
27 #include "Model_Artwork.h"
28
29 ///////////////////////////////////////////////////////////////////////////////
30 // Audio File - Meta Info
31 ///////////////////////////////////////////////////////////////////////////////
32
33 class AudioFileModel_MetaInfo : public QObject
34 {
35         Q_OBJECT
36
37 public:
38         //Constructors & Destructor
39         AudioFileModel_MetaInfo(void);
40         AudioFileModel_MetaInfo(const AudioFileModel_MetaInfo &model);
41         AudioFileModel_MetaInfo &operator=(const AudioFileModel_MetaInfo &model);
42         ~AudioFileModel_MetaInfo(void);
43
44         //Getter
45         inline const QString &title(void) const { return m_titel; }
46         inline const QString &artist(void) const { return m_artist; }
47         inline const QString &album(void) const { return m_album; }
48         inline const QString &genre(void) const { return m_genre; }
49         inline const QString &comment(void) const { return m_comment; }
50         inline const QString &cover(void) const { return m_cover.filePath(); }
51         inline unsigned int year(void) const { return m_year; }
52         inline unsigned int position(void) const { return m_position; }
53         inline unsigned int duration(void) const { return m_duration; }
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 const ArtworkModel &cover(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         inline void setDuration(const unsigned int duration) { m_duration = duration; }
65
66         //Reset
67         void reset(void);
68
69 private:
70         QString m_titel;
71         QString m_artist;
72         QString m_album;
73         QString m_genre;
74         QString m_comment;
75         ArtworkModel m_cover;
76         unsigned int m_year;
77         unsigned int m_position;
78         unsigned int m_duration;
79 };
80
81 ///////////////////////////////////////////////////////////////////////////////
82 // Audio File - Technical Info
83 ///////////////////////////////////////////////////////////////////////////////
84
85 class AudioFileModel_TechInfo : public QObject
86 {
87         Q_OBJECT
88
89 public:
90         //Constructors & Destructor
91         AudioFileModel_TechInfo(void);
92         AudioFileModel_TechInfo(const AudioFileModel_TechInfo &model);
93         AudioFileModel_TechInfo &operator=(const AudioFileModel_TechInfo &model);
94         ~AudioFileModel_TechInfo(void);
95
96         //Getter
97         inline const QString &containerType(void) const { return m_containerType; }
98         inline const QString &containerProfile(void) const { return m_containerProfile; }
99         inline const QString &audioType(void) const { return m_audioType; }
100         inline const QString &audioProfile(void) const { return m_audioProfile; }
101         inline const QString &audioVersion(void) const { return m_audioVersion; }
102         inline const QString &audioEncodeLib(void) const { return m_audioEncodeLib; }
103         inline unsigned int audioSamplerate(void) const { return m_audioSamplerate; }
104         inline unsigned int audioChannels(void) const { return m_audioChannels; }
105         inline unsigned int audioBitdepth(void) const { return m_audioBitdepth; }
106         inline unsigned int audioBitrate(void) const { return m_audioBitrate; }
107         inline unsigned int audioBitrateMode(void) const { return m_audioBitrateMode; }
108
109         //Setter
110         inline const QString &setContainerType(const QString &containerType) { m_containerType = containerType; }
111         inline const QString &setContainerProfile(const QString &containerProfile) { m_containerProfile = containerProfile; }
112         inline const QString &setAudioType(const QString &audioType) { m_audioType = audioType; }
113         inline const QString &setAudioProfile(const QString &audioProfile) { m_audioProfile = audioProfile; }
114         inline const QString &setAudioVersion(const QString &audioVersion) { m_audioVersion = audioVersion; }
115         inline const QString &setAudioEncodeLib(const QString &audioEncodeLib) { m_audioEncodeLib = audioEncodeLib; }
116         inline unsigned int setAudioSamplerate(const unsigned int audioSamplerate) { m_audioSamplerate = audioSamplerate; }
117         inline unsigned int setAudioChannels(const unsigned int audioChannels) { m_audioChannels = audioChannels; }
118         inline unsigned int setAudioBitdepth(const unsigned int audioBitdepth) { m_audioBitdepth = audioBitdepth; }
119         inline unsigned int setAudioBitrate(const unsigned int audioBitrate) { m_audioBitrate = audioBitrate; }
120         inline unsigned int setAudioBitrateMode(const unsigned int audioBitrateMode) { m_audioBitrateMode = audioBitrateMode; }
121
122         //Reset
123         void reset(void);
124
125 private:
126         QString m_containerType;
127         QString m_containerProfile;
128         QString m_audioType;
129         QString m_audioProfile;
130         QString m_audioVersion;
131         QString m_audioEncodeLib;
132         unsigned int m_audioSamplerate;
133         unsigned int m_audioChannels;
134         unsigned int m_audioBitdepth;
135         unsigned int m_audioBitrate;
136         unsigned int m_audioBitrateMode;
137 };
138
139 ///////////////////////////////////////////////////////////////////////////////
140 // Audio File Model
141 ///////////////////////////////////////////////////////////////////////////////
142
143 class AudioFileModel : public QObject
144 {
145         Q_OBJECT
146
147 public:
148         //Types
149         enum BitrateMode
150         {
151                 BitrateModeUndefined = 0,
152                 BitrateModeConstant = 1,
153                 BitrateModeVariable = 2,
154         };
155
156         //Constants
157         static const unsigned int BITDEPTH_IEEE_FLOAT32;
158
159         //Constructors & Destructor
160         AudioFileModel(const QString &path);
161         AudioFileModel(const AudioFileModel &model);
162         AudioFileModel &operator=(const AudioFileModel &model);
163         ~AudioFileModel(void);
164
165         //Getter
166         inline const QString &filePath(void) const { return m_filePath; }
167         inline const AudioFileModel_MetaInfo &metaInfo(void) const { return m_metaInfo; }
168         inline const AudioFileModel_TechInfo &techInfo(void) const { return m_techInfo; }
169         inline AudioFileModel_MetaInfo &metaInfo(void) { return m_metaInfo; }
170         inline AudioFileModel_TechInfo &techInfo(void) { return m_techInfo; }
171
172         //Setter
173         inline const QString &setFilePath(const QString &filePath) { m_filePath = filePath; }
174         inline void setMetaInfo(const AudioFileModel_MetaInfo &metaInfo) { m_metaInfo = metaInfo; }
175         inline void setTechInfo(const AudioFileModel_TechInfo &techInfo) { m_techInfo = techInfo; }
176
177         //Helpers
178         const QString durationInfo(void) const;
179         const QString containerInfo(void) const;
180         const QString audioBaseInfo(void) const;
181         const QString audioCompressInfo(void) const;
182
183         //Reset
184         void reset(void);
185
186 private:
187         QString m_filePath;
188         AudioFileModel_MetaInfo m_metaInfo;
189         AudioFileModel_TechInfo m_techInfo;
190 };