DCL 3.7.4
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 size_t skipExtendedHeader(
85 const char* _begin,
86 const char* _end
87 ) const;
88
89#define Unsynchronisation(flags) flags & 0x0080
90#define Extended_header(flags) flags & 0x0040
91#define Experimental_indicator(flags) flags & 0x0020
92#define Footer_present(flags) flags & 0x0010
93
94 char __header[10];
95 unsigned __fsbits;
96 char* __data;
97
101 String __ID3;
102
106 uint32_t __size;
107 PointerArray __frames;
108
109};
110
111class ID3v2Frame : public Object
112{
114protected:
115 String decode(
116 char _encoding,
117 const char* _mbs, size_t _nmbs
118 ) const;
119
120public:
121 ID3v2Frame(const ID3v2& _tag);
122
123 uint32_t word(const char* _bytes, size_t _n) {
124 return __tag.fsbits() == 7 ?
125 ID3v2::word7(_bytes, _n) : ID3v2::word8(_bytes, _n);
126 }
127
128 size_t read(const char* _begin, const char* _end);
129
130 virtual String toString() const;
131
132 const ID3v2& tag() const {
133 return __tag;
134 }
135
136 const String id() const {
137 return __id;
138 }
139
140 uint32_t size() const {
141 return __size;
142 }
143
144 short flags() const {
145 return __flags;
146 }
147
148 char encoding() const {
149 return __encoding;
150 }
151
152 char type() const {
153 return __type;
154 }
155
156 const String& url() const {
157 return __url;
158 }
159
160 const String& description() const {
161 return __description;
162 }
163
164 const String& text() const {
165 return __text;
166 }
167
168 const ByteString& binary() const {
169 return __binary;
170 }
171
172protected:
173
174 const ID3v2& __tag;
175
176 // Frame ID
177 String __id;
178
179 // Frame header 10 bytes를 제외한 프레임 데이터 크기
180 uint32_t __size;
181
182 short __flags;
183
184 // ISO-8859-1(0) UTF-16LE(1) UTF-16BE(2) UTF-8(3)
186 // Picture type
187 char __type;
188
189 // URL, MIME, lang
190 String __url;
192 String __text;
193 ByteString __binary;
194
195};
196
197__DCL_END_NAMESPACE
198
199#endif // __DCL_ID3V2_H__
#define DECLARE_CLASSINFO(class_name)
Definition Object.h:227
Definition File.h:42
String __url
Definition ID3v2.h:190
uint32_t size() const
Definition ID3v2.h:140
ID3v2Frame(const ID3v2 &_tag)
uint32_t word(const char *_bytes, size_t _n)
Definition ID3v2.h:123
short __flags
Definition ID3v2.h:182
const ID3v2 & __tag
Definition ID3v2.h:174
char type() const
Definition ID3v2.h:152
short flags() const
Definition ID3v2.h:144
ByteString __binary
Definition ID3v2.h:193
char __encoding
Definition ID3v2.h:185
const String & url() const
Definition ID3v2.h:156
String __id
Definition ID3v2.h:177
String __text
Definition ID3v2.h:192
const String id() const
Definition ID3v2.h:136
char encoding() const
Definition ID3v2.h:148
uint32_t __size
Definition ID3v2.h:180
const ID3v2 & tag() const
Definition ID3v2.h:132
const String & description() const
Definition ID3v2.h:160
const String & text() const
Definition ID3v2.h:164
String __description
Definition ID3v2.h:191
const ByteString & binary() const
Definition ID3v2.h:168
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:187
Definition ID3v2.h:16
unsigned __fsbits
Definition ID3v2.h:95
char __header[10]
Definition ID3v2.h:94
size_t skipExtendedHeader(const char *_begin, const char *_end) const
Definition ID3v2.cpp:271
char * __data
Definition ID3v2.h:96
String __ID3
Definition ID3v2.h:101
uint32_t __size
Definition ID3v2.h:106
PointerArray __frames
Definition ID3v2.h:107
Object()
Definition Object.cpp:183
virtual String toString() const
Definition Object.cpp:187