package ee.esutoniagodesu.util.commons; import org.apache.commons.io.Charsets; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.Charset; import java.util.AbstractMap; import java.util.Map; public final class JCAudio { private static final Logger log = LoggerFactory.getLogger(JCAudio.class); private static Charset _charset = Charsets.UTF_8; public static Map.Entry<String, byte[]> googleTTSBytes(String word, String locale) throws IOException { return googleTTSBytes(word, locale, _charset); } /** * Downloads audio file from google tts service */ public static Map.Entry<String, byte[]> googleTTSBytes(String word, String locale, Charset charset) throws IOException { StringBuilder msg = new StringBuilder("googleTTSBytes"); long ms = System.currentTimeMillis(); word = java.net.URLEncoder.encode(word, charset.displayName()); StringBuilder surl = new StringBuilder("http://translate.google.com/translate_tts?"); surl.append("ie=").append(charset.displayName()); surl.append("&tl=").append(locale); surl.append("&q=").append(word); msg.append(": url=").append(surl.toString()); URL url = new URL(surl.toString()); byte[] bytes = retrieveBytes(url); msg.append(", bytes.length=").append(bytes.length); msg.append(", time=").append(System.currentTimeMillis() - ms); log.debug(msg.toString()); return new AbstractMap.SimpleEntry<>(surl.toString(), bytes); } public static Map.Entry<String, byte[]> romajidesuTTS(String word) throws IOException { return romajidesuTTS(word, _charset); } public static Map.Entry<String, byte[]> romajidesuTTS(String word, Charset charset) throws IOException { StringBuilder msg = new StringBuilder("romajidesuTTSBytes"); long ms = System.currentTimeMillis(); word = java.net.URLEncoder.encode(word, charset.displayName()); StringBuilder surl = new StringBuilder("http://www.romajidesu.com/sound/"); surl.append(word).append(".mp3"); msg.append(": url=").append(surl.toString()); URL url = new URL(surl.toString()); byte[] bytes = retrieveBytes(url); msg.append(", bytes.length=").append(bytes.length); msg.append(", time=").append(System.currentTimeMillis() - ms); log.debug(msg.toString()); return new AbstractMap.SimpleEntry<>(surl.toString(), bytes); } public static byte[] retrieveBytes(URL url) throws IOException { HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); urlConn.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); InputStream audioSrc = urlConn.getInputStream(); DataInputStream read = new DataInputStream(audioSrc); return IOUtils.toByteArray(read); } }