Servlets 如何将音频base64字符串发送到服务器并在java servlet上进行转换?
我有一个web应用程序,它是一个带有语音的聊天机器人。我正在使用IBMWatson和HTML5/JavaScript客户端以及JavaServletAPI服务器端。然而,当我在Java上将base64转换为wav音频文件时,唯一的问题是噪声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
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用于评论。你能举个例子帮助我吗?