diff --git a/deemix/settings.js b/deemix/settings.js index 3ff5a45..1a68a8a 100644 --- a/deemix/settings.js +++ b/deemix/settings.js @@ -89,6 +89,7 @@ const DEFAULTS = { composer: false, involvedPeople: false, source: false, + rating: false, savePlaylistAsCompilation: false, useNullSeparator: false, saveID3v1: true, diff --git a/deemix/tagger.js b/deemix/tagger.js index 2ecbf7a..7ebc0a3 100644 --- a/deemix/tagger.js +++ b/deemix/tagger.js @@ -112,6 +112,14 @@ function tagID3(path, track, save){ }) } + if (save.rating) { + let rank = (track.rank / 10000) * 2.55; + rank = rank > 255 ? 255 : Math.round(rank); + tag.setFrame('POPM', { + rating: rank, + }) + } + if (save.cover && track.album.embeddedCoverPath){ const coverArrayBuffer = fs.readFileSync(track.album.embeddedCoverPath) if (coverArrayBuffer.length != 0){ @@ -212,6 +220,11 @@ function tagFLAC(path, track, save){ flac.setTag(`SOURCEID=${track.id}`) } + if (save.rating) { + let rank = Math.round(track.rank / 10000); + flac.setTag(`RATING=${rank}`) + } + if (save.cover && track.album.embeddedCoverPath){ let picture = fs.readFileSync(track.album.embeddedCoverPath) if (picture.length != 0) flac.importPicture(picture) @@ -276,6 +289,12 @@ function tagID3v1(path, track, save){ tagBuffer.writeUInt8(255, 127) } + // Write as comment + if (save.rating) { + let rank = Math.round(track.rank / 10000); + tagBuffer.write(`Rating: ${rank}%`, 97); + } + // Save tags const songBuffer = fs.readFileSync(path) const buffer = new ArrayBuffer(songBuffer.byteLength + 128) diff --git a/deemix/types/Track.js b/deemix/types/Track.js index 7311728..b343a11 100644 --- a/deemix/types/Track.js +++ b/deemix/types/Track.js @@ -66,6 +66,7 @@ class Track { }*/ } this.mediaVersion = trackAPI_gw.MEDIA_VERSION + this.rank = trackAPI_gw.RANK_SNG this.fallbackID = "0" if (trackAPI_gw.FALLBACK){ this.fallbackID = trackAPI_gw.FALLBACK.SNG_ID