Javascript 通过WebSocket JS将录制的音频发送到Watson语音文本

Javascript 通过WebSocket JS将录制的音频发送到Watson语音文本,javascript,audio,websocket,speech-to-text,mediarecorder,Javascript,Audio,Websocket,Speech To Text,Mediarecorder,我正在尝试获取麦克风输入,并通过Websocket for 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

我正在尝试获取麦克风输入,并通过Websocket for 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的另一个函数不在这里,因为我认为理解它不会产生影响

谢谢你的帮助


谢谢

我想您是在读卡器读取值之前发送的

var reader = new FileReader();
ws.send(reader.result); // ?
reader.readAsArrayBuffer(audioBlob);

您是否尝试过语音到文本服务的Watson Javascript SDK?它已经具备了您需要的功能我相信:


这个演示页面基于sdk:

它仍然显示为空:请参阅下面的日志:onMessage:{“state”:“listing”}Blob{size:34375,键入:“audio/wav”}Null onClose:1000我没有尝试使用这个sdk,因为它似乎与Node JS一起使用,我正在尝试使用Node Red和Javascript。因此,我可以通过更改以下行来解决问题:const audioBlob=new Blob(audioChunks,{type:'audio/ogg'});,但它只在Firefox中显示JSON结果,而不在Chrome中显示。您找到解决方案了吗?