Xylophone import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.net.*; import java.applet.*; public class Xylophone extends Applet implements MouseMotionListener { static Image xyloImage, malletImage, mdImage, curImage, trebleClefImage, eighthImage, eighthImage2; static AudioClip[] acArray; static int mx=0, my=0; static int curFloor=0, curCeiling=0; static int curNote; static SongSaver ss; static Button playButton, stopButton, deleteButton, deleteLastButton; //play/pause are integrated static Choice rhythmChoice, tempoChoice; // static MouseListener ml; static XyloListener ml; static boolean up=true; public void init() { setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); acArray=new AudioClip[15]; xyloImage=getImage(getCodeBase(), "xylo.jpg"); malletImage=getImage(getCodeBase(), "mallet.gif"); mdImage=getImage(getCodeBase(), "mallet_down.gif"); trebleClefImage=getImage(getCodeBase(), "treble_clef.gif"); eighthImage=getImage(getCodeBase(), "eighth_note.gif"); eighthImage2=getImage(getCodeBase(), "eighth_note2.gif"); curImage=malletImage; ss=new SongSaver(); playButton=new Button("Play"); stopButton=new Button("Stop"); deleteButton=new Button("Delete All"); deleteLastButton=new Button("Delete Last Note"); rhythmChoice=new Choice(); rhythmChoice.addItem("Quarter Note"); rhythmChoice.addItem("Eighth Note"); rhythmChoice.addItem("Sixteenth Note"); tempoChoice=new Choice(); tempoChoice.addItem("100 beats per minute"); tempoChoice.addItem("80 beats per minute"); tempoChoice.addItem("60 beats per minute"); add(playButton); add(stopButton); add(deleteLastButton); add(deleteButton); add(rhythmChoice); add(tempoChoice); try { acArray[0]=getAudioClip(getCodeBase(), "x0.au"); acArray[1]=getAudioClip(getCodeBase(), "x1.au"); acArray[2]=getAudioClip(getCodeBase(), "x2.au"); acArray[3]=getAudioClip(getCodeBase(), "x3.au"); acArray[4]=getAudioClip(getCodeBase(), "x4.au"); acArray[5]=getAudioClip(getCodeBase(), "x5.au"); acArray[6]=getAudioClip(getCodeBase(), "x6.au"); acArray[7]=getAudioClip(getCodeBase(), "x7.au"); acArray[8]=getAudioClip(getCodeBase(), "x8.au"); acArray[9]=getAudioClip(getCodeBase(), "x9.au"); acArray[10]=getAudioClip(getCodeBase(), "x10.au"); acArray[11]=getAudioClip(getCodeBase(), "x11.au"); acArray[12]=getAudioClip(getCodeBase(), "x12.au"); acArray[13]=getAudioClip(getCodeBase(), "x13.au"); acArray[14]=getAudioClip(getCodeBase(), "x14.au"); } catch(Exception e) {System.out.println("ALL FILES MUST BE IN THE SAME DIRECTORY");} addMouseMotionListener(this); ml=new XyloListener(this); // ml=new MouseAdapter() { // public void mousePressed(MouseEvent e) { // int x=e.getX(); // int y=e.getY(); // if (y<233) { // if (x<60) { // curFloor=-1; //negative denotes N/A // curCeiling=60; // } // else if (x<93) { // curFloor=60; // curCeiling=93; // // curNote=0; // if ((y<233) && (y>0)) { // acArray[0].play(); // ss.addNote(0); // } // } // else if (x<125) { // curFloor=93; // curCeiling=125; // // curNote=1; // if ((y<233) && (y>0)) { // acArray[1].play(); // ss.addNote(1); // } // } // else if (x<158) { // curFloor=125; // curCeiling=158; // //curNote=2; // if ((y<223) && (y>0)) { // acArray[2].play(); // ss.addNote(2); // } // } // else if (x<191) { // curFloor=158; // curCeiling=191; // //curNote=3; // if ((y<220) && (y>0)) { // acArray[3].play(); // ss.addNote(3); // } // } // else if (x<223) { // curFloor=191; // curCeiling=223; // // curNote=4; // if ((y<218) && (y>0)) { // acArray[4].play(); // ss.addNote(4); // } // } // else if (x<257) { // curFloor=223; // curCeiling=257; // // curNote=5; // if ((y<215) && (y>0)) { // acArray[5].play(); // ss.addNote(5); // } // } // else if (x<289) { // curFloor=257; // curCeiling=289; // if ((y<210) && (y>0)) { // acArray[6].play(); // ss.addNote(6); // } // } // else if (x<322) { // curFloor=289; // curCeiling=322; // if ((y<207) && (y>0)) { // acArray[7].play(); // ss.addNote(7); // } // } // else if (x<354) { // curFloor=322; // curCeiling=354; // if ((y<206) && (y>0)) { // acArray[8].play(); // ss.addNote(8); // } // } // else if (x<387) { // curFloor=354; // curCeiling=387; // if ((y<202) && (y>0)) { // acArray[9].play(); // ss.addNote(9); // } // } // else if (x<416) { // curFloor=387; // curCeiling=416; // if ((y<197) && (y>0)) { // acArray[10].play(); // ss.addNote(10); // } // } // else if (x<448) { // curFloor=416; // curCeiling=448; // if ((y<194) && (y>0)) { // acArray[11].play(); // ss.addNote(11); // } // } // else if (x<478) { // curFloor=448; // curCeiling=478; // if ((y<192) && (y>0)) { // acArray[12].play(); // ss.addNote(12); // } // } // else if (x<508) { // curFloor=478; // curCeiling=508; // if ((y<189) && (y>25)) { // acArray[13].play(); // ss.addNote(13); // } // } // else if (x<538) { // curFloor=508; // curCeiling=538; // if ((y<187) && (y>29)) { // acArray[14].play(); // ss.addNote(14); // } // } // else { // curFloor=538; // curCeiling=1601; // } // curImage=mdImage; // repaint(mx, my, 37, 290); // repaint(0,233, 575, 85); // } // else { // if ((y>=236) && (y<241)) { // ss.addNote(14); // acArray[14].play(); // } // else if (y<246) { // ss.addNote(13); // acArray[13].play(); // } // else if (y<251) { // ss.addNote(12); // acArray[12].play(); // } // else if (y<256) { // ss.addNote(11); // acArray[11].play(); // } // else if (y<261) { // ss.addNote(10); // acArray[10].play(); // } // else if (y<266) { // ss.addNote(9); // acArray[9].play(); // } // else if (y<271) { // ss.addNote(8); // acArray[8].play(); // } // else if (y<276) { // ss.addNote(7); // acArray[7].play(); // } // else if (y<281) { // ss.addNote(6); // acArray[6].play(); // } // else if (y<286) { // ss.addNote(5); // acArray[5].play(); // } // else if (y<291) { // ss.addNote(4); // acArray[4].play(); // } // else if (y<296) { // ss.addNote(3); // acArray[3].play(); // } // else if (y<301) { // ss.addNote(2); // acArray[2].play(); // } // else if (y<306) { // ss.addNote(1); // acArray[1].play(); // } // else if (y<311) { // ss.addNote(0); // acArray[0].play(); // } // repaint(0,233, 575, 85); // } // } // public void mouseReleased(MouseEvent e) { // curImage=malletImage; // repaint(mx, my, 37, 290); // } // public void mouseClicked(MouseEvent e) { // } // public void mouseEntered(MouseEvent e) { // int y=e.getY(); // if (y>233) { // if (up) { // up=false; // setCursor(new Cursor(Cursor.HAND_CURSOR)); // } // } // else { // if (!up) { // up=true; // setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); // } // } // repaint(); // } // // public void mouseExited(MouseEvent e) { // repaint(); // } //}; addMouseListener(ml); } public void paint(Graphics g) { g.drawImage(xyloImage, 0,0,this); g.drawImage(trebleClefImage, 0,250,this); g.setColor(Color.black); g.drawLine(0,258,575,258); g.drawLine(0,268,575,268); g.drawLine(0,278,575,278); g.drawLine(0,288,575,288); g.drawLine(0,298,575,298); for(int i=0;i<20;i++) { if (ss.noteList[i]!=0) { g.fillOval(50+25*i, 303-5*(ss.noteList[i]-1)+1, 12, 9); if (ss.noteList[i]==1) g.drawLine(50+25*i-3,308,50+25*i+15,308); else if (ss.noteList[i]>12) { g.drawLine(50+25*i-3,248,50+25*i+15,248); if (ss.noteList[i]==15) g.drawLine(50+25*i-3,238,50+25*i+15,238); } if (ss.noteList[i]<7) { g.drawLine(62+25*i, 303-5*(ss.noteList[i]-1)+5, 62+25*i, 303-5*(ss.noteList[i]-1)-28); switch (ss.rhythmList[i]) { case 2: g.drawImage(eighthImage, 62+25*i, 303-5*(ss.noteList[i]-1)-20, this); case 1: g.drawImage(eighthImage, 62+25*i, 303-5*(ss.noteList[i]-1)-28, this); } } else { g.drawLine(50+25*i, 303-5*(ss.noteList[i]-1)+5, 50+25*i, 303-5*(ss.noteList[i]-1)+38); switch (ss.rhythmList[i]) { case 2: g.drawImage(eighthImage2, 50+25*i-6, 303-5*(ss.noteList[i]-1)+12, this); case 1: g.drawImage(eighthImage2, 50+25*i-6, 303-5*(ss.noteList[i]-1)+20, this); } } } } if (up) { g.drawImage(curImage, mx, my, this); } } public void mouseMoved(MouseEvent e) { int x=e.getX(); int y=e.getY(); if (y>233) { if (up) { up=false; setCursor(new Cursor(Cursor.HAND_CURSOR)); repaint(); } } else { if (!up) { up=true; setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } } int tempY=0; if (y-15-my>0) tempY=my; else tempY=y-16; if (y<233) { if (x-mx>18) { repaint(mx, tempY, x-mx+20, 290); } else { repaint(x-18,tempY,54+mx-x,290); } } mx=x-18; my=y-15; } public void mouseDragged(MouseEvent e) { int x=e.getX(); int y=e.getY(); if (y>233) { if (up) { up=false; setCursor(new Cursor(Cursor.HAND_CURSOR)); repaint(); } } else { if (!up) { up=true; setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } } int tempY=0; if (y-15-my>0) tempY=my; else tempY=y-16; if (y<233) { if (x-mx>18) { repaint(mx, tempY, x-mx+20, 290); } else { repaint(x-18,tempY,54+mx-x,290); } } mx=x-18; my=y-15; if (((e.getX()>curCeiling)||(e.getX()0)) { Xylophone.acArray[0].play(); Xylophone.ss.addNote(0); } } else if (x<125) { Xylophone.curFloor=93; Xylophone.curCeiling=125; if ((y<233) && (y>0)) { Xylophone.acArray[1].play(); Xylophone.ss.addNote(1); } } else if (x<158) { Xylophone.curFloor=125; Xylophone.curCeiling=158; if ((y<223) && (y>0)) { Xylophone.acArray[2].play(); Xylophone.ss.addNote(2); } } else if (x<191) { Xylophone.curFloor=158; Xylophone.curCeiling=191; if ((y<220) && (y>0)) { Xylophone.acArray[3].play(); Xylophone.ss.addNote(3); } } else if (x<223) { Xylophone.curFloor=191; Xylophone.curCeiling=223; if ((y<218) && (y>0)) { Xylophone.acArray[4].play(); Xylophone.ss.addNote(4); } } else if (x<257) { Xylophone.curFloor=223; Xylophone.curCeiling=257; if ((y<215) && (y>0)) { Xylophone.acArray[5].play(); Xylophone.ss.addNote(5); } } else if (x<289) { Xylophone.curFloor=257; Xylophone.curCeiling=289; if ((y<210) && (y>0)) { Xylophone.acArray[6].play(); Xylophone.ss.addNote(6); } } else if (x<322) { Xylophone.curFloor=289; Xylophone.curCeiling=322; if ((y<207) && (y>0)) { Xylophone.acArray[7].play(); Xylophone.ss.addNote(7); } } else if (x<354) { Xylophone.curFloor=322; Xylophone.curCeiling=354; if ((y<206) && (y>0)) { Xylophone.acArray[8].play(); Xylophone.ss.addNote(8); } } else if (x<387) { Xylophone.curFloor=354; Xylophone.curCeiling=387; if ((y<202) && (y>0)) { Xylophone.acArray[9].play(); Xylophone.ss.addNote(9); } } else if (x<416) { Xylophone.curFloor=387; Xylophone.curCeiling=416; if ((y<197) && (y>0)) { Xylophone.acArray[10].play(); Xylophone.ss.addNote(10); } } else if (x<448) { Xylophone.curFloor=416; Xylophone.curCeiling=448; if ((y<194) && (y>0)) { Xylophone.acArray[11].play(); Xylophone.ss.addNote(11); } } else if (x<478) { Xylophone.curFloor=448; Xylophone.curCeiling=478; if ((y<192) && (y>0)) { Xylophone.acArray[12].play(); Xylophone.ss.addNote(12); } } else if (x<508) { Xylophone.curFloor=478; Xylophone.curCeiling=508; if ((y<189) && (y>25)) { Xylophone.acArray[13].play(); Xylophone.ss.addNote(13); } } else if (x<538) { Xylophone.curFloor=508; Xylophone.curCeiling=538; if ((y<187) && (y>29)) { Xylophone.acArray[14].play(); Xylophone.ss.addNote(14); } } else { Xylophone.curFloor=538; Xylophone.curCeiling=1601; } Xylophone.curImage=Xylophone.mdImage; xylo.repaint(Xylophone.mx, Xylophone.my, 37, 290); xylo.repaint(0,233, 575, 85); } else { if (y<236) ; else if (y<241) { Xylophone.ss.addNote(14); Xylophone.acArray[14].play(); } else if (y<246) { Xylophone.ss.addNote(13); Xylophone.acArray[13].play(); } else if (y<251) { Xylophone.ss.addNote(12); Xylophone.acArray[12].play(); } else if (y<256) { Xylophone.ss.addNote(11); Xylophone.acArray[11].play(); } else if (y<261) { Xylophone.ss.addNote(10); Xylophone.acArray[10].play(); } else if (y<266) { Xylophone.ss.addNote(9); Xylophone.acArray[9].play(); } else if (y<271) { Xylophone.ss.addNote(8); Xylophone.acArray[8].play(); } else if (y<276) { Xylophone.ss.addNote(7); Xylophone.acArray[7].play(); } else if (y<281) { Xylophone.ss.addNote(6); Xylophone.acArray[6].play(); } else if (y<286) { Xylophone.ss.addNote(5); Xylophone.acArray[5].play(); } else if (y<291) { Xylophone.ss.addNote(4); Xylophone.acArray[4].play(); } else if (y<296) { Xylophone.ss.addNote(3); Xylophone.acArray[3].play(); } else if (y<301) { Xylophone.ss.addNote(2); Xylophone.acArray[2].play(); } else if (y<306) { Xylophone.ss.addNote(1); Xylophone.acArray[1].play(); } else if (y<311) { Xylophone.ss.addNote(0); Xylophone.acArray[0].play(); } xylo.repaint(0,233, 575, 85); } } public void mouseReleased(MouseEvent e) { Xylophone.curImage=Xylophone.malletImage; xylo.repaint(Xylophone.mx, Xylophone.my, 37, 290); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { int y=e.getY(); if (y>233) { if (Xylophone.up) { Xylophone.up=false; xylo.setCursor(new Cursor(Cursor.HAND_CURSOR)); } } else { if (!Xylophone.up) { Xylophone.up=true; xylo.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)); } } xylo.repaint(); } public void mouseExited(MouseEvent e) { xylo.repaint(); } }