Files
dictia-public/static/js/modules/state/audio.js

96 lines
2.6 KiB
JavaScript

/**
* Audio recording state management
*/
export function createAudioState(ref, computed) {
// --- Audio Recording State ---
const isRecording = ref(false);
const mediaRecorder = ref(null);
const audioChunks = ref([]);
const audioBlobURL = ref(null);
const recordingTime = ref(0);
const recordingInterval = ref(null);
const canRecordAudio = ref(navigator.mediaDevices && navigator.mediaDevices.getUserMedia);
const canRecordSystemAudio = computed(() => navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia);
const systemAudioSupported = ref(false);
const systemAudioError = ref('');
const recordingNotes = ref('');
const showSystemAudioHelp = ref(false);
// ASR options for recording view
const asrLanguage = ref('');
const asrMinSpeakers = ref('');
const asrMaxSpeakers = ref('');
// Audio context and analyzers
const audioContext = ref(null);
const analyser = ref(null);
const micAnalyser = ref(null);
const systemAnalyser = ref(null);
const visualizer = ref(null);
const micVisualizer = ref(null);
const systemVisualizer = ref(null);
const animationFrameId = ref(null);
const recordingMode = ref('microphone');
const activeStreams = ref([]);
// --- Wake Lock and Background Recording ---
const wakeLock = ref(null);
const recordingNotification = ref(null);
const isPageVisible = ref(true);
// --- Recording Size Monitoring ---
const estimatedFileSize = ref(0);
const fileSizeWarningShown = ref(false);
const recordingQuality = ref('optimized');
const actualBitrate = ref(0);
const maxRecordingMB = ref(200);
const sizeCheckInterval = ref(null);
return {
// Recording state
isRecording,
mediaRecorder,
audioChunks,
audioBlobURL,
recordingTime,
recordingInterval,
canRecordAudio,
canRecordSystemAudio,
systemAudioSupported,
systemAudioError,
recordingNotes,
showSystemAudioHelp,
// ASR options
asrLanguage,
asrMinSpeakers,
asrMaxSpeakers,
// Audio context
audioContext,
analyser,
micAnalyser,
systemAnalyser,
visualizer,
micVisualizer,
systemVisualizer,
animationFrameId,
recordingMode,
activeStreams,
// Wake lock
wakeLock,
recordingNotification,
isPageVisible,
// Size monitoring
estimatedFileSize,
fileSizeWarningShown,
recordingQuality,
actualBitrate,
maxRecordingMB,
sizeCheckInterval
};
}