-
Notifications
You must be signed in to change notification settings - Fork 2
/
AudioReactiveVideo.pde
140 lines (107 loc) · 2.97 KB
/
AudioReactiveVideo.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
A tool to create visuals reacting on an audiofile (c) Jan den Besten.
Purpose of .pde files:
- This file - Configuration and basic setup
- Core.pde - All core classes and methods. Don't touch it.
- CoreScenes.pde - Example scenes. You can use them, change them, copy them as you like.
- scene###.pde - More (example) scenes, create you're own.
*/
/* ================ CONFIGURATION ========================== */
/*
Put you're audio file (.wav) in the 'data' folder and fill in the name:
*/
String audioFile = "test_loop.wav";
/*
If this is true, the sketch will start with a pauze button. Pressing SPACEBAR will start audio and the sketch.
Handy when making a screenrecording.
*/
boolean startWithPauzeButton = false;
/*
Declare you're scenes here.
Best practice is to use a new .pde file for every scene with a name of 'scene####.pde'
You can find some examples in CoreScenes.pde
*/
SceneTime completeLength = new SceneTime(0,0); // 0:00 -
// SceneTime wild = new SceneTime(110000,185000); // 1:50 - 3:05
Scene scenes[] = {
new waveGrid( new SceneTime[]{ completeLength }),
new gridCopy( new SceneTime[]{ completeLength }),
// new waveLandscape( new SceneTime[]{ start }),
new coreOutro( new SceneTime[]{new SceneTime(-10000,0)} ),
new coreFadeOut( new SceneTime[]{new SceneTime(-5000,0)} ),
};
int backgroundRedraw = 20;
int backgroundTimer = 0;
/*
Global setup method
*/
public void setup() {
// Setup graphics
size(1280,720,P2D);
pixelDensity(2);
colorMode(RGB, 255,255,255,100);
resetBackground(true);
backgroundTimer = backgroundRedraw;
font = createFont("Lucida Sans Unicode.ttf", 70, true);
// Start Audio
minim = new Minim(this);
player = minim.loadFile( audioFile );
if (!startWithPauzeButton && !isPlaying) {
player.play();
isPlaying = true;
}
// Start Analyzer
analyzer = new AudioAnalyzer();
beat = new BeatDetect(player.bufferSize(), player.sampleRate());
beat.setSensitivity(300);
// Setup Scenes
// randomSeed(1);
setupScenes();
}
void resetBackground(boolean reset) {
if (reset) {
background(0,0,0);
}
else {
backgroundTimer = backgroundTimer - 1;
if (backgroundTimer<=1) {
noStroke();
fill(0,0,0,1);
rect(0,0,width,height);
backgroundTimer = backgroundRedraw;
}
}
}
/*
Global draw method
*/
public void draw() {
if (startWithPauzeButton && !isPlaying) {
drawPauseButton();
}
else {
if (!isPlaying) {
resetBackground(true);
player.play();
isPlaying = true;
}
// Reset background
resetBackground(false);
// Analyze audio
analyzer.analyze();
beat.detect(player.mix);
// Draw the active scenes
drawScenes();
// Debugbar?
if (debug) {
drawDebugBar();
}
// End of audio? -> save fft analyzer & EXIT
if ( player.position() >= player.length()) {
if (analyzer.isNormalizing()) {
analyzer.saveNormalizeData();
}
exit();
}
}
}