const { getAssemblyExports } = await globalThis.getDotnetRuntime(0); var nameSpace = (await getAssemblyExports("SimpleVoiceChat.BlazorWasm.dll")).SimpleVoiceChat.BlazorWasm; var DotNetInterop = nameSpace.SvcModule; var isRunning = false; var stream; var recorder; export async function init() { if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) stream = await navigator.mediaDevices.getUserMedia({ audio: true }); else if (navigator.webkitGetUserMedia) stream = await navigator.webkitGetUserMedia({ audio: true }); else throw "failure to getUserMedia"; if (stream) { recorder = new MediaRecorder(stream, { audioBitsPerSecond: 64000, mimeType: 'audio/webm;codecs=OPUS' }); recorder.ondataavailable = async (r) => { DotNetInterop.JsFeedChunk(new Uint8Array(await r.data.arrayBuffer())); }; recorder.onstop = () => { if (isRunning) { recorder.start(); setTimeout(() => { if (isRunning) recorder.stop(); }, 1000); } }; } return !!stream; } export async function start() { isRunning = true; recorder.start(); setTimeout(() => { if (isRunning) recorder.stop(); }, 1000); } export async function stop() { isRunning = false; recorder.stop(); } export async function createBlobUrl(bytes) { return URL.createObjectURL(new Blob([bytes])); }