Я запускаю этот экземпляр микрофона waveurfer и сталкиваюсь с проблемой под названием this.stop.stream
, которая не работает, когда я пытаюсь остановить микрофон после его запуска.
Этот ми c ничего не записывает - это просто визуализация. Но в chrome ми c просто остается открытым до перезагрузки. Что не весело для пользователей. И м.
Я нашел, почему это происходит здесь => https://wavesurfer-js.org/api/file/src/plugin/microphone.js.html#lineNumber199
все методы, которые вызываются после запуска mi c, имеют значение "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>
);
}