Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript scriptNode.onaudioprocess已弃用,是否有其他选择?_Javascript_Audio_Buffer_Html5 Audio_Audiocontext - Fatal编程技术网

Javascript scriptNode.onaudioprocess已弃用,是否有其他选择?

Javascript scriptNode.onaudioprocess已弃用,是否有其他选择?,javascript,audio,buffer,html5-audio,audiocontext,Javascript,Audio,Buffer,Html5 Audio,Audiocontext,我想在说话时获取音频缓冲区,我使用了这个方法来检测它,但我收到一条消息:AudioProcess上的这个方法已被弃用,并且没有被激发,有没有其他方法可以替代,请举例说明 audioContext=新的audioContext({sampleRate:16000}); scriptNode=(audioContext.createScriptProcessor | | audioContext.createJavaScriptNode).call(audioContext,1024,1,1); s

我想在说话时获取音频缓冲区,我使用了这个方法来检测它,但我收到一条消息:AudioProcess上的这个方法已被弃用,并且没有被激发,有没有其他方法可以替代,请举例说明

audioContext=新的audioContext({sampleRate:16000});
scriptNode=(audioContext.createScriptProcessor | | audioContext.createJavaScriptNode).call(audioContext,1024,1,1);
scriptNode.onaudioprocess=函数(audioEvent){
如果(录音){
输入=audioEvent.inputBuffer.getChannelData(0);
//将浮点音频数据转换为16位PCM
var buffer=new ArrayBuffer(input.length*2);
var输出=新数据视图(缓冲区);
对于(变量i=0,偏移量=0;i
使用和方法,您可以将麦克风中的音频流传输到录音机中。然后,每当事件触发记录器时,记录器可以通过WebSocket发送
Blob
对象

async function streamMicrophoneAudioToSocket(ws) {
  let stream;
  const constraints = { video: false, audio: true };

  try {
    stream = await navigator.mediaDevices.getUserMedia(constraints);
  } catch (error) {
    throw new Error(`
      MediaDevices.getUserMedia() threw an error. 
      Stream did not open.
      ${error.name} - 
      ${error.message}
    `);
  }

  const recorder = new MediaRecorder(stream);

  recorder.addEventListener('dataavailable', ({ data }) => {
    ws.send(data);
  });

  recorder.start();
  return recorder;
});
(async () => {
  const ws = new WebSocket('ws://yoururl.com');
  const recorder = await streamMicrophoneAudioToSocket(ws);

  document.addEventListener('click', event => {
    recorder.stop();
  });
}());
下面的函数创建一个流并将其传递给实例。该实例将录制您的麦克风音频,并能够将其发送到您的WebSocket。返回
MediaRecorder
的实例以控制记录器

async function streamMicrophoneAudioToSocket(ws) {
  let stream;
  const constraints = { video: false, audio: true };

  try {
    stream = await navigator.mediaDevices.getUserMedia(constraints);
  } catch (error) {
    throw new Error(`
      MediaDevices.getUserMedia() threw an error. 
      Stream did not open.
      ${error.name} - 
      ${error.message}
    `);
  }

  const recorder = new MediaRecorder(stream);

  recorder.addEventListener('dataavailable', ({ data }) => {
    ws.send(data);
  });

  recorder.start();
  return recorder;
});
(async () => {
  const ws = new WebSocket('ws://yoururl.com');
  const recorder = await streamMicrophoneAudioToSocket(ws);

  document.addEventListener('click', event => {
    recorder.stop();
  });
}());
这样,您也可以通过调用记录器上的方法来停止录制

async function streamMicrophoneAudioToSocket(ws) {
  let stream;
  const constraints = { video: false, audio: true };

  try {
    stream = await navigator.mediaDevices.getUserMedia(constraints);
  } catch (error) {
    throw new Error(`
      MediaDevices.getUserMedia() threw an error. 
      Stream did not open.
      ${error.name} - 
      ${error.message}
    `);
  }

  const recorder = new MediaRecorder(stream);

  recorder.addEventListener('dataavailable', ({ data }) => {
    ws.send(data);
  });

  recorder.start();
  return recorder;
});
(async () => {
  const ws = new WebSocket('ws://yoururl.com');
  const recorder = await streamMicrophoneAudioToSocket(ws);

  document.addEventListener('click', event => {
    recorder.stop();
  });
}());

这一行不推荐使用的代码的完全替代品。替换:

    scriptNode.onaudioprocess = function (audioEvent) {
与:


这包含用于捕获音频和视频的兼容工作代码。

如何捕获音频?您是否打算从您的麦克风捕获声音并将其发送到websocket?@EmielZuurbier是的,它是从我的麦克风发送到websocket的。您能否就下面的答案给出一些反馈?