1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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]));
- }
|