Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/audio/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Servlets 如何将音频base64字符串发送到服务器并在java servlet上进行转换?_Servlets_Audio_Base64_Ibm Watson_Speech To Text - Fatal编程技术网

Servlets 如何将音频base64字符串发送到服务器并在java servlet上进行转换?

Servlets 如何将音频base64字符串发送到服务器并在java servlet上进行转换?,servlets,audio,base64,ibm-watson,speech-to-text,Servlets,Audio,Base64,Ibm Watson,Speech To Text,我有一个web应用程序,它是一个带有语音的聊天机器人。我正在使用IBMWatson和HTML5/JavaScript客户端以及JavaServletAPI服务器端。然而,当我在Java上将base64转换为wav音频文件时,唯一的问题是噪声 function generateBlob(blob) { var url = URL.createObjectURL(blob); var au = document.createElement("audio"); var li = docum

我有一个web应用程序,它是一个带有语音的聊天机器人。我正在使用IBMWatson和HTML5/JavaScript客户端以及JavaServletAPI服务器端。然而,当我在Java上将base64转换为wav音频文件时,唯一的问题是噪声

function generateBlob(blob) {
  var url = URL.createObjectURL(blob);
  var au = document.createElement("audio");
  var li = document.createElement("li");

  au.controls = true;
  au.src = url;

  li.appendChild(au);
  document.querySelector("#recordingsList").appendChild(li);

  var reader = new FileReader();
  reader.readAsDataURL(blob);
  reader.onloadend = function() {
      var base64data = reader.result;
      sendData(base64data);
  }

}

function sendData(data) {
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "speech", true);
  xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhr.addEventListener("load", function() {
        if (xhr.status == 200) {
            console.log(xhr.responseText);
        } else {
            console.log(xhr.status);
            console.log(xhr.responseText);
        }
    });

  parameter = "audio=" + data;
  xhr.send(parameter);
}


JavaScript blob生成还可以!我可以玩HTML。但当我向Java发送帖子时,Servlet不起作用。将其从Base64转换为文件后,它只是噪声

function generateBlob(blob) {
  var url = URL.createObjectURL(blob);
  var au = document.createElement("audio");
  var li = document.createElement("li");

  au.controls = true;
  au.src = url;

  li.appendChild(au);
  document.querySelector("#recordingsList").appendChild(li);

  var reader = new FileReader();
  reader.readAsDataURL(blob);
  reader.onloadend = function() {
      var base64data = reader.result;
      sendData(base64data);
  }

}

function sendData(data) {
  var xhr = new XMLHttpRequest();
  xhr.open("POST", "speech", true);
  xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhr.addEventListener("load", function() {
        if (xhr.status == 200) {
            console.log(xhr.responseText);
        } else {
            console.log(xhr.status);
            console.log(xhr.responseText);
        }
    });

  parameter = "audio=" + data;
  xhr.send(parameter);
}


String audio=req.getParameter(“音频”);
系统输出打印LN(音频);
字节[]byteArray=Base64.getMimeDecoder().decode(audio.split(“Base64”),即[1]);
File tempFile=File.createTempFile(“speech-”,“.wav”,null);
FileOutputStream fos=新的FileOutputStream(tempFile);
fos.write(byteArray);
fos.close();
试一试{
AudioInputStream ais=AudioSystem.getAudioInputStream(tempFile.getAbsoluteFile());
Clip Clip=AudioSystem.getClip();
夹子。打开(ais);
clip.start();
}捕获(不支持DaudioFileException | LineUnavailableException e){
e、 printStackTrace();
}
IamOptions=new IamOptions.Builder()
.apiKey(“”)
.build();
SpeechToText服务=新建SpeechToText(选项);
RecognizeOptions recOptions=新建RecognizeOptions.Builder()
.audio(临时文件)
.contentType(HttpMediaType.AUDIO_WAV)
.build();
SpeechRecognitionResults transcript=service.recognition(recOptions.execute().getResult();
系统输出打印文本(抄本);

任何人都可以帮我吗?

编码到base64是浪费带宽,你只需要发送二进制数据。另外,你应该使用流媒体,而不是暂时发送文件,这将使事情更具响应性。嘿,尼古拉!Tks用于评论。你能举个例子帮助我吗?