我正在尝试获取麦克风输入并通过Websocket发送,以将Watson Speech to Text发送给文本,但是很难完成,有人可以帮我吗?
var wsURI = "URL here";
var ws = new WebSocket(wsURI);
ws.onopen = function(evt) { onOpen(evt) };
ws.onmessage = function(evt) { onMessage(evt) };
ws.onclose = function(evt) { onClose(evt) };
ws.onerror = function(evt) { onError(evt) };
function enableMic(){
document.getElementById("startButton").addEventListener("click", function() {
navigator.mediaDevices.getUserMedia({ audio: true })
.then(stream => {
const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
const audioChunks = [];
mediaRecorder.addEventListener("dataavailable", event => {
audioChunks.push(event.data);
});
document.getElementById("stopButton").addEventListener("click", function() {
mediaRecorder.stop();
});
mediaRecorder.addEventListener("stop", () => {
const audioBlob = new Blob(audioChunks, { type: 'audio/wav' });
const audioUrl = URL.createObjectURL(audioBlob);
const audio = new Audio(audioUrl);
var reader = new FileReader();
ws.send(reader.result);
reader.readAsArrayBuffer(audioBlob);
audio.play();
console.log(audioBlob);
console.log(reader.result);
但是我无法将audioBlob作为AudioBuffer发送,所以我想通过websocket发送它。在最后一个console.log中,结果为空
注意:Websockets的另一个功能不在这里,因为我认为这不会影响理解。
我感谢您的帮助!
谢谢!
答案 0 :(得分:0)
我认为您是在读者读取值之前发送它的?
var reader = new FileReader();
ws.send(reader.result); // ?
reader.readAsArrayBuffer(audioBlob);
答案 1 :(得分:0)
您是否尝试过将Watson Javascript SDK用于语音转文本服务?我相信它已经具有您需要的功能:https://github.com/watson-developer-cloud/speech-javascript-sdk
此演示页面基于该SDK:https://speech-to-text-demo.ng.bluemix.net/