1 | # node-id3
|
2 |
|
3 | node-id3 is a ID3-Tag library written in JavaScript without other dependencies.
|
4 |
|
5 | ## Installation
|
6 | ```
|
7 | npm install node-id3
|
8 | ```
|
9 |
|
10 | ## Usage
|
11 |
|
12 | ```javascript
|
13 | const NodeID3 = require('node-id3')
|
14 |
|
15 | /* Variables found in the following usage examples */
|
16 |
|
17 | // file can be a buffer or string with the path to a file
|
18 | let file = './path/to/(mp3)file' || new Buffer("Some Buffer of a (mp3) file")
|
19 | let filebuffer = new Buffer("Some Buffer of a (mp3) file")
|
20 | let filepath = './path/to/(mp3)file'
|
21 | ```
|
22 |
|
23 | ### Creating/Writing tags
|
24 |
|
25 | ```javascript
|
26 | // Define the tags for your file using the ID (e.g. APIC) or the alias (see at bottom)
|
27 | let tags = {
|
28 | title: "Tomorrow",
|
29 | artist: "Kevin Penkin",
|
30 | album: "TVアニメ「メイドインアビス」オリジナルサウンドトラック",
|
31 | APIC: "./example/mia_cover.jpg",
|
32 | TRCK: "27"
|
33 | }
|
34 |
|
35 | // Create a ID3-Frame buffer from passed tags
|
36 | // Synchronous
|
37 | let ID3FrameBuffer = NodeID3.create(tags) // Returns ID3-Frame buffer
|
38 | // Asynchronous
|
39 | NodeID3.create(tags, function(frame) { })
|
40 |
|
41 | // Write ID3-Frame into (.mp3) file
|
42 | let success = NodeID3.write(tags, file) // Returns true/false or, if buffer passed as file, the tagged buffer
|
43 | NodeID3.write(tags, file, function(err, buffer) { }) // Buffer is only returned if a buffer was passed as file
|
44 |
|
45 | // Update existing ID3-Frame with new/edited tags
|
46 | let success = NodeID3.update(tags, file) // Returns true/false or, if buffer passed as file, the tagged buffer
|
47 | NodeID3.update(tags, file, function(err, buffer) { }) // Buffer is only returned if a buffer was passed as file
|
48 | ```
|
49 |
|
50 | ### Reading ID3-Tags
|
51 |
|
52 | ```javascript
|
53 | let tags = NodeID3.read(file)
|
54 | NodeID3.read(file, function(err, tags) {
|
55 | /*
|
56 | tags: {
|
57 | title: "Tomorrow",
|
58 | artist: "Kevin Penkin",
|
59 | image: {
|
60 | mime: "jpeg",
|
61 | type: {
|
62 | id: 3,
|
63 | name: "front cover"
|
64 | },
|
65 | description: String,
|
66 | imageBuffer: Buffer
|
67 | },
|
68 | raw: {
|
69 | TIT2: "Tomorrow",
|
70 | TPE1: "Kevin Penkin",
|
71 | APIC: Object (See above)
|
72 | }
|
73 | }
|
74 | */
|
75 | })
|
76 | ```
|
77 |
|
78 | ### Removing ID3-Tags from file/buffer
|
79 |
|
80 | ```javascript
|
81 | let success = NodeID3.removeTags(filepath) // returns true/false
|
82 | NodeID3.removeTags(filepath, function(err) { })
|
83 |
|
84 | let bufferWithoutID3Frame = NodeID3.removeTagsFromBuffer(filebuffer) // Returns Buffer
|
85 | ```
|
86 |
|
87 | ## Supported aliases
|
88 | ```
|
89 | album:
|
90 | bpm:
|
91 | composer:
|
92 | genre:
|
93 | copyright:
|
94 | date:
|
95 | playlistDelay:
|
96 | encodedBy:
|
97 | textWriter:
|
98 | fileType:
|
99 | time:
|
100 | contentGroup:
|
101 | title:
|
102 | subtitle:
|
103 | initialKey:
|
104 | language:
|
105 | length:
|
106 | mediaType:
|
107 | originalTitle:
|
108 | originalFilename:
|
109 | originalTextwriter:
|
110 | originalArtist:
|
111 | originalYear:
|
112 | fileOwner:
|
113 | artist:
|
114 | performerInfo:
|
115 | conductor:
|
116 | remixArtist:
|
117 | partOfSet:
|
118 | publisher:
|
119 | trackNumber:
|
120 | recordingDates:
|
121 | internetRadioName:
|
122 | internetRadioOwner:
|
123 | size:
|
124 | ISRC:
|
125 | encodingTechnology:
|
126 | year:
|
127 | comment: {
|
128 | language: "eng",
|
129 | text: "mycomment"
|
130 | }
|
131 | unsynchronisedLyrics: {
|
132 | language: "eng",
|
133 | text: "lyrics"
|
134 | }
|
135 | userDefinedText: [{
|
136 | description: "txxx name",
|
137 | value: "TXXX value text"
|
138 | }, {
|
139 | description: "txxx name 2",
|
140 | value: "TXXX value text 2"
|
141 | }] // Care, update doesn't delete non-passed array items!
|
142 | image: {
|
143 | mime: "png/jpeg"/undefined,
|
144 | type: {
|
145 | id: 3,
|
146 | name: "front cover
|
147 | }, // See https://en.wikipedia.org/wiki/ID3#ID3v2_embedded_image_extension
|
148 | description: "image description",
|
149 | imageBuffer: (file buffer)
|
150 | }
|
151 | ```
|
152 |
|
153 | ### Supported raw IDs
|
154 | You can also use the currently supported raw tags like TALB instead of album etc.
|
155 | ```
|
156 | album: "TALB"
|
157 | bpm: "TBPM"
|
158 | composer: "TCOM"
|
159 | genre: "TCON"
|
160 | copyright: "TCOP"
|
161 | date: "TDAT"
|
162 | playlistDelay: "TDLY"
|
163 | encodedBy: "TENC"
|
164 | textWriter: "TEXT"
|
165 | fileType: "TFLT"
|
166 | time: "TIME"
|
167 | contentGroup: "TIT1"
|
168 | title: "TIT2"
|
169 | subtitle: "TIT3"
|
170 | initialKey: "TKEY"
|
171 | language: "TLAN"
|
172 | length: "TLEN"
|
173 | mediaType: "TMED"
|
174 | originalTitle: "TOAL"
|
175 | originalFilename: "TOFN"
|
176 | originalTextwriter: "TOLY"
|
177 | originalArtist: "TOPE"
|
178 | originalYear: "TORY"
|
179 | fileOwner: "TOWN"
|
180 | artist: "TPE1"
|
181 | performerInfo: "TPE2"
|
182 | conductor: "TPE3"
|
183 | remixArtist: "TPE4"
|
184 | partOfSet: "TPOS"
|
185 | publisher: "TPUB"
|
186 | trackNumber: "TRCK"
|
187 | recordingDates: "TRDA"
|
188 | internetRadioName: "TRSN"
|
189 | internetRadioOwner: "TRSO"
|
190 | size: "TSIZ"
|
191 | ISRC: "TSRC"
|
192 | encodingTechnology: "TSSE"
|
193 | year: "TYER"
|
194 | comment: "COMM"
|
195 | image: "APIC"
|
196 | unsynchronisedLyrics "USLT"
|
197 | userDefinedText "TXXX"
|
198 | ``` |
\ | No newline at end of file |