-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPlaylist.pde
84 lines (70 loc) · 2.01 KB
/
Playlist.pde
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
public enum Modes {
LINEAR,
RANDOM
}
public class PlayList {
public Music musicPlaying;
public int musicPlayingIndex;
public ArrayList<Music> musics;
public String[] musicPaths;
public boolean playing;
public Modes mode;
public ArrayList<Integer> playedMusicIndexes;
public boolean changedMusic;
public PlayList(PApplet pApplet, String folder) {
musicPaths = FileUtils.listFileNames(folder);
musics = new ArrayList<Music>();
for (int i = 0; i < musicPaths.length; i++) {
String[] splitName = split(musicPaths[i], '.');
musics.add(new Music(pApplet, sketchPath("musics\\") + musicPaths[i], splitName[0]));
}
playedMusicIndexes = new ArrayList<Integer>();
}
public void update() {
changedMusic = false;
if (playing) {
if (!musicPlaying.soundFile.isPlaying()) next();
}
}
public void next() {
switch(mode) {
case RANDOM:
play(getRandomMusic());
break;
case LINEAR:
break;
}
}
private void play(int musicIndex) {
playing = true;
playedMusicIndexes.add(musicIndex);
musicPlaying = musics.get(musicIndex);
musicPlaying.soundFile.play();
fft.input(musicPlaying.getSoundFile());
changedMusic = true;
}
public int getRandomMusic() {
if (playedMusicIndexes.size() >= musics.size()) {
playedMusicIndexes.clear();
return getRandomMusic();
}
int rndElement = RandomUtils.getRandomElement(musics, musics.size());
if (hasBeenPlayed(rndElement)) return getRandomMusic();
return rndElement;
}
public boolean hasBeenPlayed(int index) {
for (int i = 0; i < playedMusicIndexes.size(); i++) {
if (index == playedMusicIndexes.get(i)) return true;
}
return false;
}
public void playRandom() {
mode = Modes.RANDOM;
next();
}
public void changeVolume(float volume) {
for (int i = 0; i < musics.size(); i++) {
musics.get(i).soundFile.amp(volume);
}
}
}