let mediaRecorder: MediaRecorder | null = null;
let mediaStream: MediaStream | null = null;
let audioChunks: Blob[] = [];
const preferredMimeType = "audio/webm; codecs=opus";
const preferredMimeType = "audio/webm;codecs=opus";
const fallbackMimeType = "audio/webm";
const startRecording = async () => {
try {
const audioTrack = mediaStream.getAudioTracks()[0] ?? null;
if (!audioTrack) throw "no audio track found";
let mimeType = "";
if (MediaRecorder.isTypeSupported(preferredMimeType))
if (MediaRecorder.isTypeSupported(preferredMimeType)) {
mimeType = preferredMimeType;
else if (MediaRecorder.isTypeSupported(fallbackMimeType))
} else if (MediaRecorder.isTypeSupported(fallbackMimeType)) {
console.warn(`falling back to ${fallbackMimeType} for recording audio`);
mimeType = fallbackMimeType;
else {
} else {
console.warn(
`browser does not support preffered audio / container type.
falling back to whatever the browser picks`,
);
const file = new File([blob], `rec-${fileDate}.${fileExtension}`, {
type: usedMime,
});
console.info(usedMime, file.size);
addTask(props.selectedAccount(), file);
audioChunks = [];
};