package examples.sound.application; import java.awt.Color; import javax.sound.sampled.AudioFormat; import sound.capture.AudioHandler; import br.com.etyllica.core.context.Application; import br.com.etyllica.core.graphics.Graphics; /** * * @author yuripourre * @license LGPLv3 * */ public class SyntheticAudioApplication extends Application { private int pitch = 10; private byte[][] waveSamples; public SyntheticAudioApplication(int w, int h) { super(w,h); } public void load() { //Mono samples (Just one channel) float sampleRate = 44000; int sampleSizeInBits = 8; int channels = 1; boolean signed = true; boolean bigEndian = true; AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian); waveSamples = new byte[1][(int)sampleRate*4]; generateWave(0, pitch); AudioHandler.getInstance().playAudio(waveSamples[0], format); } private void generateWave(int channel, int pitch) { for(int i=0;i<waveSamples[channel].length;i++) { byte value = (byte)(-128+(pitch*(i/10))%256); waveSamples[0][i] = value; } } private void generateWaveWithInterval(int channel, int pitch) { int next = 0; int spacing = 4800; for(int i=0;i<waveSamples[channel].length;i++) { byte value = (byte)(-128+pitch*i%256); if(next>spacing) { value = 0; } if(next>spacing*2) { next = 0; } next++; waveSamples[0][i] = value; System.out.println(value); } } @Override public void draw(Graphics g) { g.setColor(Color.BLACK); //Just Draw the first channel, microphone is mono final int channel = 0; byte[] 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 = 10; double scaledSample = samples[t]/20 * scaleFactor; int y = (int) (15 - (scaledSample)); g.drawLine(lastX, lastY+offsetY, x, y+offsetY); x++; lastX = x; lastY = y; } } }