@corti/dictation-web
Version:
Web component for Corti Dictation
39 lines • 1.43 kB
JavaScript
export async function getMediaStream(deviceId, debug_displayAudio) {
if (debug_displayAudio) {
const stream = await navigator.mediaDevices.getDisplayMedia({
audio: true,
video: true,
});
stream.getTracks().forEach((track) => {
if (track.kind === "video") {
stream.removeTrack(track);
}
});
return stream;
}
if (!deviceId) {
throw new Error("No device ID provided");
}
const constraints = deviceId !== "default"
? { audio: { deviceId: { exact: deviceId } } }
: { audio: true };
return await navigator.mediaDevices.getUserMedia(constraints);
}
export function createAudioAnalyzer(mediaStream) {
const audioContext = new AudioContext();
const source = audioContext.createMediaStreamSource(mediaStream);
const analyser = audioContext.createAnalyser();
analyser.fftSize = 8192;
source.connect(analyser);
return { analyser, audioContext };
}
export function calculateAudioLevel(analyser) {
const dataArray = new Uint8Array(analyser.fftSize);
analyser.getByteTimeDomainData(dataArray);
const sumSquares = Array.from(dataArray).reduce((sum, value) => {
const normalized = (value - 128) / 128;
return sum + normalized * normalized;
}, 0);
return Math.sqrt(sumSquares / dataArray.length);
}
//# sourceMappingURL=media.js.map