package com.tlabs.speechalyzer.util; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import org.apache.log4j.Logger; import com.felix.util.FileUtil; import com.felix.util.StringUtil; import com.felix.util.Util; import com.tlabs.speechalyzer.Speechalyzer; public class EmlUtils { private static Logger logger = Logger.getLogger(EmlUtils.class); public static String recognizeFile(String filePath) { String result = ""; String fileName = new File(filePath).getName(); String tmpFileName = Speechalyzer._config .getString("recognitionTmpDir") + fileName; String cmd = "sox " + filePath + " -U -r8000 " + tmpFileName; if (fileName.endsWith(".raw")) { String sr = Speechalyzer._config.getString("sampleRate"); // assuming linear 16bit pcm cmd = "sox -r "+sr+" -s -b16 " + filePath + " -U -r8000 " + tmpFileName; } try { Util.execCmd(cmd); } catch (Exception e) { e.printStackTrace(); } FileUtil.waitForFile(tmpFileName, false); result = EmlUtils.postAudioToEml(tmpFileName, Speechalyzer._config .getString("emlUrl")); try { FileUtil.delete(tmpFileName); } catch (Exception e) { e.printStackTrace(); } return result; } public static String postAudioToEml(String filename, String emlURL) { String result = ""; try { logger.debug("requesting: " + emlURL + " with file: " + filename); ClientHttpRequest chr = new ClientHttpRequest(emlURL); chr.setParameter("audio", new File(filename)); InputStream is = chr.post(); final char[] buffer = new char[0x10000]; StringBuilder out = new StringBuilder(); Reader in = new InputStreamReader(is, FileUtil.ENCODING_ISO8859_1); int read; do { read = in.read(buffer, 0, buffer.length); if (read > 0) { out.append(buffer, 0, read); } } while (read >= 0); result = out.toString(); logger.debug("result: " + result); } catch (Exception e) { e.printStackTrace(); return e.getMessage(); } return result; } }