Use RecordRTC in AudioRecorder component

pull/4020/head
Angel Fernando Quiroz Campos 4 years ago
parent 85358462a1
commit 003218572d
  1. 43
      assets/vue/components/AudioRecorder.vue

@ -43,6 +43,7 @@
<script> <script>
import {reactive, toRefs} from "vue"; import {reactive, toRefs} from "vue";
import {RecordRTCPromisesHandler, StereoAudioRecorder} from "recordrtc";
export default { export default {
name: "AudioRecorder", name: "AudioRecorder",
@ -59,38 +60,27 @@ export default {
audioList: [], audioList: [],
}); });
let mediaRecorder = null; let recorder = null;
let mediaChunks = [];
function record() { async function record() {
if (!navigator.mediaDevices.getUserMedia) { if (!navigator.mediaDevices.getUserMedia) {
return; return;
} }
navigator.mediaDevices.getUserMedia({audio: true}) let stream = await navigator.mediaDevices.getUserMedia({video: false, audio: true});
.then((stream) => { recorder = new RecordRTCPromisesHandler(stream, {
mediaRecorder = new MediaRecorder(stream); recorderType: StereoAudioRecorder,
mediaRecorder.ondataavailable = e => { type: 'audio',
mediaChunks.push(e.data) mimeType: 'audio/wav',
}; numberOfAudioChannels: 2
mediaRecorder.onstop = e => { });
stream.getAudioTracks()[0].stop(); recorder.startRecording();
const audioItem = new Blob(mediaChunks, {type: 'audio/ogg; codecs=opus'});
mediaChunks = [];
recorderState.audioList.push(audioItem);
};
mediaRecorder.start();
recorderState.isRecording = true; recorderState.isRecording = true;
})
.catch(console.log);
} }
function stop() { async function stop() {
if (!mediaRecorder) { if (!recorder) {
return; return;
} }
@ -98,7 +88,12 @@ export default {
recorderState.audioList.shift(); recorderState.audioList.shift();
} }
mediaRecorder.stop(); await recorder.stopRecording();
const audioBlob = await recorder.getBlob();
recorderState.audioList.push(audioBlob);
recorderState.isRecording = false; recorderState.isRecording = false;
} }

Loading…
Cancel
Save