diff --git a/src/run-web.html b/src/run-web.html
index 62cf8a1..052f6fc 100644
--- a/src/run-web.html
+++ b/src/run-web.html
@@ -1 +1 @@
-
uw8-run
\ No newline at end of file
+uw8-run
\ No newline at end of file
diff --git a/web/src/microw8.js b/web/src/microw8.js
index b376e9a..08e42e0 100644
--- a/web/src/microw8.js
+++ b/web/src/microw8.js
@@ -90,6 +90,9 @@ export default function MicroW8(screen, config = {}) {
keyboardElement.onkeydown = keyHandler;
keyboardElement.onkeyup = keyHandler;
}
+
+ let audioContext;
+ let audioNode;
async function runModule(data, keepUrl) {
if (cancelFunction) {
@@ -97,7 +100,7 @@ export default function MicroW8(screen, config = {}) {
cancelFunction = null;
}
- let audioContext = new AudioContext({sampleRate: 44100});
+ audioContext = new AudioContext({sampleRate: 44100});
let keepRunning = true;
let abortController = new AbortController();
cancelFunction = () => {
@@ -114,7 +117,7 @@ export default function MicroW8(screen, config = {}) {
}
await audioContext.audioWorklet.addModule(audioWorkletUrl);
- let audioNode = new AudioNode(audioContext);
+ audioNode = new AudioNode(audioContext);
let audioReadyFlags = 0;
let audioReadyResolve;
@@ -334,14 +337,25 @@ export default function MicroW8(screen, config = {}) {
let videoRecorder;
let videoStartTime;
+ let videoAudioSourceNode;
+ let videoAudioStreamNode;
function recordVideo() {
if(videoRecorder) {
videoRecorder.stop();
videoRecorder = null;
+ videoAudioSourceNode.disconnect(videoAudioStreamNode);
+ videoAudioSourceNode = null;
+ videoAudioStreamNode = null;
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',
videoBitsPerSecond: 25000000
});