id3lib-ruby 0.3.0-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +28 -0
- data/README +95 -0
- data/Rakefile +119 -0
- data/TODO +4 -0
- data/ext/mswin32/id3lib_api.so +0 -0
- data/lib/id3lib.rb +384 -0
- data/lib/id3lib/accessors.rb +103 -0
- data/lib/id3lib/info.rb +389 -0
- data/setup.rb +1585 -0
- data/test/data/cover.jpg +0 -0
- data/test/data/sample.mp3 +0 -0
- data/test/data/unicode.mp3 +0 -0
- data/test/test_reading.rb +70 -0
- data/test/test_writing.rb +237 -0
- metadata +64 -0
@@ -0,0 +1,103 @@
|
|
1
|
+
|
2
|
+
module ID3Lib
|
3
|
+
|
4
|
+
#
|
5
|
+
# The Accessors module defines accessor methods for ID3 text frames.
|
6
|
+
#
|
7
|
+
# === Most used accessors
|
8
|
+
#
|
9
|
+
# Here's a list of the most used accessors:
|
10
|
+
#
|
11
|
+
# * #title
|
12
|
+
# * #performer or #artist
|
13
|
+
# * #album
|
14
|
+
# * #genre or #content_type
|
15
|
+
# * #year
|
16
|
+
# * #track
|
17
|
+
# * #part_of_set or #disc
|
18
|
+
# * #comment or #comment_frames
|
19
|
+
# * #composer
|
20
|
+
# * #bpm
|
21
|
+
#
|
22
|
+
module Accessors
|
23
|
+
|
24
|
+
def title() frame_text(:TIT2) end
|
25
|
+
def title=(v) set_frame_text(:TIT2, v) end
|
26
|
+
|
27
|
+
def performer() frame_text(:TPE1) end
|
28
|
+
def performer=(v) set_frame_text(:TPE1, v) end
|
29
|
+
alias artist performer
|
30
|
+
alias artist= performer=
|
31
|
+
|
32
|
+
def album() frame_text(:TALB) end
|
33
|
+
def album=(v) set_frame_text(:TALB, v) end
|
34
|
+
|
35
|
+
def genre() frame_text(:TCON) end
|
36
|
+
def genre=(v) set_frame_text(:TCON, v) end
|
37
|
+
alias content_type genre
|
38
|
+
alias content_type= genre=
|
39
|
+
|
40
|
+
def year() frame_text(:TYER) end
|
41
|
+
def year=(v) set_frame_text(:TYER, v) end
|
42
|
+
|
43
|
+
def track() frame_text(:TRCK) end
|
44
|
+
def track=(v) set_frame_text(:TRCK, v) end
|
45
|
+
|
46
|
+
def part_of_set() frame_text(:TPOS) end
|
47
|
+
def part_of_set=(v) set_frame_text(:TPOS, v) end
|
48
|
+
alias disc part_of_set
|
49
|
+
alias disc= part_of_set=
|
50
|
+
|
51
|
+
def comment() frame_text(:COMM) end
|
52
|
+
def comment=(v) set_frame_text(:COMM, v) end
|
53
|
+
|
54
|
+
# Returns an array of comment frames.
|
55
|
+
def comment_frames() select{ |f| f[:id] == :COMM } end
|
56
|
+
|
57
|
+
def composer() frame_text(:TCOM) end
|
58
|
+
def composer=(v) set_frame_text(:TCOM, v) end
|
59
|
+
|
60
|
+
def grouping() frame_text(:TIT1) end
|
61
|
+
def grouping=(v) set_frame_text(:TIT1, v) end
|
62
|
+
|
63
|
+
def bpm() frame_text(:TBPM) end
|
64
|
+
def bpm=(v) set_frame_text(:TBPM, v.to_s) end
|
65
|
+
|
66
|
+
def subtitle() frame_text(:TIT3) end
|
67
|
+
def subtitle=(v) set_frame_text(:TIT3, v) end
|
68
|
+
|
69
|
+
def date() frame_text(:TDAT) end
|
70
|
+
def date=(v) set_frame_text(:TDAT, v) end
|
71
|
+
|
72
|
+
def time() frame_text(:TIME) end
|
73
|
+
def time=(v) set_frame_text(:TIME, v) end
|
74
|
+
|
75
|
+
def language() frame_text(:TLAN) end
|
76
|
+
def language=(v) set_frame_text(:TLAN, v) end
|
77
|
+
|
78
|
+
def lyrics() frame_text(:USLT) end
|
79
|
+
def lyrics=(v) set_frame_text(:USLT, v) end
|
80
|
+
|
81
|
+
def lyricist() frame_text(:TEXT) end
|
82
|
+
def lyricist=(v) set_frame_text(:TEXT, v) end
|
83
|
+
|
84
|
+
def band() frame_text(:TPE2) end
|
85
|
+
def band=(v) set_frame_text(:TPE2, v) end
|
86
|
+
|
87
|
+
def conductor() frame_text(:TPE3) end
|
88
|
+
def conductor=(v) set_frame_text(:TPE3, v) end
|
89
|
+
|
90
|
+
def interpreted_by() frame_text(:TPE4) end
|
91
|
+
def interpreted_by=(v) set_frame_text(:TPE4, v) end
|
92
|
+
alias remixed_by interpreted_by
|
93
|
+
alias remixed_by= interpreted_by=
|
94
|
+
|
95
|
+
def publisher() frame_text(:TPUB) end
|
96
|
+
def publisher=(v) set_frame_text(:TPUB, v) end
|
97
|
+
|
98
|
+
def encoded_by() frame_text(:TENC) end
|
99
|
+
def encoded_by=(v) set_frame_text(:TENC, v) end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
data/lib/id3lib/info.rb
ADDED
@@ -0,0 +1,389 @@
|
|
1
|
+
|
2
|
+
module ID3Lib
|
3
|
+
|
4
|
+
#
|
5
|
+
# Use this module to obtain information about ID3 frames, fields and genres.
|
6
|
+
#
|
7
|
+
# === Frame information
|
8
|
+
#
|
9
|
+
# Access the information through the #frame function or
|
10
|
+
# through direct access on the Frames array.
|
11
|
+
#
|
12
|
+
# For example to get all the frames which take a :textenc and a :text field:
|
13
|
+
#
|
14
|
+
# ID3Lib::Info::Frames.select{ |f| f[3] == [:textenc, :text] }
|
15
|
+
#
|
16
|
+
# The frame information is stored in an array. Let's have a look at it:
|
17
|
+
#
|
18
|
+
# f = ID3Lib::Info.frame(:AENC)
|
19
|
+
#
|
20
|
+
# f[0] #=> 1
|
21
|
+
# #=> internal ID for id3lib
|
22
|
+
#
|
23
|
+
# f[1] #=> :AENC
|
24
|
+
# #=> frame ID as specified in ID3 standard
|
25
|
+
#
|
26
|
+
# f[2] #=> "Audio encryption"
|
27
|
+
# #=> description according to id3lib
|
28
|
+
#
|
29
|
+
# f[3] #=> [:owner, :data]
|
30
|
+
# #=> IDs of fields allowed in that frame
|
31
|
+
#
|
32
|
+
# === Field information
|
33
|
+
#
|
34
|
+
# Use the #field function or the Fields array to access field information.
|
35
|
+
#
|
36
|
+
# The array for a field is:
|
37
|
+
#
|
38
|
+
# f = ID3Lib::Info.field(:text)
|
39
|
+
#
|
40
|
+
# f[0] #=> 2
|
41
|
+
# #=> internal ID
|
42
|
+
#
|
43
|
+
# f[1] #=> :text
|
44
|
+
# #=> field ID
|
45
|
+
#
|
46
|
+
# f[2] #=> "Text field"
|
47
|
+
# #=> description
|
48
|
+
#
|
49
|
+
# === Genre information
|
50
|
+
#
|
51
|
+
# Genre information is useful if you want to set the genre of an ID3v1 tag
|
52
|
+
# or to get an overview of genres.
|
53
|
+
#
|
54
|
+
# ID3Lib::Info::Genres.index("Pop") #=> 13
|
55
|
+
#
|
56
|
+
module Info
|
57
|
+
|
58
|
+
#
|
59
|
+
# Please note that these frames are not fully supported by id3lib:
|
60
|
+
# AENC, ASPI, COMR, EQUA, ETCO, LINK, MLLT,
|
61
|
+
# OWNE, POSS, RBUF, RVA2, RVAD, RVRB, SEEK
|
62
|
+
#
|
63
|
+
Frames = [
|
64
|
+
# Special frames
|
65
|
+
[0, :____, "No known frame", []],
|
66
|
+
[1, :AENC, "Audio encryption", [:owner, :data]],
|
67
|
+
[2, :APIC, "Attached picture", [:textenc, :mimetype, :picturetype, :description, :data]],
|
68
|
+
[3, :ASPI, "Audio seek point index", [:data]],
|
69
|
+
[4, :COMM, "Comments", [:textenc, :language, :description, :text]],
|
70
|
+
[5, :COMR, "Commercial frame", [:data]],
|
71
|
+
[6, :ENCR, "Encryption method registration", [:owner, :id, :data]],
|
72
|
+
[7, :EQU2, "Equalisation (2)", [:id, :text]],
|
73
|
+
[8, :EQUA, "Equalization", [:data]],
|
74
|
+
[9, :ETCO, "Event timing codes", [:data]],
|
75
|
+
[10, :GEOB, "General encapsulated object", [:textenc, :mimetype, :filename, :description, :data]],
|
76
|
+
[11, :GRID, "Group identification registration", [:owner, :id, :data]],
|
77
|
+
[12, :IPLS, "Involved people list", [:textenc, :text]],
|
78
|
+
[13, :LINK, "Linked information", [:data]],
|
79
|
+
[14, :MCDI, "Music CD identifier", [:data]],
|
80
|
+
[15, :MLLT, "MPEG location lookup table", [:data]],
|
81
|
+
[16, :OWNE, "Ownership frame", [:data]],
|
82
|
+
[17, :PRIV, "Private frame", [:owner, :data]],
|
83
|
+
[18, :PCNT, "Play counter", [:counter]],
|
84
|
+
[19, :POPM, "Popularimeter", [:email, :rating, :counter]],
|
85
|
+
[20, :POSS, "Position synchronisation frame", [:data]],
|
86
|
+
[21, :RBUF, "Recommended buffer size", [:data]],
|
87
|
+
[22, :RVA2, "Relative volume adjustment (2)", [:data]],
|
88
|
+
[23, :RVAD, "Relative volume adjustment", [:data]],
|
89
|
+
[24, :RVRB, "Reverb", [:data]],
|
90
|
+
[25, :SEEK, "Seek frame", [:data]],
|
91
|
+
[26, :SIGN, "Signature frame", [:id, :data]],
|
92
|
+
[27, :SYLT, "Synchronized lyric/text", [:textenc, :language, :timestampformat, :contenttype, :description, :data]],
|
93
|
+
[28, :SYTC, "Synchronized tempo codes", [:timestampformat, :data]],
|
94
|
+
# Text information frames
|
95
|
+
[29, :TALB, "Album/Movie/Show title", [:textenc, :text]],
|
96
|
+
[30, :TBPM, "BPM (beats per minute)", [:textenc, :text]],
|
97
|
+
[31, :TCOM, "Composer", [:textenc, :text]],
|
98
|
+
[32, :TCON, "Content type", [:textenc, :text]],
|
99
|
+
[33, :TCOP, "Copyright message", [:textenc, :text]],
|
100
|
+
[34, :TDAT, "Date", [:textenc, :text]],
|
101
|
+
[35, :TDEN, "Encoding time", [:textenc, :text]],
|
102
|
+
[36, :TDLY, "Playlist delay", [:textenc, :text]],
|
103
|
+
[37, :TDOR, "Original release time", [:textenc, :text]],
|
104
|
+
[38, :TDRC, "Recording time", [:textenc, :text]],
|
105
|
+
[39, :TDRL, "Release time", [:textenc, :text]],
|
106
|
+
[40, :TDTG, "Tagging time", [:textenc, :text]],
|
107
|
+
[41, :TIPL, "Involved people list", [:textenc, :text]],
|
108
|
+
[42, :TENC, "Encoded by", [:textenc, :text]],
|
109
|
+
[43, :TEXT, "Lyricist/Text writer", [:textenc, :text]],
|
110
|
+
[44, :TFLT, "File type", [:textenc, :text]],
|
111
|
+
[45, :TIME, "Time", [:textenc, :text]],
|
112
|
+
[46, :TIT1, "Content group description", [:textenc, :text]],
|
113
|
+
[47, :TIT2, "Title/songname/content description", [:textenc, :text]],
|
114
|
+
[48, :TIT3, "Subtitle/Description refinement", [:textenc, :text]],
|
115
|
+
[49, :TKEY, "Initial key", [:textenc, :text]],
|
116
|
+
[50, :TLAN, "Language(s)", [:textenc, :text]],
|
117
|
+
[51, :TLEN, "Length", [:textenc, :text]],
|
118
|
+
[52, :TMCL, "Musician credits list", [:textenc, :text]],
|
119
|
+
[53, :TMED, "Media type", [:textenc, :text]],
|
120
|
+
[54, :TMOO, "Mood", [:textenc, :text]],
|
121
|
+
[55, :TOAL, "Original album/movie/show title", [:textenc, :text]],
|
122
|
+
[56, :TOFN, "Original filename", [:textenc, :text]],
|
123
|
+
[57, :TOLY, "Original lyricist(s)/text writer(s)", [:textenc, :text]],
|
124
|
+
[58, :TOPE, "Original artist(s)/performer(s)", [:textenc, :text]],
|
125
|
+
[59, :TORY, "Original release year", [:textenc, :text]],
|
126
|
+
[60, :TOWN, "File owner/licensee", [:textenc, :text]],
|
127
|
+
[61, :TPE1, "Lead performer(s)/Soloist(s)", [:textenc, :text]],
|
128
|
+
[62, :TPE2, "Band/orchestra/accompaniment", [:textenc, :text]],
|
129
|
+
[63, :TPE3, "Conductor/performer refinement", [:textenc, :text]],
|
130
|
+
[64, :TPE4, "Interpreted, remixed, or otherwise modified by", [:textenc, :text]],
|
131
|
+
[65, :TPOS, "Part of a set", [:textenc, :text]],
|
132
|
+
[66, :TPRO, "Produced notice", [:textenc, :text]],
|
133
|
+
[67, :TPUB, "Publisher", [:textenc, :text]],
|
134
|
+
[68, :TRCK, "Track number/Position in set", [:textenc, :text]],
|
135
|
+
[69, :TRDA, "Recording dates", [:textenc, :text]],
|
136
|
+
[70, :TRSN, "Internet radio station name", [:textenc, :text]],
|
137
|
+
[71, :TRSO, "Internet radio station owner", [:textenc, :text]],
|
138
|
+
[72, :TSIZ, "Size", [:textenc, :text]],
|
139
|
+
[73, :TSOA, "Album sort order", [:textenc, :text]],
|
140
|
+
[74, :TSOP, "Performer sort order", [:textenc, :text]],
|
141
|
+
[75, :TSOT, "Title sort order", [:textenc, :text]],
|
142
|
+
[76, :TSRC, "ISRC (international standard recording code)", [:textenc, :text]],
|
143
|
+
[77, :TSSE, "Software/Hardware and settings used for encoding", [:textenc, :text]],
|
144
|
+
[78, :TSST, "Set subtitle", [:textenc, :text]],
|
145
|
+
[79, :TXXX, "User defined text information", [:textenc, :text]],
|
146
|
+
[80, :TYER, "Year", [:textenc, :text]],
|
147
|
+
# Special frames again
|
148
|
+
[81, :UFID, "Unique file identifier", [:owner, :data]],
|
149
|
+
[82, :USER, "Terms of use", [:textenc, :language, :text]],
|
150
|
+
[83, :USLT, "Unsynchronized lyric/text transcription", [:textenc, :language, :description, :text]],
|
151
|
+
# URL link frames
|
152
|
+
[84, :WCOM, "Commercial information", [:text]],
|
153
|
+
[85, :WCOP, "Copyright/Legal infromation", [:text]],
|
154
|
+
[86, :WOAF, "Official audio file webpage", [:text]],
|
155
|
+
[87, :WOAR, "Official artist/performer webpage", [:text]],
|
156
|
+
[88, :WOAS, "Official audio source webpage", [:text]],
|
157
|
+
[89, :WORS, "Official internet radio station homepage", [:text]],
|
158
|
+
[90, :WPAY, "Payment", [:text]],
|
159
|
+
[91, :WPUB, "Official publisher webpage", [:text]],
|
160
|
+
[92, :WXXX, "User defined URL link", [:textenc, :description, :url]],
|
161
|
+
]
|
162
|
+
|
163
|
+
FramesByID = {
|
164
|
+
:____ => Frames[0],
|
165
|
+
:AENC => Frames[1],
|
166
|
+
:APIC => Frames[2],
|
167
|
+
:ASPI => Frames[3],
|
168
|
+
:COMM => Frames[4],
|
169
|
+
:COMR => Frames[5],
|
170
|
+
:ENCR => Frames[6],
|
171
|
+
:EQU2 => Frames[7],
|
172
|
+
:EQUA => Frames[8],
|
173
|
+
:ETCO => Frames[9],
|
174
|
+
:GEOB => Frames[10],
|
175
|
+
:GRID => Frames[11],
|
176
|
+
:IPLS => Frames[12],
|
177
|
+
:LINK => Frames[13],
|
178
|
+
:MCDI => Frames[14],
|
179
|
+
:MLLT => Frames[15],
|
180
|
+
:OWNE => Frames[16],
|
181
|
+
:PRIV => Frames[17],
|
182
|
+
:PCNT => Frames[18],
|
183
|
+
:POPM => Frames[19],
|
184
|
+
:POSS => Frames[20],
|
185
|
+
:RBUF => Frames[21],
|
186
|
+
:RVA2 => Frames[22],
|
187
|
+
:RVAD => Frames[23],
|
188
|
+
:RVRB => Frames[24],
|
189
|
+
:SEEK => Frames[25],
|
190
|
+
:SIGN => Frames[26],
|
191
|
+
:SYLT => Frames[27],
|
192
|
+
:SYTC => Frames[28],
|
193
|
+
:TALB => Frames[29],
|
194
|
+
:TBPM => Frames[30],
|
195
|
+
:TCOM => Frames[31],
|
196
|
+
:TCON => Frames[32],
|
197
|
+
:TCOP => Frames[33],
|
198
|
+
:TDAT => Frames[34],
|
199
|
+
:TDEN => Frames[35],
|
200
|
+
:TDLY => Frames[36],
|
201
|
+
:TDOR => Frames[37],
|
202
|
+
:TDRC => Frames[38],
|
203
|
+
:TDRL => Frames[39],
|
204
|
+
:TDTG => Frames[40],
|
205
|
+
:TIPL => Frames[41],
|
206
|
+
:TENC => Frames[42],
|
207
|
+
:TEXT => Frames[43],
|
208
|
+
:TFLT => Frames[44],
|
209
|
+
:TIME => Frames[45],
|
210
|
+
:TIT1 => Frames[46],
|
211
|
+
:TIT2 => Frames[47],
|
212
|
+
:TIT3 => Frames[48],
|
213
|
+
:TKEY => Frames[49],
|
214
|
+
:TLAN => Frames[50],
|
215
|
+
:TLEN => Frames[51],
|
216
|
+
:TMCL => Frames[52],
|
217
|
+
:TMED => Frames[53],
|
218
|
+
:TMOO => Frames[54],
|
219
|
+
:TOAL => Frames[55],
|
220
|
+
:TOFN => Frames[56],
|
221
|
+
:TOLY => Frames[57],
|
222
|
+
:TOPE => Frames[58],
|
223
|
+
:TORY => Frames[59],
|
224
|
+
:TOWN => Frames[60],
|
225
|
+
:TPE1 => Frames[61],
|
226
|
+
:TPE2 => Frames[62],
|
227
|
+
:TPE3 => Frames[63],
|
228
|
+
:TPE4 => Frames[64],
|
229
|
+
:TPOS => Frames[65],
|
230
|
+
:TPRO => Frames[66],
|
231
|
+
:TPUB => Frames[67],
|
232
|
+
:TRCK => Frames[68],
|
233
|
+
:TRDA => Frames[69],
|
234
|
+
:TRSN => Frames[70],
|
235
|
+
:TRSO => Frames[71],
|
236
|
+
:TSIZ => Frames[72],
|
237
|
+
:TSOA => Frames[73],
|
238
|
+
:TSOP => Frames[74],
|
239
|
+
:TSOT => Frames[75],
|
240
|
+
:TSRC => Frames[76],
|
241
|
+
:TSSE => Frames[77],
|
242
|
+
:TSST => Frames[78],
|
243
|
+
:TXXX => Frames[79],
|
244
|
+
:TYER => Frames[80],
|
245
|
+
:UFID => Frames[81],
|
246
|
+
:USER => Frames[82],
|
247
|
+
:USLT => Frames[83],
|
248
|
+
:WCOM => Frames[84],
|
249
|
+
:WCOP => Frames[85],
|
250
|
+
:WOAF => Frames[86],
|
251
|
+
:WOAR => Frames[87],
|
252
|
+
:WOAS => Frames[88],
|
253
|
+
:WORS => Frames[89],
|
254
|
+
:WPAY => Frames[90],
|
255
|
+
:WPUB => Frames[91],
|
256
|
+
:WXXX => Frames[92],
|
257
|
+
}
|
258
|
+
|
259
|
+
Fields = [
|
260
|
+
[0, :nofield, "No field"],
|
261
|
+
[1, :textenc, "Text encoding (unicode or ASCII)"],
|
262
|
+
[2, :text, "Text field"],
|
263
|
+
[3, :url, "A URL"],
|
264
|
+
[4, :data, "Data field"],
|
265
|
+
[5, :description, "Description field"],
|
266
|
+
[6, :owner, "Owner field"],
|
267
|
+
[7, :email, "Email field"],
|
268
|
+
[8, :rating, "Rating field"],
|
269
|
+
[9, :filename, "Filename field"],
|
270
|
+
[10, :language, "Language field"],
|
271
|
+
[11, :picturetype, "Picture type field"],
|
272
|
+
[12, :imageformat, "Image format field"],
|
273
|
+
[13, :mimetype, "Mimetype field"],
|
274
|
+
[14, :counter, "Counter field"],
|
275
|
+
[15, :id, "Identifier/Symbol field"],
|
276
|
+
[16, :volumeadj, "Volume adjustment field"],
|
277
|
+
[17, :numbits, "Number of bits field"],
|
278
|
+
[18, :volchgright, "Volume chage on the right channel"],
|
279
|
+
[19, :volchgleft, "Volume chage on the left channel"],
|
280
|
+
[20, :peakvolright, "Peak volume on the right channel"],
|
281
|
+
[21, :peakvolleft, "Peak volume on the left channel"],
|
282
|
+
[22, :timestampformat, "SYLT Timestamp Format"],
|
283
|
+
[23, :contenttype, "SYLT content type"]
|
284
|
+
]
|
285
|
+
|
286
|
+
FieldsByID = {
|
287
|
+
:nofield => Fields[0],
|
288
|
+
:textenc => Fields[1],
|
289
|
+
:text => Fields[2],
|
290
|
+
:url => Fields[3],
|
291
|
+
:data => Fields[4],
|
292
|
+
:description => Fields[5],
|
293
|
+
:owner => Fields[6],
|
294
|
+
:email => Fields[7],
|
295
|
+
:rating => Fields[8],
|
296
|
+
:filename => Fields[9],
|
297
|
+
:language => Fields[10],
|
298
|
+
:picturetype => Fields[11],
|
299
|
+
:imageformat => Fields[12],
|
300
|
+
:mimetype => Fields[13],
|
301
|
+
:counter => Fields[14],
|
302
|
+
:id => Fields[15],
|
303
|
+
:volumeadj => Fields[16],
|
304
|
+
:numbits => Fields[17],
|
305
|
+
:volchgright => Fields[18],
|
306
|
+
:volchgleft => Fields[19],
|
307
|
+
:peakvolright => Fields[20],
|
308
|
+
:peakvolleft => Fields[21],
|
309
|
+
:timestampformat => Fields[22],
|
310
|
+
:contenttype => Fields[23],
|
311
|
+
}
|
312
|
+
|
313
|
+
FieldType = {
|
314
|
+
0 => :integer,
|
315
|
+
1 => :binary,
|
316
|
+
2 => :text
|
317
|
+
}
|
318
|
+
|
319
|
+
Genres = [
|
320
|
+
"Blues", "Classic Rock", "Country", "Dance",
|
321
|
+
"Disco", "Funk", "Grunge", "Hip-Hop",
|
322
|
+
"Jazz", "Metal", "New Age", "Oldies",
|
323
|
+
"Other", "Pop", "R&B", "Rap",
|
324
|
+
"Reggae", "Rock", "Techno", "Industrial",
|
325
|
+
"Alternative", "Ska", "Death Metal", "Pranks",
|
326
|
+
"Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop",
|
327
|
+
"Vocal", "Jazz+Funk", "Fusion", "Trance",
|
328
|
+
"Classical", "Instrumental", "Acid", "House",
|
329
|
+
"Game", "Sound Clip", "Gospel", "Noise",
|
330
|
+
"AlternRock", "Bass", "Soul", "Punk",
|
331
|
+
"Space", "Meditative", "Instrumental Pop", "Instrumental Rock",
|
332
|
+
"Ethnic", "Gothic", "Darkwave", "Techno-Industrial",
|
333
|
+
"Electronic", "Pop-Folk", "Eurodance", "Dream",
|
334
|
+
"Southern Rock", "Comedy", "Cult", "Gangsta",
|
335
|
+
"Top 40", "Christian Rap", "Pop/Funk", "Jungle",
|
336
|
+
"Native American", "Cabaret", "New Wave", "Psychadelic",
|
337
|
+
"Rave", "Showtunes", "Trailer", "Lo-Fi",
|
338
|
+
"Tribal", "Acid Punk", "Acid Jazz", "Polka",
|
339
|
+
"Retro", "Musical", "Rock & Roll", "Hard Rock",
|
340
|
+
# Winamp extensions
|
341
|
+
"Folk", "Folk-Rock", "National Folk", "Swing",
|
342
|
+
"Fast Fusion", "Bebob", "Latin", "Revival",
|
343
|
+
"Celtic", "Bluegrass", "Avantgarde", "Gothic Rock",
|
344
|
+
"Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock",
|
345
|
+
"Big Band", "Chorus", "Easy Listening", "Acoustic",
|
346
|
+
"Humour", "Speech", "Chanson", "Opera",
|
347
|
+
"Chamber Music", "Sonata", "Symphony", "Booty Bass",
|
348
|
+
"Primus", "Porn Groove", "Satire", "Slow Jam",
|
349
|
+
"Club", "Tango", "Samba", "Folklore",
|
350
|
+
"Ballad", "Power Ballad", "Rhythmic Soul", "Freestyle",
|
351
|
+
"Duet", "Punk Rock", "Drum Solo", "A capella",
|
352
|
+
"Euro-House", "Dance Hall", "Goa", "Drum & Bass",
|
353
|
+
"Club-House", "Hardcore", "Terror", "Indie",
|
354
|
+
"Britpop", "Negerpunk", "Polsk Punk", "Beat",
|
355
|
+
"Christian Gangsta Rap", "Heavy Metal", "Black Metal", "Crossover",
|
356
|
+
"Contemporary Christian", "Christian Rock ", "Merengue", "Salsa",
|
357
|
+
"Trash Metal", "Anime", "JPop", "Synthpop",
|
358
|
+
]
|
359
|
+
|
360
|
+
|
361
|
+
#
|
362
|
+
# Get information of frame specified by _id_.
|
363
|
+
#
|
364
|
+
# ID3Lib::Info.frame(:TIT2) #=> [47, :TIT2, "Title/songname/content description", [:textenc, :text]]
|
365
|
+
#
|
366
|
+
def self.frame(id)
|
367
|
+
FramesByID[id]
|
368
|
+
end
|
369
|
+
|
370
|
+
def self.frame_num(num)
|
371
|
+
Frames[num]
|
372
|
+
end
|
373
|
+
|
374
|
+
#
|
375
|
+
# Get information of field specified by _id_.
|
376
|
+
#
|
377
|
+
# ID3Lib::Info.field(:text) #=> [2, :text, "Text field"]
|
378
|
+
#
|
379
|
+
def self.field(id)
|
380
|
+
FieldsByID[id]
|
381
|
+
end
|
382
|
+
|
383
|
+
def self.field_num(num)
|
384
|
+
Fields[num]
|
385
|
+
end
|
386
|
+
|
387
|
+
end
|
388
|
+
|
389
|
+
end
|