我看到了Google演示并进行了尝试。想要将其实施到我的Web应用程序,但似乎无法正常工作。我已经使用我的麦克风捕获了一个音频Blob,并像Google希望的那样在base64中对其进行了编码。问题是我所做的一切,不会作为错误返回,而是返回空。我通过ajax发送数据。这是一些代码来演示:
navigator.mediaDevices
.getUserMedia(
// constraints - only audio needed for this app
{
audio: true
}
)
// Success callback
.then(function(stream) {
console.log(navigator.mediaDevices.getSupportedConstraints());
var mediaRecorder = new MediaRecorder(stream, { sampleRate: 16000 });
var chunks = [];
$(".rec-button")
.mousedown(function() {
console.log("rec start");
$(".rec-button i").addClass("recStart");
mediaRecorder.start();
console.log(mediaRecorder.state);
console.log("recorder started");
})
.mouseup(function() {
console.log("rec end");
$(".rec-button i").removeClass("recStart");
mediaRecorder.stop();
mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
var audio = document.getElementById("player");
var blob = new Blob(chunks, { type: "audio/ogg; codecs=opus" });
var player = document.getElementById("player");
player.src = URL.createObjectURL(blob);
chunks = [];
console.log(blob);
var reader = new window.FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
var base64 = reader.result;
base64 = base64.split(",")[1];
var jsonRec = {
audio: {
content: base64
},
config: {
encoding: "OGG_OPUS",
sampleRateHertz: 48000,
languageCode: "en-US",
audioChannelCount: 2,
enableSeparateRecognitionPerChannel: true,
}
};
$.ajax({
url:
"https://speech.googleapis.com/v1/speech:recognize?key=**my_api_key**",
method: "POST",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(jsonRec),
success: function(response) {
console.log(response);
},
error: function(err) {
console.log(err);
}
});
};
console.log(mediaRecorder.state);
console.log("recorder stopped");
};
});
})
// Error callback
.catch(function(err) {
console.log("The following getUserMedia error occured: " + err);
});
我可以在标签中播放音频,所以我不使用似乎是问题所在。我的回应总是以{}结尾。我希望它发送的是我的演讲的录音内容