@@ -0,0 +1,1671 @@
+package com.haxademic.app.musicvideos;%0A%0Aimport com.haxademic.core.app.P;%0Aimport com.haxademic.core.app.PAppletHax;%0Aimport com.haxademic.core.app.config.AppSettings;%0A%0Aimport processing.core.PImage;%0Aimport processing.video.Movie;%0A%0Apublic class BrimDuels %0Aextends PAppletHax %7B%0A%09public static void main(String args%5B%5D) %7B PAppletHax.main(Thread.currentThread().getStackTrace()%5B1%5D.getClassName()); %7D%0A%0A%09protected float w = 1280;%0A%09protected float h = 720;%0A%09protected int FRAMES = 1038; // (17.299s)%0A%09protected PImage waveform;%0A%09%0A%09protected void overridePropsFile() %7B%0A%09%09p.appConfig.setProperty(AppSettings.RENDERING_MOVIE, false);%0A%09%09p.appConfig.setProperty(AppSettings.RENDERING_MOVIE_START_FRAME, 1);%0A%09%09p.appConfig.setProperty(AppSettings.RENDERING_MOVIE_STOP_FRAME, FRAMES + 1);%0A%09%09if(p.appConfig.getBoolean(AppSettings.RENDERING_MOVIE, false) == true) %7B%0A%09%09%09w = 1920;%0A%09%09%09h = 1080;%0A%09%09%7D%0A%09%09p.appConfig.setProperty(AppSettings.WIDTH, (int) w);%0A%09%09p.appConfig.setProperty(AppSettings.HEIGHT, (int) h);%0A%09%09p.appConfig.setProperty(AppSettings.FPS, 60);%0A%09%09p.appConfig.setProperty(AppSettings.LOOP_FRAMES, FRAMES);%0A%09%7D%0A%0A%09protected void setupFirstFrame() %7B%0A%09%09waveform = P.getImage(%22audio/brim-duels/output-16k.png%22);%0A%09%7D%0A%0A%09public void drawApp() %7B%0A%09%09background(0);%0A%09%09%0A%09%09// draw to main buffer%0A%09%09pg.beginDraw();%0A%09%09pg.background(0);%0A%09%09%0A%09%09// draw waveform%0A%09%09float waveformScale = 0.4f;%0A%09%09float waveW = waveform.width * waveformScale;%0A%09%09float waveH = waveform.height * waveformScale;%0A%09%09pg.image(waveform, -waveW * p.loop.progress(), 0, waveW, waveH);%0A%09%09pg.image(waveform, -waveW * p.loop.progress() + waveW, 0, waveW, waveH);%0A%09%09%0A%09%09%0A%09%09pg.endDraw();%0A%09%09%0A%09%09// draw to screen%0A%09%09p.image(pg, 0, 0);%0A%09%7D%0A%0A%7D%0A%0A

Create BrimDuels.java