-
Notifications
You must be signed in to change notification settings - Fork 0
/
create-bpm-playlists.js
61 lines (54 loc) · 1.71 KB
/
create-bpm-playlists.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
const iTunes = Application('iTunes');
const BPM_RANGE = 5;
// Find the first folder with name, if it doesn't exist, create it
function createFolderIfNotExists(name, parent) {
const folders = iTunes.playlists.whose({ name: name });
if (folders.length) {
return folders[0];
}
const folder = iTunes.FolderPlaylist().make();
folder.name = name;
if (parent) {
folder.move({ to: parent });
}
return folder;
};
// Find the first playlist with name, if it doesn't exist, create it
function createPlaylistIfNotExists(name, parent) {
const playlists = iTunes.playlists.whose({ name: name });
if (playlists.length) {
return playlists[0];
}
const playlist = iTunes.UserPlaylist().make();
playlist.name = name;
if (parent) {
playlist.move({ to: parent });
}
return playlist;
};
function runner() {
const newFolder = createFolderIfNotExists('SmartSort');
const timestamp = new Date().getTime();
// addedDate
const bucketFolder = createFolderIfNotExists('BPM', newFolder);
const bucketSubFolders = {};
// Iterate over all tracks, get their bpm and create a label
// Check if the label already exists, if so, use that playlist, otherwise
// create a new playlist. Add the track to the playlist.
iTunes.sources[0].tracks().forEach(track => {
const bpm = track.bpm();
const bucket = ((parseInt(bpm / BPM_RANGE, 10)) * BPM_RANGE);
const label = bucket > 0 ? `T${bucket}-${bucket + (BPM_RANGE-1)}` : 'T-0-UNKNOWN';
let playlist = bucketSubFolders[label];
if (!playlist) {
playlist = createPlaylistIfNotExists(label, bucketFolder);
bucketSubFolders[label] = playlist;
}
try {
track.duplicate({ to: playlist });
} catch(e) {
console.log(`Track ${track.name()} could not be added`);
}
});
}
runner();