Search code examples
javatext-to-speechibm-cloudwebsphere-libertyibm-watson

How to send bluemix wav stream response from java


I'd like to invoke IBM Bluemix service (say Text to Speech) from my Java code. I've managed to get service credentials and URL but how can I invoke it after?

I've seen some example where people have used similar to below code but wondering how it works for a Text to Speech where it outputs a wav stream.

  String profileString = ex.execute(profileRequest)
         .handleResponse(new ResponseHandler<String>() {
    @Override
     public String handleResponse(HttpResponse r)
      throws ClientProtocolException, IOException {
      }
    }

Can any one suggest on priority please?


Solution

  • The link below has a Java code example of how to use the Watson text-to-speech service.

    https://github.com/watson-developer-cloud/text-to-speech-java

    You should be looking for something like this from the DemoServlet.java class:

    @Override
        protected void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
            if (req.getParameter("text") == null || req.getParameter("voice") == null) {
                req.getRequestDispatcher("/index.jsp").forward(req, resp);
            } else {
                boolean download = false;
                if (req.getParameter("download") != null && req.getParameter("download").equalsIgnoreCase("true")) {
                    download = true;
                }
    
                req.setCharacterEncoding("UTF-8");
                try {
                    String queryStr = req.getQueryString();
                    String url = baseURL + "/v1/synthesize";
                    if (queryStr != null) {
                        url += "?" + queryStr;
                    }
                    URI uri = new URI(url).normalize();
    
                    Request newReq = Request.Get(uri);
                    newReq.addHeader("Accept", "audio/ogg; codecs=opus");
    
                    Executor executor = Executor.newInstance().auth(username, password);
                    Response response = executor.execute(newReq);
                    if (download)
                    {
                        resp.setHeader("content-disposition", "attachment; filename=transcript.ogg");
                    }
                    ServletOutputStream servletOutputStream = resp.getOutputStream();
                    response.returnResponse().getEntity()
                    .writeTo(servletOutputStream);
                    servletOutputStream.flush();
                    servletOutputStream.close();
                } catch (Exception e) {
                    // Log something and return an error message
                    logger.log(Level.SEVERE, "got error: " + e.getMessage(), e);
                    resp.setStatus(HttpStatus.SC_BAD_GATEWAY);
                }
            }
        }
    

    Finally, the link below has instructions on how to create a Java war file and deploy to Bluemix:

    https://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/getting_started/gs-full-java.shtml