필요 지식
#javascript #node #node-id3

mp3 파일에는 오디오 정보 뿐 아니라 id 태그 정보로 가사나 앨범 커버같은 이미지를 저장할 수 있습니다. node.js 에서는 node-id3 패키지를 통해 간단하게 추출, 수정이 가능합니다.

경로 : https://www.npmjs.com/package/node-id3
설치 : npm install node-id3
테스트버전 : 0.1.6

가사와 이미지 추출

  1. const nodeID3 = require('node-id3');
  2. let file = '길구봉구 - 좋아(Joa).mp3';
  3. let id3 = nodeID3.read(file);
  4. console.log(id3.unsynchronisedLyrics.text); //가사
  5. console.log(id3.image.imageBuffer); //이미지

output)

  1. 달콤한 너의 목소리로
  2. 엄마를 닮은 미소가 좋아
  3. 곁에 있으면 맘이 편안해
  4. 사랑하게 돼서 좋아
  5. <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48 00 48 00 00 ff db 00 43 00 02 01 01 01 01 01 02 01 01 01 02 02 02 02 02 04 03 02 02 02 02 05 04 04 03 ... >

매우 간단하게 추출이 가능합니다. 가사가 없거나 이미지가 없는 경우 id3.unsynchronizedLyricsid3.image가 정의 안되어 있을수 있으므로 객체 체크가 반드시 필요합니다. imageBuffer 는 바이트 버퍼이므로 파일로 저장이 가능합니다.

  1. const fs = require('fs');
  2. if(id3.image) {
  3. fs.writeFile('cover.jpg', id3.image.imageBuffer, 'binary', function(err) { //앨범커버 저장
  4. console.log(err);
  5. });
  6. }

가사 수정하기

가사를 수정하거나 새롭게 추가할때는 unsynchronisedLyrics 정보를 맞춰서 저장해야 합니다. 아래 소스는 기존 가사의 맨 끝에 ‘a’를 추가하는 내용입니다.

  1. id3 = {
  2. unsynchronisedLyrics : {
  3. language: "kor",
  4. text: id3.unsynchronisedLyrics.text + 'a'
  5. }
  6. };
  7. let success = nodeID3.update(id3, file);
  8. console.log(success);

output)

  1. 곁에 있으면 맘이 편안해
  2. 사랑하게 돼서 좋아a
  3. <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48 00 48 00 00 ff db 00 43 00 02 01 01 01 01 01 02 01 01 01 02 02 02 02 02 04 03 02 02 02 02 05 04 04 03 ... >
  4. true
  5. null

워낙에 간단한 패키지라 더 길게 쓸게 없네요. 그럼 이만.