代码之家  ›  专栏  ›  技术社区  ›  Shipra Trivedi

Bing语音API给出错误的JAVA代码

  •  0
  • Shipra Trivedi  · 技术社区  · 9 年前

    我试图使用来自Java服务的Bind Speech Rest API,但每次我都得到408响应代码。

    https://speech.platform.bing.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US

    我曾尝试使用不同的方法调用REST API,但一直以来,错误都是408请求超时。

    这是我的JAVA代码

    DataOutputStream dos = null;
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1024; // 1024*1024 = 1MB.  212144 is a quarter MB.
    FileInputStream fileInputStream = null;
    
    fileInputStream = new FileInputStream(new File("D://hello.wav"));
    
    
                   URL url = new URL("https://speech.platform.bing.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US");
       HttpURLConnection conn = (HttpURLConnection) url.openConnection();
       //method
       conn.setRequestMethod("POST");
       conn.setRequestProperty("Transfer-Encoding", "chunked");
       conn.setRequestProperty("Accept","application/json;text/xml");
       conn.setRequestProperty("Host","speech.platform.bing.com");
       //header
       conn.setRequestProperty("content-length", String.valueOf(fileInputStream.available()));
       conn.setRequestProperty("Content-Type", "audio/wav; codec=\"audio/pcm\"; samplerate=16000;");
       conn.setRequestProperty("Authorization", "Bearer "+ token );
       conn.setReadTimeout(22222230);
       conn.setDoOutput(true);
    
       conn.connect();
    
       dos = new DataOutputStream(conn.getOutputStream());
    
       bytesAvailable = fileInputStream.available();
       bufferSize = Math.min(bytesAvailable, maxBufferSize);
       buffer = new byte[bufferSize];
    
       bytesRead = fileInputStream.read(buffer, 0, bufferSize);
       while (bytesRead > 0)
       {
         try {
           dos.write(buffer, 0, bufferSize);          
         } catch (OutOfMemoryError oome) {
    
           oome.printStackTrace();
           fileInputStream.close();
           throw new Exception("Out Of Memory!");
         }
         bytesAvailable = fileInputStream.available();
         bufferSize = Math.min(bytesAvailable, maxBufferSize);
         bytesRead = fileInputStream.read(buffer, 0, bufferSize);
       }
    
       fileInputStream.close();
       dos.flush();
       dos.close();
    
    
       BufferedReader in = new BufferedReader(
               new InputStreamReader(
               conn.getInputStream()));
                String decodedString;
                while ((decodedString = in.readLine()) != null) {
                System.out.println(decodedString);
                }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   cthrash    9 年前

    Bing语音API需要音频数据的分块传输。对于 HttpURLConnection Transfer-Encoding 标头不会神奇地导致传输类型切换——您需要通过 setChunkedStreamingMode 或其变体之一。您还需要省略 Content-Length

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    //method
    conn.setRequestMethod("POST");
    conn.setChunkedStreamingMode(0);
    //header
    conn.setRequestProperty("Accept","application/json;text/xml");
    conn.setRequestProperty("Content-Type", "audio/wav; codec=\"audio/pcm\"; samplerate=16000;");
    conn.setRequestProperty("Authorization", "Bearer "+ token );
    
    推荐文章