public void run() { while (running) { if (!paused) { if (mode == 0) { for (double i = 0; i < 3.14f; i = i + 0.1f) { for (int j = 0; j < 12; j++) { double osc = Math.sin(i) * 127; int value = (int) osc; MIDILight(j, value); } delay(30); } for (double i = 3.14f; i >= 0; i = i - 0.1f) { for (int j = 0; j < 12; j++) { double osc = Math.sin(i) * 127; int value = (int) osc; MIDILight(j, value); } delay(30); } } else if (mode == 1) { for (int j = 0; j < 12; j++) { MIDILight(j, 127); } mode = 1000; } else if (mode == 2) { for (int j = 0; j < 12; j++) { MIDILight(j, 0); } mode = 1000; } else if (mode == 3) { int controller = (int) random(12); int randomValue = (int) random(127); MIDILight(controller, randomValue); delay(30); } else if (mode == 4) { for (int i = 0; i < 64; i++) { for (int j = 0; j < 12; j++) { MIDILight(j, i * 2); } delay(20); } for (int i = 63; i >= 0; i--) { for (int j = 0; j < 12; j++) { MIDILight(j, i * 2); } delay(20); } } else { delay(10); // FIX THIS. WITHOUT THIS THE CPU USE GOES THROUGH THE ROOF. NEED A WAY // TO SLEEP THIS THREAD WHEN IT'S NOT IN USE. } } } System.out.println(id + " thread is done!"); }
public void nudge(int i) { x[i] += (double) rand.nextInt(1000) / 8756; y[i] += (double) rand.nextInt(1000) / 5432; int tmpScale = (int) (Math.abs(Math.sin(x[i])) * 10); scale[i] = (double) tmpScale / 10; int nudgeX = (int) (((double) getWidth() / 2) * .8); int nudgeY = (int) (((double) getHeight() / 2) * .60); xh[i] = (int) (Math.sin(x[i]) * nudgeX) + nudgeX; yh[i] = (int) (Math.sin(y[i]) * nudgeY) + nudgeY; }
/** * Create a note (sine wave) of the given frequency (Hz), for the given duration (seconds) scaled * to the given volume (amplitude). */ public static double[] note(double hz, double duration, double amplitude) { int N = (int) (StdAudio.SAMPLE_RATE * duration); double[] a = new double[N + 1]; for (int i = 0; i <= N; i++) a[i] = amplitude * Math.sin(2 * Math.PI * i * hz / StdAudio.SAMPLE_RATE); return a; }
/** Test client - play an A major scale to standard audio. */ public static void main(String[] args) { // 440 Hz for 1 sec double freq = 440.0; for (int i = 0; i <= StdAudio.SAMPLE_RATE; i++) { StdAudio.play(0.5 * Math.sin(2 * Math.PI * freq * i / StdAudio.SAMPLE_RATE)); } // scale increments int[] steps = {0, 2, 4, 5, 7, 9, 11, 12}; for (int i = 0; i < steps.length; i++) { double hz = 440.0 * Math.pow(2, steps[i] / 12.0); StdAudio.play(note(hz, 1.0, 0.5)); } // need to call this in non-interactive stuff so the program doesn't // terminate // until all the sound leaves the speaker. StdAudio.close(); // need to terminate a Java program with sound System.exit(0); }
public void simulateBall() { ballPreviousX = ballX; ballPreviousY = ballY; leftEdgeActive = rightEdgeActive = topEdgeActive = bottomEdgeActive = true; if (ballY >= MaxY) { ballStarted = false; } if (!ballStarted) { ballX = padx - ballDiameter / 2; ballY = padTop - ballDiameter; } else { ballX = ballX + (int) (Math.cos((angle * pi) / 180.0) * unit); ballY = ballY - (int) (Math.sin((angle * pi) / 180.0) * unit); // Y increases downward if (Math.sin((angle * pi) / 180.0) * unit >= 0) { top = true; } else top = false; if (Math.cos((angle * pi) / 180.0) * unit >= 0) { right = true; } else right = false; if (right) leftEdgeActive = false; else rightEdgeActive = false; if (top) bottomEdgeActive = false; else topEdgeActive = false; Pair temp; if (leftEdgeActive) { int xBlockLeft = ((ballX - blockStartX) / blockLength) * blockLength; int yBlockLeft = ((ballY - blockStartY + ballDiameter / 2) / blockHeight) * blockHeight; // Left Boundary Edge temp = new Pair(xBlockLeft, yBlockLeft); if ((blockMap.containsKey(temp.toString()) && (ballX >= blockStartX) && (ballY >= blockStartY)) || ballX <= 0) { if (immutableBlocks.containsKey(temp.toString()) == false) { /* if(fireBlocks.containsKey(temp.toString())){ fireEnabled = true; } */ angle = 180.0 - angle; blockMap.remove(temp.toString()); repaintBlocks = true; count = numRepaints; repaint(); return; } else { // angle = 180.0 - angle; blockMap.put(temp.toString(), Color.RED); repaintBlocks = true; count = numRepaints; repaint(); return; } } } if (rightEdgeActive) { int xBlockRight = ((ballX - blockStartX + ballDiameter) / blockLength) * blockLength; int yBlockRight = ((ballY - blockStartY + ballDiameter / 2) / blockHeight) * blockHeight; // Right Boundary Edge temp = new Pair(xBlockRight, yBlockRight); if ((blockMap.containsKey(temp.toString()) && (ballX - blockStartX + ballDiameter > 0) && (ballY - blockStartY + ballDiameter / 2) >= 0) || (ballX + ballDiameter) >= MaxX) { // System.out.println("Right edge"); if (immutableBlocks.containsKey(temp.toString()) == false) { /* if(fireBlocks.containsKey(temp.toString())){ fireEnabled = true; }*/ angle = 180.0 - angle; blockMap.remove(temp.toString()); repaintBlocks = true; count = numRepaints; repaint(); return; } else { // angle = 180.0 - angle; blockMap.put(temp.toString(), Color.RED); repaintBlocks = true; count = numRepaints; repaint(); return; } } } if (topEdgeActive) { int xBlockTop = ((ballX - blockStartX + ballDiameter / 2) / blockLength) * blockLength; int yBlockTop = ((ballY - blockStartY) / blockHeight) * blockHeight; // top Boundary Edge temp = new Pair(xBlockTop, yBlockTop); if ((blockMap.containsKey(temp.toString()) && (ballX >= blockStartX) && (ballY >= blockStartY)) || (ballY - ballDiameter) <= 0) { if (immutableBlocks.containsKey(temp.toString()) == false) { /*if(fireBlocks.containsKey(temp.toString())){ fireEnabled = true; }*/ angle = 360.0 - angle; blockMap.remove(temp.toString()); repaintBlocks = true; count = numRepaints; repaint(); // System.out.println("temp " + temp.toString()); return; } else { // angle = 360.0 - angle; blockMap.put(temp.toString(), Color.RED); repaintBlocks = true; count = numRepaints; repaint(); return; } } } if (bottomEdgeActive) { int xBlockBottom = ((ballX - blockStartX + ballDiameter / 2) / blockLength) * blockLength; int yBlockBottom = ((ballY - blockStartY + ballDiameter) / blockHeight) * blockHeight; // top Boundary Edge temp = new Pair(xBlockBottom, yBlockBottom); if ((blockMap.containsKey(temp.toString()) && (ballX - blockStartX + ballDiameter / 2 >= 0) && (ballY - blockStartY + ballDiameter >= 0)) || (((((ballY + ballDiameter) >= padTop && (ballY + ballDiameter) <= padBottom)) || (ballY >= padTop && ballY <= padBottom)) && (ballX) >= (padx - padLength / 2) && ballX <= (padx + padLength / 2))) { if (immutableBlocks.containsKey(temp.toString()) == false) { /*if(fireBlocks.containsKey(temp.toString())){ fireEnabled = true; }*/ angle = 360.0 - angle; blockMap.remove(temp.toString()); repaintBlocks = true; count = numRepaints; repaint(); return; } else { // angle = 360.0 - angle; blockMap.put(temp.toString(), Color.RED); repaintBlocks = true; count = numRepaints; repaint(); return; } } } } }