/** * RandomChordServlet.java * * This is the web interface to the application which * performs algorithmic composition and generates MIDI files. * interactively from user input via html form. * It performs the following for each http request: * 1. receives and validates all inpurt fields * 2. instatiates chordComposer and passes validaed input fields * 3. invokes chordComposer class methods to create and save MIDI file * 4. outputs html to http response including a link to the MIDI file * * This module is part of Karl Brown's MIDI programming project. * */ package MidiApps; import javax.servlet.*; import javax.servlet.http.*; import java.util.Enumeration; import javax.sound.midi.*; /** * * @author Karl Brown * @version 1.0 * last updated 2/16/2003 */ public class RandomChordServlet extends HttpServlet { tracer tr; //Global variables String namestring; String divstring; Integer divint; String beatLengthString; Long beatLengthLong; String numGroupsString; Integer numGroupsInt; String dirname; //Player group global variables String isOnString; Integer isOnInt; String patchstring; Integer patchint; String percentRestString; Integer percentRestInt; String minOctaveString; Integer minOctaveInt; String maxOctaveString; Integer maxOctaveInt; String minVelOnString; Integer minVelOnInt; String maxVelOnString; Integer maxVelOnInt; String minVelOffString; Integer minVelOffInt; String maxVelOffString; Integer maxVelOffInt; String minNotesString; Integer minNotesInt; String maxNotesString; Integer maxNotesInt; String minNoteLenString; Integer minNoteLenInt; String maxNoteLenString; Integer maxNoteLenInt; /** Initializes the servlet. */ public void init(ServletConfig config) throws ServletException { super.init(config); } /** Destroys the servlet. */ public void destroy() { } /** Processes requests for both HTTP GET and POST methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { tr = new tracer(); java.io.PrintWriter out = response.getWriter(); tr.setPrintWriter(out); response.setContentType("text/html"); tr.print(""); tr.print(""); tr.print("Karl Brown MIDI Servlet Result"); tr.print(""); tr.print(""); tr.print("

Karl Brown Random Chord MIDI servlet result page

"); tr.print("Today is "+new java.util.Date()+".
"); namestring = request.getParameter("name"); // tr.print("name = "+namestring + "
"); divstring = request.getParameter("divs"); // tr.print("divisions = "+ divstring + "
"); divint = new Integer(divstring); beatLengthString = request.getParameter("beatlen"); beatLengthLong = new Long(beatLengthString); numGroupsString = request.getParameter("numgroups"); // tr.print("numGroupsString = "+ numGroupsString + "
"); numGroupsInt = new Integer(numGroupsString); // tr.trace("init parameters"); Enumeration e = getInitParameterNames(); while(e.hasMoreElements()){ String key=(String)e.nextElement(); String value=getInitParameter(key); // tr.trace(" " + key + " = " + value); } String mydirname = getInitParameter("dirparam"); // tr.trace("mydirname = " + mydirname); // dirname = "C:\\Tomcat\\webapps\\ROOT\\midifiles"; //test // dirname = "/home/virtual/site98/fst/var/www/html/midifiles"; //prod // dirname = request.getParameter("dirparam"); dirname = mydirname; out.println("

"); // tr.trace("instatiating chordComposer.."); chordComposer cc = new chordComposer(); composer c = (composer)cc; // tr.trace("executing chordComposer.compose()..."); cc.setNumDivisions(divint.intValue()); c.setDirectory(dirname); c.setFileName(namestring); c.setTracer(tr); //******** BEGIN HARD-CODED VALUES ******** c.setResolution(96); cc.setNumDrumGroups(0); cc.setBaseMidiPitch((byte)composer.C_DOWN_3); cc.setNumOctaves(7); //******** END HARD-CODED VALUES ******** cc.setBeatLength((long)beatLengthLong.longValue()); cc.setNumGroups((int)numGroupsInt.intValue()); for (int i = 0; i < numGroupsInt.intValue(); i++) { doPlayGroup(request, cc, i); } c.compose(); // tr.trace("returned from c.compose()"); // tr.trace("executing chordComposer.writeMidiFile()..."); c.writeMidiFile(); // tr.trace("returned from chordComposer.writeMidiFile()"); String finalName = c.getFileNameFinal(); out.println("

Here is your MIDI file:
" + finalName + "

"); tr.print("Try this servlet again
"); tr.print("Midi Servlet home page"); tr.print("

"); tr.print(""); tr.print(""); out.close(); System.gc(); } /** Handles the HTTP GET method. * @param request servlet request * @param response servlet response */ protected void doPlayGroup(HttpServletRequest request, chordComposer cc, int groupIndex) { try { isOnString = request.getParameter("ison" + groupIndex); // tr.trace("isOnString: " + isOnString); isOnInt = new Integer(isOnString); patchstring = request.getParameter("patch" + groupIndex); // tr.trace("patchstring: " + patchstring); patchint = new Integer(patchstring); percentRestString = request.getParameter("percentrest" + groupIndex); // tr.trace("percentRestString: " + percentRestString); percentRestInt = new Integer(percentRestString); minOctaveString = request.getParameter("minoctave" + groupIndex); // tr.trace("minOctaveString: " + minOctaveString); minOctaveInt = new Integer(minOctaveString); maxOctaveString = request.getParameter("maxoctave" + groupIndex); // tr.trace("maxOctaveString: " + maxOctaveString); maxOctaveInt = new Integer(maxOctaveString); minVelOnString = request.getParameter("minvelon" + groupIndex); // tr.trace("minVelOnString: " + minVelOnString); minVelOnInt = new Integer(minVelOnString); maxVelOnString = request.getParameter("maxvelon" + groupIndex); // tr.trace("maxVelOnString: " + maxVelOnString); maxVelOnInt = new Integer(maxVelOnString); minVelOffString = request.getParameter("minveloff" + groupIndex); // tr.trace("minVelOffString: " + minVelOffString); minVelOffInt = new Integer(minVelOffString); maxVelOffString = request.getParameter("maxveloff" + groupIndex); // tr.trace("maxVelOffString: " + maxVelOffString); maxVelOffInt = new Integer(maxVelOffString); minNotesString = request.getParameter("minnotes" + groupIndex); // tr.trace("minNotesString: " + minNotesString); minNotesInt = new Integer(minNotesString); maxNotesString = request.getParameter("maxnotes" + groupIndex); // tr.trace("maxNotesString: " + maxNotesString); maxNotesInt = new Integer(maxNotesString); minNoteLenString = request.getParameter("minlen" + groupIndex); // tr.trace("minNoteLenString: " + minNoteLenString); minNoteLenInt = new Integer(minNoteLenString); maxNoteLenString = request.getParameter("maxlen" + groupIndex); // tr.trace("maxNoteLenString: " + maxNoteLenString); maxNoteLenInt = new Integer(maxNoteLenString); cc.setIsOn(isOnInt.intValue(), groupIndex); cc.setPatch((byte)patchint.intValue(), groupIndex); cc.setPercentChanceRest(percentRestInt.intValue(),groupIndex); cc.setMinOctave(minOctaveInt.intValue(),groupIndex); cc.setMaxOctave(maxOctaveInt.intValue(),groupIndex); cc.setMinVelOn((byte)minVelOnInt.intValue(),groupIndex); cc.setMaxVelOn((byte)maxVelOnInt.intValue(),groupIndex); cc.setMinVelOff((byte)minVelOnInt.intValue(),groupIndex); cc.setMaxVelOff((byte)maxVelOffInt.intValue(),groupIndex); cc.setMinNoteLength(minNoteLenInt.intValue(),groupIndex); cc.setMaxNoteLength(maxNoteLenInt.intValue(),groupIndex); cc.setMinNumPitches(minNotesInt.intValue(),groupIndex); cc.setMaxNumPitches(maxNotesInt.intValue(),groupIndex); } catch(Exception e) { tr.trace("RandomChordServlet.doPlayGroup() exception: " + e.toString()); } } /** Handles the HTTP GET method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } /** Handles the HTTP POST method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } /** Returns a short description of the servlet. */ public String getServletInfo() { return "Creates a free jazz style MIDI composition using equal tempered scales."; } }