package examples.etyllica.tutorial11; import java.awt.Color; import sound.capture.AudioHandler; import br.com.etyllica.core.context.Application; import br.com.etyllica.core.event.Action; import br.com.etyllica.core.event.GUIEvent; import br.com.etyllica.core.graphics.Graphics; import br.com.etyllica.gui.Button; import br.com.etyllica.gui.label.TextLabel; /** * * @author yuripourre * @license LGPLv3 * */ public class CaptureAudioApplication extends Application { private Button stop; private Button play; private boolean canDraw = false; private int[][] waveSamples; public CaptureAudioApplication(int w, int h) { super(w,h); } public void load(){ final Button capture = new Button(20,20,200,30); capture.setLabel(new TextLabel("Capture")); capture.addAction(GUIEvent.MOUSE_LEFT_BUTTON_DOWN, new Action(this, "captureAudio")); addView(capture); stop = new Button(20,60,200,30); stop.setLabel(new TextLabel("Stop Capture")); stop.addAction(GUIEvent.MOUSE_LEFT_BUTTON_DOWN, new Action(this, "stopCapture")); stop.setDisabled(true); addView(stop); play = new Button(20,100,200,30); play.setLabel(new TextLabel("Play")); play.addAction(GUIEvent.MOUSE_LEFT_BUTTON_DOWN, new Action(this, "playAudio")); play.setDisabled(true); addView(play); } public void stopCapture(){ stop.setDisabled(true); play.setDisabled(false); AudioHandler.getInstance().stopCapture(); waveSamples = AudioHandler.getInstance().getWaveformSamples(); canDraw = true; } public void captureAudio() { stop.setDisabled(false); AudioHandler.getInstance().captureAudio(); } public void playAudio() { AudioHandler.getInstance().playAudio(); } @Override public void draw(Graphics g) { g.setColor(Color.BLACK); if(canDraw){ //Just Draw the first channel, microphone is mono final int channel = 0; int[] samples = waveSamples[channel]; int x = 0; int lastX = 0; int lastY = 0; int increment = 8; int offsetY = 290; for (int t=0 ; t < samples.length; t += increment) { double scaleFactor = 0.1; double scaledSample = samples[t]/20 * scaleFactor; int y = (int) (15 - (scaledSample)); g.drawLine(lastX, lastY+offsetY, x, y+offsetY); x++; lastX = x; lastY = y; } } } }