微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

scriptNode.onaudioprocess 已弃用,还有其他选择吗?

如何解决scriptNode.onaudioprocess 已弃用,还有其他选择吗?

我想在通话时获取音频缓冲区,我使用此方法来检测它,但我收到消息,此方法 onaudioprocess 已弃用且未触发,是否有其他替代方法与示例。

audioContext = new AudioContext({ sampleRate: 16000 });
scriptNode = (audioContext.createscriptprocessor || audioContext.createJavaScriptNode).call(audioContext,1024,1,1);
scriptNode.onaudioprocess = function (audioEvent) {
  if (recording) {
    input = audioEvent.inputBuffer.getChannelData(0);
    // convert float audio data to 16-bit PCM
    var buffer = new ArrayBuffer(input.length * 2);
    var output = new DataView(buffer);
    for (var i = 0,offset = 0; i < input.length; i++,offset += 2) {
      var s = Math.max(-1,Math.min(1,input[i]));
      output.setInt16(offset,s < 0 ? s * 0x8000 : s * 0x7fff,true);
    }
    ws.send(buffer);
  }
};

解决方法

使用 MediaStream Recording APIMediaDevices.getUserMedia() 方法,您可以从麦克风流式传输音频并将其流式传输到录音机中。然后,只要在记录器上触发 ondataavailable 事件,记录器就可以通过 WebSocket 发送 import multiprocessing as mp data_lines = [0]*10000 # read it from file size = 2000 # Split the list into a list of list (with chunksize `size`) work = [data_lines[i:i + size] for i in range(0,len(data_lines),size)] def process(data): result = len(data) # some something fancy return result with mp.Pool() as p: result = p.map(process,work) save_computed_data_to_disk(file_name,result) 对象。

下面的函数创建一个流并将其传递给一个 MediaRecorder 实例。该实例将记录您的麦克风音频并能够将其发送到您的 WebSocket。返回 Blob 的实例以控制记录器。

MediaRecorder

这样您也可以停止录音,如果您愿意,可以通过调用录音机上的 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;
});
,

那一行已弃用代码的确切替代品。替换:

    scriptNode.onaudioprocess = function (audioEvent) {

与:

    scriptNode.addEventListener('audioprocess',function (audioEvent) {

example 包含用于捕获音频和视频的合规工作代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。