luis@16: /* luis@28: * HumanEchoServlet luis@16: * luis@16: * Version information luis@16: * luis@16: * 3 December 2013 luis@16: * luis@16: * Copyright notice luis@16: */ luis@15: luis@15: import java.util.Properties; luis@15: import java.io.IOException; luis@15: luis@28: import java.io.FileInputStream; luis@28: import java.io.BufferedInputStream; luis@28: import java.io.File; luis@28: luis@21: import org.apache.log4j.Logger; luis@16: luis@28: import javax.servlet.*; luis@28: import javax.servlet.http.*; luis@0: luis@0: import com.mathworks.toolbox.javabuilder.MWJavaObjectRef; luis@0: import com.mathworks.toolbox.javabuilder.MWNumericArray; luis@11: import com.mathworks.toolbox.javabuilder.MWStructArray; luis@0: import com.mathworks.toolbox.javabuilder.MWException; luis@15: import com.mathworks.toolbox.javabuilder.internal.MCRConfiguration; luis@15: luis@15: import uk.ac.soton.isvr.*; luis@0: luis@0: public class HumanEchoServlet extends HttpServlet { luis@0: private HumanEcho echo; luis@28: private static Logger logger = Logger.getLogger(HumanEchoServlet.class); luis@0: luis@28: private String wavdir = ""; luis@16: luis@0: public void init(ServletConfig config) throws ServletException { luis@0: super.init(config); luis@0: Chris@42: System.err.println("In init"); Chris@42: Chris@42: logger.error("java.library.path is " + Chris@42: System.getProperty("java.library.path")); Chris@42: luis@15: try { Chris@42: // Read directory properties luis@15: Properties properties = new Properties(); Chris@42: properties.load Chris@42: (Thread.currentThread().getContextClassLoader(). Chris@42: getResourceAsStream("myapp.properties")); luis@15: luis@28: wavdir = properties.getProperty("outdir"); luis@15: Chris@42: System.err.println("WAV file directory is " + wavdir); Chris@42: luis@15: } catch (IOException e) { luis@15: e.printStackTrace(); luis@15: } luis@15: luis@0: try { Chris@42: // Test that we can construct one of the MATLAB objects Chris@42: Chris@42: long before = System.currentTimeMillis(); luis@0: echo = new HumanEcho(); Chris@42: long after = System.currentTimeMillis(); Chris@42: System.err.println("Created a HumanEcho object: it took " + (after - before) + " ms"); Chris@42: } catch (MWException e) { luis@0: e.printStackTrace(); luis@0: } luis@0: } luis@0: luis@0: public void destroy() { luis@0: super.destroy(); luis@0: Chris@42: if (echo != null) { luis@0: echo.dispose(); luis@0: } luis@0: } luis@0: luis@11: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { luis@0: Chris@47: System.err.println("In doGet"); Chris@47: luis@11: // todo: validate/normalise distance luis@11: int dist = Integer.parseInt(request.getParameter("dist")); luis@38: luis@38: logger.info("String azim is: " + request.getParameter("azim")); luis@38: Float azim = Float.parseFloat(request.getParameter("azim")); luis@38: luis@11: MWStructArray Input = null; luis@11: HumanEcho echo; luis@0: luis@28: String outputfname = new String(); luis@28: Chris@47: System.err.println("Got dist and azim"); Chris@42: luis@11: try { Chris@42: //!!! erch, shouldn't be creating a new one on each request as well as a global one luis@11: echo = new HumanEcho(); luis@0: luis@16: logger.error("We are logging!"); luis@28: logger.warn(System.getProperty("catalina.base")); luis@28: Chris@42: System.err.println("Done some logging"); Chris@42: System.err.println(System.getProperty("catalina.base")); luis@16: luis@11: // Matlab structure: Chris@47: // Input = struct('dist', 0.9, 'azim', 0, 'orient', 'horz', 'dirweight', 0.2, 'outdir', '/tmp/wav', 'outname', 'foo.wav') luis@0: Chris@47: String[] InputStructFields = {"dist", "azim", "orient", "dirweight", "outdir", "outname"}; Chris@47: luis@11: Input = new MWStructArray(1, 1, InputStructFields); luis@11: Input.set("dist", 1, Double.valueOf(dist)); luis@38: Input.set("azim", 1, Double.valueOf(azim)); luis@11: Input.set("orient", 1, "horz"); luis@11: Input.set("dirweight", 1, Double.valueOf(0.2)); Chris@46: Input.set("outdir", 1, wavdir); Chris@46: luis@11: // the ofname should depend on the parameters luis@11: StringBuilder sb = new StringBuilder(); luis@17: sb.append("e_d"); luis@11: sb.append(dist); luis@38: sb.append("_a"); luis@38: sb.append(azim); luis@28: outputfname = sb.toString(); luis@11: Chris@46: Input.set("outname", 1, outputfname); luis@11: luis@11: // todo: before calling should test if wav already exists.. luis@11: Object[] result = echo.simulateBinauralSignals(Input); luis@0: } luis@0: catch(MWException e) { luis@0: e.printStackTrace(); luis@0: } luis@0: luis@28: // Creating the stream luis@28: ServletOutputStream stream = null; luis@28: BufferedInputStream buf = null; luis@28: luis@28: try{ luis@28: stream = response.getOutputStream(); luis@28: File wavfile = new File(outputfname); luis@28: luis@28: //set response headers luis@32: response.setContentType("audio/x-wav"); luis@28: response.addHeader("Content-Disposition","attachment; filename=" + outputfname ); luis@28: response.setContentLength( (int) wavfile.length( ) ); luis@28: luis@28: FileInputStream input = new FileInputStream(wavfile); luis@28: buf = new BufferedInputStream(input); luis@28: int readBytes = 0; luis@28: luis@28: //read from the file; write to the ServletOutputStream luis@28: while((readBytes = buf.read( )) != -1) luis@28: stream.write(readBytes); luis@28: luis@28: } catch (IOException ioe){ luis@28: throw new ServletException(ioe.getMessage( )); luis@28: } finally { luis@28: //close the input/output streams luis@28: if(stream != null) luis@28: stream.close( ); luis@28: luis@28: if(buf != null) luis@28: buf.close( ); luis@28: } luis@28: luis@32: logger.info("Wrote file:" + outputfname); luis@0: } luis@0: }