function useAudioStream()

in app/src/home.js [35:78]


function useAudioStream(sample, stopCallback) {
  const [audioStream, setAudioStream] = useState(null);

  useEffect(() => {
    if (sample) {
      sample.currentTime = 0;
      sample.play().then(() => {
        const stream = sample.captureStream();
        if (sample.__boost) stream.__boost = sample.__boost;
        if (sample.__responses) stream.__responses = sample.__responses;
        setAudioStream(stream);
      });

      function onEnd() {
        stopCallback();
      }

      sample.addEventListener('ended', onEnd);

      return () => {
        sample.pause();
        sample.removeEventListener('ended', onEnd);
      };
    }

    if (sample === 0) {
      let micStream;
      getMicAudioStream().then((stream) => {
        micStream = stream;
        setAudioStream(stream);
      });

      return () => {
        if (micStream) micStream.getTracks().forEach((t) => t.stop());
      };
    }

    if (sample === null) {
      setAudioStream(null);
    }
  }, [sample, stopCallback]);

  return audioStream;
}