通过WebSocket JS发送录制的音频以将Watson语音转换为文本

时间:2018-07-27 17:02:13

标签: javascript audio websocket speech-to-text mediarecorder

我正在尝试获取麦克风输入并通过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的另一个功能不在这里,因为我认为这不会影响理解。

我感谢您的帮助!

谢谢!

2 个答案:

答案 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/