Tengo una página html con un link hacia un servlet que devuelve audio (clickeo el link y
comienza a reproducirse un sonido)
Si dejo que el sonido termine, todo sigue perfecto. Pero cuando interrumpo el audio que genera (por ejemplo, toco el botón "atrás" del navegador mientras lo está reproduciendo) entonces el link
ya no vuelve a funcionar. Es algo raro este problema, no? Bueno paso el código del servlet
(de paso, ayuda para los que quieren un servlet con audio)
Código:
Se agradece cualquier hintpublic class NewServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletOutputStream sos = null; try { HttpSession session = request.getSession(); IgcTextResult tr= ((IgcTextResult)session.getAttribute("text_result")); if(tr==null) { PrintWriter out = response.getWriter(); response.setContentType("text/html"); out.println("<p>Error en el sonido</p>"); out.flush(); return; } IGCService service = new IGCService(); IGC servicePort = service.getIGCPort(); IgcSoundResult ts = servicePort.text2Sound(tr); byte[] data = ts.getSoundBytes(); System.out.println("tamaño sonido mandado: "+data.length); ByteArrayInputStream bin = new ByteArrayInputStream(data); ByteArrayOutputStream baos = new ByteArrayOutputStream(); AudioInputStream sound = null; sound = AudioSystem.getAudioInputStream (new BufferedInputStream (bin)); AudioSystem.write(sound, AudioFileFormat.Type.WAVE, baos); baos.flush(); response.setContentType("audio/x-wav"); response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); sos = response.getOutputStream(); sos.write(baos.toByteArray()); sos.flush(); } catch(Exception e) { e.printStackTrace(); } finally { if(sos!=null)sos.close(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } }
Saludos