如何停止Wavesurfer麦克风/“this.stop.stream”不起作用

时间:2020-01-14 13:20:46

标签: javascript reactjs microphone getusermedia wavesurfer.js

我正在运行该waveurfer麦克风实例,并且遇到启动this.stop.stream这个问题,但我尝试在启动麦克风后立即停止它的情况。

此麦克风不录制任何内容-只是可视化。但是在镀铬中,麦克风一直保持打开状态直到重新加载。这对用户来说并不好玩。还有米

我发现了为什么在这里发生这种情况=> https://wavesurfer-js.org/api/file/src/plugin/microphone.js.html#lineNumber199

启动麦克风后调用的所有方法都带有“ this”。

我不够先进,无法找出我该如何停止使用该麦克风。

有人可以帮我吗?

预先感谢

  export default function InitialAudioRecording({ handleStop }) {
  const [noAudioYet, setNoAudioYet] = React.useState(true);
  const [isRecording, setIsRecording] = React.useState(false);
  const [isProcessing, setIsProcessing] = React.useState(false);
  const [waveSurfer, setWaveSurfer] = React.useState();
  const [showWavesurfer, setShowWavesurfer] = React.useState(false);
  const waveformRef = React.useRef();

  React.useEffect(() => {
    if (waveformRef.current) {
      const themeGradient = getThemeGradient();
      const wavesurfer = WaveSurfer.create({
        container: waveformRef.current,
        barWidth: 5,
        barHeight: 10,
        cursorWidth: 0,
        waveColor: themeGradient,
        hideScrollbar: true,
        autoCenter: false,
        responsive: true,
        interact: false,
        width: 100,
        height: 350,
        maxCanvasWidth: 2000,
        fillParent: true,
        plugins: [MicrophonePlugin.create()]
      });
      wavesurfer.microphone.on('deviceReady', function(stream) {
        console.log('Device ready!', stream);
      });
      wavesurfer.microphone.on('deviceError', function(code) {
        console.warn('Device error: ' + code);
      });
      setWaveSurfer(wavesurfer);
    }
  }, []);

  const stopMicrophone = waveSurfer && waveSurfer.microphone.stopDevice.bind(waveSurfer);

  function startRecording() {
    waveSurfer.microphone.start();
    setShowWavesurfer(true);
    setNoAudioYet(false);
    setIsRecording(true);
  }

  function handleData(recordedBlob) {
    console.log('chunk of real-time data is: ', recordedBlob);
  }

  function stopRecording() {
    waveSurfer.microphone.stop();
    setIsRecording(false);
    setIsProcessing(true);
    setShowWavesurfer(false);
  }

  return (
    <AudioInterfaceWrapper>
      {noAudioYet && (
        <>
          <NoAudioYet systemMessage={'record a fiddle.'} />
        </>
      )}
      {!noAudioYet && (
        <>
          <Mic record={isRecording} onStop={handleStop} onData={handleData} mimeType="audio/webm" />
          {isProcessing && <LoadingLineLong />}
        </>
      )}
      <Waveform showWavesurfer={showWavesurfer} ref={waveformRef} />
      {isRecording && <StopButton onClick={stopRecording} />}
      {!isRecording && !isProcessing && <RecordButton onClick={startRecording} />}
    </AudioInterfaceWrapper>
  );
}

0 个答案:

没有答案