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