/** * 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 }; }