add audio track to recorded video

This commit is contained in:
2022-04-24 23:17:58 +02:00
parent 2bf8938183
commit 4dd8c3b029
2 changed files with 18 additions and 4 deletions

File diff suppressed because one or more lines are too long

View File

@@ -90,6 +90,9 @@ export default function MicroW8(screen, config = {}) {
keyboardElement.onkeydown = keyHandler; keyboardElement.onkeydown = keyHandler;
keyboardElement.onkeyup = keyHandler; keyboardElement.onkeyup = keyHandler;
} }
let audioContext;
let audioNode;
async function runModule(data, keepUrl) { async function runModule(data, keepUrl) {
if (cancelFunction) { if (cancelFunction) {
@@ -97,7 +100,7 @@ export default function MicroW8(screen, config = {}) {
cancelFunction = null; cancelFunction = null;
} }
let audioContext = new AudioContext({sampleRate: 44100}); audioContext = new AudioContext({sampleRate: 44100});
let keepRunning = true; let keepRunning = true;
let abortController = new AbortController(); let abortController = new AbortController();
cancelFunction = () => { cancelFunction = () => {
@@ -114,7 +117,7 @@ export default function MicroW8(screen, config = {}) {
} }
await audioContext.audioWorklet.addModule(audioWorkletUrl); await audioContext.audioWorklet.addModule(audioWorkletUrl);
let audioNode = new AudioNode(audioContext); audioNode = new AudioNode(audioContext);
let audioReadyFlags = 0; let audioReadyFlags = 0;
let audioReadyResolve; let audioReadyResolve;
@@ -334,14 +337,25 @@ export default function MicroW8(screen, config = {}) {
let videoRecorder; let videoRecorder;
let videoStartTime; let videoStartTime;
let videoAudioSourceNode;
let videoAudioStreamNode;
function recordVideo() { function recordVideo() {
if(videoRecorder) { if(videoRecorder) {
videoRecorder.stop(); videoRecorder.stop();
videoRecorder = null; videoRecorder = null;
videoAudioSourceNode.disconnect(videoAudioStreamNode);
videoAudioSourceNode = null;
videoAudioStreamNode = null;
return; return;
} }
let stream = screen.captureStream();
videoAudioStreamNode = audioContext.createMediaStreamDestination();
videoAudioSourceNode = audioNode;
audioNode.connect(videoAudioStreamNode);
stream.addTrack(videoAudioStreamNode.stream.getAudioTracks()[0]);
videoRecorder = new MediaRecorder(screen.captureStream(), { videoRecorder = new MediaRecorder(stream, {
mimeType: 'video/webm', mimeType: 'video/webm',
videoBitsPerSecond: 25000000 videoBitsPerSecond: 25000000
}); });