DCL 4.0
Loading...
Searching...
No Matches
ID3v2.h
Go to the documentation of this file.
1#ifndef __DCL_ID3V2_H__
2#define __DCL_ID3V2_H__ 20250118
3
4#ifndef __DCL_OBJECT_H__
5#include <dcl/Object.h>
6#endif
7#ifndef __DCL_ARRAY_H__
8#include <dcl/Array.h>
9#endif
10
11__DCL_BEGIN_NAMESPACE
12
13class File;
14
15class ID3v2 : public Object
16{
18
19public:
20 ID3v2();
21 ~ID3v2();
22
27 static uint32_t word7(const char* _bytes, size_t _n);
28
33 static uint32_t word8(const char* _bytes, size_t _n);
34
49 bool read(File& _file, const char _header[10]);
50
51 virtual String toString() const;
52
53 const String& ID3() const {
54 return __ID3;
55 }
56
57 char version() const {
58 return __header[3];
59 }
60
61 char revision() const {
62 return __header[4];
63 }
64
65 char flags() const {
66 return __header[5];
67 }
68
69 uint32_t size() const {
70 return __size;
71 }
72
73 // frame size에 사용된 bits의 수
74 // 0 7 8
75 unsigned fsbits() const {
76 return __fsbits;
77 }
78
79 const PointerArray& frames() const {
80 return __frames;
81 }
82
83protected:
84
85 size_t skipExtendedHeader(
86 const char* _begin,
87 const char* _end
88 ) const;
89
90#define Unsynchronisation(flags) flags & 0x0080
91#define Extended_header(flags) flags & 0x0040
92#define Experimental_indicator(flags) flags & 0x0020
93#define Footer_present(flags) flags & 0x0010
94
95 char __header[10];
96
97 unsigned __fsbits;
98
99
100 char* __data;
101
105 String __ID3;
106
110 uint32_t __size;
111
112 PointerArray __frames;
113
114};
115
116class ID3v2Frame : public Object
117{
119protected:
120 String decode(
121 char _encoding,
122 const char* _mbs, size_t _nmbs
123 ) const;
124
125public:
126 ID3v2Frame(const ID3v2& _tag);
127
128 uint32_t word(const char* _bytes, size_t _n) {
129 return __tag.fsbits() == 7 ?
130 ID3v2::word7(_bytes, _n)
131 : ID3v2::word8(_bytes, _n);
132 }
133
134 size_t read(const char* _begin, const char* _end);
135
136 virtual String toString() const;
137
138 const ID3v2& tag() const {
139 return __tag;
140 }
141
142 const String id() const {
143 return __id;
144 }
145
146 uint32_t size() const {
147 return __size;
148 }
149
150 short flags() const {
151 return __flags;
152 }
153
154 char encoding() const {
155 return __encoding;
156 }
157
158 char type() const {
159 return __type;
160 }
161
162 const String& url() const {
163 return __url;
164 }
165
166 const String& description() const {
167 return __description;
168 }
169
170 const String& text() const {
171 return __text;
172 }
173
174 const ByteString& binary() const {
175 return __binary;
176 }
177
178protected:
179
180 const ID3v2& __tag;
181
182 // Frame ID
183 String __id;
184
185 // Frame header 10 bytes를 제외한 프레임 데이터 크기
186 uint32_t __size;
187
188 short __flags;
189
190 // ISO-8859-1(0) UTF-16LE(1) UTF-16BE(2) UTF-8(3)
192 // Picture type
193 char __type;
194
195 // URL, MIME, lang
196 String __url;
198 String __text;
199 ByteString __binary;
200
201};
202
203__DCL_END_NAMESPACE
204
205#endif // __DCL_ID3V2_H__
#define DECLARE_CLASSINFO(class_name)
Definition Object.h:210
Definition File.h:38
String __url
Definition ID3v2.h:196
uint32_t size() const
Definition ID3v2.h:146
ID3v2Frame(const ID3v2 &_tag)
uint32_t word(const char *_bytes, size_t _n)
Definition ID3v2.h:128
short __flags
Definition ID3v2.h:188
const ID3v2 & __tag
Definition ID3v2.h:180
char type() const
Definition ID3v2.h:158
short flags() const
Definition ID3v2.h:150
ByteString __binary
Definition ID3v2.h:199
char __encoding
Definition ID3v2.h:191
const String & url() const
Definition ID3v2.h:162
String __id
Definition ID3v2.h:183
String __text
Definition ID3v2.h:198
const String id() const
Definition ID3v2.h:142
char encoding() const
Definition ID3v2.h:154
uint32_t __size
Definition ID3v2.h:186
const ID3v2 & tag() const
Definition ID3v2.h:138
const String & description() const
Definition ID3v2.h:166
const String & text() const
Definition ID3v2.h:170
String __description
Definition ID3v2.h:197
const ByteString & binary() const
Definition ID3v2.h:174
virtual String toString() const
Definition ID3v2.cpp:596
size_t read(const char *_begin, const char *_end)
Definition ID3v2.cpp:383
char __type
Definition ID3v2.h:193
Definition ID3v2.h:16
unsigned __fsbits
Definition ID3v2.h:97
char __header[10]
Definition ID3v2.h:95
size_t skipExtendedHeader(const char *_begin, const char *_end) const
Definition ID3v2.cpp:271
char * __data
Definition ID3v2.h:100
String __ID3
Definition ID3v2.h:105
uint32_t __size
Definition ID3v2.h:110
PointerArray __frames
Definition ID3v2.h:112
Object()
Definition Object.cpp:183
virtual String toString() const
Definition Object.cpp:187