The code in this article is JAVA edition and can be used in Android Application Development. The following describes the important code.
Get Token
ApiKey and secretKey are obtained from the Baidu open platform. For more information, see the previous article.
private static void getToken() throws Exception { String getTokenURL = https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials + &client_id= + apiKey + &client_secret= + secretKey; HttpURLConnection conn = (HttpURLConnection) new URL(getTokenURL).openConnection(); token = new JSONObject(printResponse(conn)).getString(access_token); }
Assume that the voice file is testFileName = test. pcm, which is stored in a file. This file can be obtained in many ways. For example, you can call the recording-related API in Android. The following code shows how to obtain recognition results through Http network requests.
The Http connection uses the Post method. First, you need to set parameters and then upload local voice data.
private static void method1() throws Exception { File pcmFile = new File(testFileName); HttpURLConnection conn = (HttpURLConnection) new URL(serverURL).openConnection(); // construct params JSONObject params = new JSONObject(); params.put(format, pcm); params.put(rate, 8000); params.put(channel, 1); params.put(token, token); params.put(cuid, cuid); params.put(len, pcmFile.length()); params.put(speech, DatatypeConverter.printBase64Binary(loadFile(pcmFile))); // add request header conn.setRequestMethod(POST); conn.setRequestProperty(Content-Type, application/json; charset=utf-8); conn.setDoInput(true); conn.setDoOutput(true); // send request DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.writeBytes(params.toString()); wr.flush(); wr.close(); printResponse(conn); }
Then, the response method is obtained, and the specific recognition result is processed.
private static void method2() throws Exception { File pcmFile = new File(testFileName); HttpURLConnection conn = (HttpURLConnection) new URL(serverURL + ?cuid= + cuid + &token= + token).openConnection(); // add request header conn.setRequestMethod(POST); conn.setRequestProperty(Content-Type, audio/pcm; rate=8000); conn.setDoInput(true); conn.setDoOutput(true); // send request DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.write(loadFile(pcmFile)); wr.flush(); wr.close(); printResponse(conn); }
The following shows all the code of this demo. developers can enter their own keys and try to use them.
public class Sample { private static final String serverURL = http://vop.baidu.com/server_api; private static String token = ; private static final String testFileName = test.pcm; //put your own params here private static final String apiKey = ; private static final String secretKey = ; private static final String cuid = ; public static void main(String[] args) throws Exception { getToken(); method1(); method2(); } private static void getToken() throws Exception { String getTokenURL = https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials + &client_id= + apiKey + &client_secret= + secretKey; HttpURLConnection conn = (HttpURLConnection) new URL(getTokenURL).openConnection(); token = new JSONObject(printResponse(conn)).getString(access_token); } private static void method1() throws Exception { File pcmFile = new File(testFileName); HttpURLConnection conn = (HttpURLConnection) new URL(serverURL).openConnection(); // construct params JSONObject params = new JSONObject(); params.put(format, pcm); params.put(rate, 8000); params.put(channel, 1); params.put(token, token); params.put(cuid, cuid); params.put(len, pcmFile.length()); params.put(speech, DatatypeConverter.printBase64Binary(loadFile(pcmFile))); // add request header conn.setRequestMethod(POST); conn.setRequestProperty(Content-Type, application/json; charset=utf-8); conn.setDoInput(true); conn.setDoOutput(true); // send request DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.writeBytes(params.toString()); wr.flush(); wr.close(); printResponse(conn); } private static void method2() throws Exception { File pcmFile = new File(testFileName); HttpURLConnection conn = (HttpURLConnection) new URL(serverURL + ?cuid= + cuid + &token= + token).openConnection(); // add request header conn.setRequestMethod(POST); conn.setRequestProperty(Content-Type, audio/pcm; rate=8000); conn.setDoInput(true); conn.setDoOutput(true); // send request DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.write(loadFile(pcmFile)); wr.flush(); wr.close(); printResponse(conn); } private static void printResponse(HttpURLConnection conn) throws Exception { if (conn.getResponseCode() != 200) { // request error } InputStream is = conn.getInputStream(); BufferedReader rd = new BufferedReader(new InputStreamReader(is)); String line; StringBuffer response = new StringBuffer(); while ((line = rd.readLine()) != null) { response.append(line); response.append(''); } rd.close(); System.out.println(new JSONObject(response.toString()).toString(4)); } private static byte[] loadFile(File file) throws IOException { InputStream is = new FileInputStream(file); long length = file.length();r byte[] bytes = new byte[(int) length]; int offset = 0; int numRead = 0; while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) { offset += numRead; } if (offset < bytes.length) { is.close(); throw new IOException(Could not completely read file + file.getName()); } is.close(); return bytes; }}