//------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ /** * Oisoft www Drumbox * * @author Oisoft Rekords * @version 1.1 * @since 1998 ----------------------------------------------------------------------------- Copyright (C) 1999 Oisoft rekords ------------------------------------------------------------------------------ Ce programme est une boite à rythmes virtuelle Il vous permet de composer des séquences rythmiques sur votre micro-ordinateur ------------------------------------------------------------------------------ Ce programme est un logiciel libre. Vous pouvez le redistribuer et/ou le modifier conformément aux dispositions de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation version 2 de la licence. Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN OBJET PARTICULIER. Pour plus de détail, voir la Licence Publique Générale GNU . Vous pouvez reçevoir un exemplaire de la Licence Publique Générale GNU en écrivant à la Free Software Foundation Inc., 675 Mass Ave, Cambridge, MA 02139, Etats-Unis. Vous pouvez consulter la version française de la license sur http://www.april.org ------------------------------------------------------------------------------ Vous pouvez joindre les auteurs de ce programme en écrivant par mail à oisoftrekords@altern.org et optenir des mise à jour sur http://altern.org/oisoftrekords ------------------------------------------------------------------------------ */ import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.applet.AudioClip; import java.net.*; import java.util.*; import java.lang.*; import java.awt.Toolkit; class SoundLoader extends Thread { Applet applet; SoundList soundList; URL baseURL; String relativeURL; public SoundLoader(Applet applet, SoundList soundList, URL baseURL, String relativeURL) { this.applet = applet; this.soundList = soundList; this.baseURL = baseURL; this.relativeURL = relativeURL; setPriority(MIN_PRIORITY); start(); } public void run() { AudioClip audioClip = applet.getAudioClip(baseURL, relativeURL); soundList.putClip(audioClip, relativeURL); } } //Loads and holds a bunch of audio files whose locations are specified //relative to a fixed base URL. class SoundList extends java.util.Hashtable { Applet applet; URL baseURL; public SoundList(Applet applet, URL baseURL) { super(5); //Initialize Hashtable with capacity of 5 entries. this.applet = applet; this.baseURL = baseURL; } public void startLoading(String relativeURL) { new SoundLoader(applet, this, baseURL, relativeURL); } public AudioClip getClip(String relativeURL) { return (AudioClip)get(relativeURL); } public void putClip(AudioClip clip, String relativeURL) { put(relativeURL, clip); } } //----------------------------------------------------------------------------- //------------------------------------------------------------------------------ //public class drumbox public class drumbox extends Applet implements Runnable { static final public String VERSION_NUMBER= "1.1"; static final public String COPYRIGHT="Copyright (C) 1997 Oisoft rekords"; static public String strURL; static private Gnr gnr = null; SoundList soundList; final private int MAX_COLS = 16; Image PMBoxImage = null; int width, height,current_step=0; boolean autoFillMode=false; Thread thread; private int last_step =0; Image bgImage = null; Image TempoPannel = null; Image FillPannel = null; Image PatternPannel = null; Image EchoPannel = null; Image velocitylabelImage= null; Image lengthlabelImage = null; Image steplabelImage = null; Image modelabelImage = null; Image patternlabelImage = null; Image OnImage = null; Image OffImage = null; Image On2Image = null; Image Off2Image = null; int Tempo = 140; private OnOff Pat1Button ; private OnOff Pat2Button ; private OnOff Pat3Button ; private OnOff Pat4Button ; private OnOff SongButton ; private PMBox TempoAffiche; private PMBox FillLength ; private PMBox FillStep ; private PMBox FillVelo ; private OnOff OFill ; private PMBox EchoType ; private PMBox EchoVelo ; private OnOff OEcho ; private static MyButton FillButton = new MyButton( 10,200,30,20,"Fill ") ; private static MyButton ClearButton = new MyButton( 40,200,30,20,"Clear") ; private static MyButton UndoButton = new MyButton( 70,200,30,20,"Undo" ) ; private static MyButton AutoButton = new MyButton(100,200,30,20,"Auto" ) ; private static MyButton StopButton = new MyButton(130,200,30,20,"Stop" ) ; private static MyButton InfoButton = new MyButton(160,200,30,20,"Info" ) ; orPattern pat[]= new orPattern[4]; private int iNumPat =0; Frame brFrame = null; // Variable pour la position des final int PL_Y1 = 40 ; final int PL_Y2 = 140 ; final int PL_Y3 = 121 ; final int PL_X1 = 5 ; final int PL_X2 = 60 ; final int PL_X3 = 220 ; final int PL_X4 = 310 ; final int IT1_X = 5 ; final int IT1_Y = 18 ; //------------------------------------------------------------------------------ public void init () { setLayout(null); URL strURL = getDocumentBase(); int i = 0; loadSounds(); gnr = new Gnr("toto"); MediaTracker tracker = new MediaTracker (this); try { bgImage = getImage(strURL, "back.jpg" ); tracker.addImage (bgImage, i++); TempoPannel = getImage(strURL, "tempopannel.jpg" ); tracker.addImage (TempoPannel, i++); PatternPannel = getImage(strURL, "patternpannel.jpg" ); tracker.addImage (PatternPannel, i++); EchoPannel = getImage(strURL, "echopannel.jpg" ); tracker.addImage (EchoPannel, i++); FillPannel = getImage(strURL, "fillpannel.jpg" ); tracker.addImage (FillPannel, i++); lengthlabelImage = getImage(strURL, "lengthlabel.jpg" ); tracker.addImage (lengthlabelImage, i++); steplabelImage = getImage(strURL, "steplabel.jpg" ); tracker.addImage (steplabelImage, i++); modelabelImage = getImage(strURL, "modelabel.jpg" ); tracker.addImage (modelabelImage, i++); velocitylabelImage = getImage(strURL, "velocitylabel.jpg" ); tracker.addImage (velocitylabelImage, i++); PMBoxImage = getImage(strURL, "pmbox.jpg" ); tracker.addImage (PMBoxImage, i++); OnImage = getImage(strURL, "onon.jpg" ); tracker.addImage (OnImage, i++); OffImage = getImage(strURL, "onoff.jpg" ); tracker.addImage (OffImage, i++); On2Image = getImage(strURL, "onon2.jpg" ); tracker.addImage (On2Image, i++); Off2Image = getImage(strURL, "onoff2.jpg" ); tracker.addImage (Off2Image, i++); int jj=0; while (tracker.checkAll(true)==false) { // System.out.println("Loading images"+ jj); jj++; } repaint(); } catch (Exception e) { System.out.println("Erreur init drumbox load img="+i); System.out.println("getDocumentBase:"+getDocumentBase()); System.out.println(e.toString()); } // Save(); pat[0] = new orPattern(PL_X1,PL_Y1,MAX_COLS,"Pattern #1"); pat[1] = new orPattern(PL_X1,PL_Y1,MAX_COLS,"Pattern #2"); pat[2] = new orPattern(PL_X1,PL_Y1,MAX_COLS,"Pattern #3"); pat[3] = new orPattern(PL_X1,PL_Y1,MAX_COLS,"Pattern #4"); Pat1Button = new OnOff(PL_X2+ 1*IT1_X, PL_Y2+IT1_Y,15,15,"1" ,Off2Image,On2Image ) ; Pat2Button = new OnOff(PL_X2+ 4*IT1_X, PL_Y2+IT1_Y,15,15,"2" ,Off2Image,On2Image ) ; Pat3Button = new OnOff(PL_X2+ 7*IT1_X, PL_Y2+IT1_Y,15,15,"3" ,Off2Image,On2Image ) ; Pat4Button = new OnOff(PL_X2+10*IT1_X, PL_Y2+IT1_Y,15,15,"4" ,Off2Image,On2Image ) ; SongButton = new OnOff(PL_X2+13*IT1_X, PL_Y2+IT1_Y,20,15,"Song",OffImage,OnImage ) ; TempoAffiche = new PMBox(PL_X1+IT1_X,PL_Y2+IT1_Y,20,20,"Vitesse",50,250,140,PMBoxImage,null ) ; TempoAffiche.SetStep(10); FillLength = new PMBox(PL_X3+IT1_X,PL_Y1+2*IT1_Y,20,20,"Length",1,16,1,PMBoxImage,lengthlabelImage ) ; FillStep = new PMBox(PL_X3+IT1_X,PL_Y1+3*IT1_Y,20,20,"Step",1,4,1,PMBoxImage,steplabelImage ) ; FillVelo = new PMBox(PL_X3+IT1_X,PL_Y1+4*IT1_Y,20,20,"Velo",0,3,3,PMBoxImage,velocitylabelImage ) ; OFill = new OnOff(PL_X3+IT1_X,PL_Y1+1*IT1_Y,20,20,"OFill",OffImage,OnImage ) ; EchoType = new PMBox(PL_X3+IT1_X,PL_Y2+2*IT1_Y,20,20,"Step",0,1,0,PMBoxImage,modelabelImage ) ; EchoVelo = new PMBox(PL_X3+IT1_X,PL_Y2+3*IT1_Y,20,20,"Length",1,8,1,PMBoxImage,lengthlabelImage ) ; OEcho = new OnOff(PL_X3+IT1_X,PL_Y2+1*IT1_Y,20,20,"OFill",OffImage,OnImage ) ; setBackground(Color.yellow); iNumPat = 0; // TempoPannelBox = new PannelBox( PL_X1, PL_Y2,30,30,"Tempo", TempoPannel ); addSounds(); // addMouseMotionListener(MouseMotionListener l) } //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- public void loadSounds() { System.out.println("Loading Sounds"); soundList = new SoundList(this, getCodeBase()); soundList.startLoading( "1v3.au"); soundList.startLoading( "2v3.au"); soundList.startLoading( "3v3.au"); soundList.startLoading( "4v3.au"); soundList.startLoading( "5v3.au"); soundList.startLoading( "6v3.au"); soundList.startLoading( "7v3.au"); soundList.startLoading( "8v3.au"); soundList.startLoading( "1v2.au"); soundList.startLoading( "2v2.au"); soundList.startLoading( "3v2.au"); soundList.startLoading( "4v2.au"); soundList.startLoading( "5v2.au"); soundList.startLoading( "6v2.au"); soundList.startLoading( "7v2.au"); soundList.startLoading( "8v2.au"); soundList.startLoading( "1v1.au"); soundList.startLoading( "2v1.au"); soundList.startLoading( "3v1.au"); soundList.startLoading( "4v1.au"); soundList.startLoading( "5v1.au"); soundList.startLoading( "6v1.au"); soundList.startLoading( "7v1.au"); soundList.startLoading( "8v1.au"); } //------------------------------------------------------------------------------ public void addSounds() { int ii=0; while (pat[0].AddSound(0,3,soundList.getClip("1v3.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(1,3,soundList.getClip("2v3.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(2,3,soundList.getClip("3v3.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(3,3,soundList.getClip("4v3.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(4,3,soundList.getClip("5v3.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(5,3,soundList.getClip("6v3.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(6,3,soundList.getClip("7v3.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(7,3,soundList.getClip("8v3.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(0,2,soundList.getClip("1v2.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(1,2,soundList.getClip("2v2.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(2,2,soundList.getClip("3v2.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(3,2,soundList.getClip("4v2.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(4,2,soundList.getClip("5v2.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(5,2,soundList.getClip("6v2.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(6,2,soundList.getClip("7v2.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(7,2,soundList.getClip("8v2.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(0,1,soundList.getClip("1v1.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(1,1,soundList.getClip("2v1.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(2,1,soundList.getClip("3v1.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(3,1,soundList.getClip("4v1.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(4,1,soundList.getClip("5v1.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(5,1,soundList.getClip("6v1.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(6,1,soundList.getClip("7v1.au"))==null && ii<5) ii++;ii=0; while (pat[0].AddSound(7,1,soundList.getClip("8v1.au"))==null && ii<5) ii++;ii=0; } //------------------------------------------------------------------------------ public void start() { if (thread == null) { thread = new Thread(this); thread.start(); } } //------------------------------------------------------------------------------ public void stop() { if (thread != null) { thread.stop(); thread = null; } } //------------------------------------------------------------------------------ public void paint(Graphics g) { paintBg(g); } //------------------------------------------------------------------------------ //Pannels public void paintBg(Graphics g) { System.out.println("paint pp"); if (bgImage!=null) g.drawImage(bgImage , 0, 0, this); if (TempoPannel!= null) g.drawImage(TempoPannel , PL_X1, PL_Y2, this); if (PatternPannel != null) g.drawImage(PatternPannel , PL_X2, PL_Y2, this); if (FillPannel != null) g.drawImage(FillPannel , PL_X3, PL_Y1, this); if (EchoPannel != null) g.drawImage(EchoPannel , PL_X3, PL_Y2, this); } //------------------------------------------------------------------------------ public void update(Graphics g) { if (current_step == last_step) return; if (g == null) return; if (pat[iNumPat] == null) return; last_step = current_step; //repaint(); if ( pat[0].isInfo()==true) { pat[0].paint(g); if (current_step == 0 ) { pat[0].unsetInfo(); paintBg(g); } return; } pat[iNumPat].paintUpdate(g,current_step); pat[iNumPat].paint(g); if (FillButton != null) FillButton.paint (g) ; if (ClearButton != null) ClearButton.paint(g) ; if (UndoButton != null) UndoButton.paint (g) ; if (AutoButton != null) AutoButton.paint (g) ; if (StopButton != null) StopButton.paint (g) ; if (InfoButton != null) InfoButton.paint (g) ; if (Pat1Button != null) Pat1Button.paint (g); if (Pat2Button != null) Pat2Button.paint (g); if (Pat3Button != null) Pat3Button.paint (g); if (Pat4Button != null) Pat4Button.paint (g); if (SongButton != null) SongButton.paint (g); if (TempoAffiche != null) TempoAffiche.paint(g); if (FillLength != null) FillLength.paint(g); if (FillStep != null) FillStep.paint (g); if (FillVelo != null) FillVelo.paint (g); if (OFill != null) OFill.paint (g); if (EchoType != null) EchoType.paint (g); if (EchoVelo != null) EchoVelo.paint (g); if (OEcho != null) OEcho.paint (g); } //------------------------------------------------------------------------------ //public void processMouseEvent(MouseEvent e) public boolean mouseDown(Event e, int x, int y) { /* if (e.getClickCount() !=1) return; int x = e.getX(); int y = e.getY(); */ //--- if (FillButton.OnClick(x,y)==true) pat[iNumPat].FillSample(); //--- if (ClearButton.OnClick(x,y)==true) pat[iNumPat].Clear(); if (UndoButton.OnClick(x,y)==true) pat[iNumPat].ReStoreUndo(); if (StopButton.OnClick(x,y)==true) { autoFillMode=false; } if (AutoButton.OnClick(x,y)==true) { autoFillMode=true; } if (InfoButton.OnClick(x,y)==true) { pat[0].setInfo(); } //--- if (TempoAffiche.OnClick(x,y)==true) Tempo = TempoAffiche.GetValue(); //--- if (Pat1Button.OnClick(x,y)==true) { iNumPat = 0 ; ChangePattern(); } if (Pat2Button.OnClick(x,y)==true) { autoFillMode=false; iNumPat = 1 ; ChangePattern(); } if (Pat3Button.OnClick(x,y)==true) { iNumPat = 2 ; ChangePattern(); // test.show() } if (Pat4Button.OnClick(x,y)==true) { iNumPat = 3 ; ChangePattern(); } OFill.OnClick (x,y); FillStep.OnClick (x,y); FillLength.OnClick (x,y); FillVelo.OnClick (x,y); OEcho.OnClick (x,y); EchoType.OnClick (x,y); EchoVelo.OnClick (x,y); SongButton.OnClick (x,y); //--- pat[iNumPat].OnClick(x,y, OFill.GetState(),FillLength.GetValue(),FillStep.GetValue(),FillVelo.GetValue(), OEcho.GetState(),0 ,EchoType.GetValue(),EchoVelo.GetValue() ); return true; } //------------------------------------------------------------------------------ public void run() { while(true) { try { thread.sleep(250-Tempo+50); } catch (InterruptedException e) { break; } current_step++; if(current_step == MAX_COLS) { current_step = 0; if (autoFillMode==true) { gnr.anotherPattern(); pat[0].setPattern(gnr.getPattern()); } RedrawAll(); if (SongButton.GetState()==true) { iNumPat++; if (iNumPat>3) iNumPat=0; ChangePattern(); } } repaint(); } } //----------------------------------------------- private void ChangePattern() { pat[iNumPat].ForceRedraw() ; if (iNumPat ==0) { Pat1Button.SetOn(); Pat2Button.SetOff(); Pat3Button.SetOff(); Pat4Button.SetOff(); return; } if (iNumPat ==1) { Pat1Button.SetOff(); Pat2Button.SetOn(); Pat3Button.SetOff(); Pat4Button.SetOff(); return; } if (iNumPat ==2) { Pat1Button.SetOff(); Pat2Button.SetOff(); Pat3Button.SetOn(); Pat4Button.SetOff(); return; } if (iNumPat ==3) { Pat1Button.SetOff(); Pat2Button.SetOff(); Pat3Button.SetOff(); Pat4Button.SetOn(); return; } } //----------------------------------------------- //----------------------------------------------- public void RedrawAll() { if (pat[iNumPat]!=null) pat[iNumPat].ForceRedraw(); FillButton.ForceRedraw(); ClearButton.ForceRedraw(); UndoButton.ForceRedraw(); AutoButton.ForceRedraw(); StopButton.ForceRedraw(); InfoButton.ForceRedraw(); Pat1Button.ForceRedraw(); Pat2Button.ForceRedraw(); Pat3Button.ForceRedraw(); Pat4Button.ForceRedraw(); SongButton.ForceRedraw(); TempoAffiche.ForceRedraw(); FillLength.ForceRedraw(); FillStep.ForceRedraw(); FillVelo.ForceRedraw(); OFill.ForceRedraw(); EchoType.ForceRedraw(); EchoVelo.ForceRedraw(); OEcho.ForceRedraw(); } } //------------------------------------------------------------------------