From 073fa0e701f40efac8d514e0c3d304ec31e066a4 Mon Sep 17 00:00:00 2001 From: Beingpax Date: Sat, 3 May 2025 12:33:46 +0545 Subject: [PATCH] Optimize recorder start, cleanup logs --- VoiceInk/Recorder.swift | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/VoiceInk/Recorder.swift b/VoiceInk/Recorder.swift index 2092082..ba33c08 100644 --- a/VoiceInk/Recorder.swift +++ b/VoiceInk/Recorder.swift @@ -34,7 +34,6 @@ class Recorder: ObservableObject { private func handleDeviceChange() async { guard !isReconfiguring else { return } isReconfiguring = true - logger.notice("🔄 Handling device change...") if engine != nil { let currentURL = file?.url @@ -44,7 +43,6 @@ class Recorder: ObservableObject { if let url = currentURL { do { try await startRecording(toOutputFile: url) - logger.notice("✅ Successfully restarted recording after device change.") } catch { logger.error("❌ Failed to restart recording after device change: \(error.localizedDescription)") } @@ -53,28 +51,27 @@ class Recorder: ObservableObject { } } isReconfiguring = false - logger.notice("✅ Device change handled.") } private func configureAudioSession(with deviceID: AudioDeviceID) async throws { - logger.info("🔊 Configuring audio session for device ID: \(deviceID)...") - try? await Task.sleep(nanoseconds: 50_000_000) do { _ = try AudioDeviceConfiguration.configureAudioSession(with: deviceID) try AudioDeviceConfiguration.setDefaultInputDevice(deviceID) - logger.info("✅ Audio session configured successfully.") } catch { logger.error("❌ Failed to configure audio session: \(error.localizedDescription)") throw error } - try? await Task.sleep(nanoseconds: 50_000_000) } func startRecording(toOutputFile url: URL) async throws { - deviceManager.isRecordingActive = true - logger.notice("â–ļī¸ Attempting to start recording to: \(url.lastPathComponent)") + logger.notice("â–ļī¸ startRecording called for: \(url.lastPathComponent)") + + deviceManager.isRecordingActive = true + + Task { + _ = await mediaController.muteSystemAudio() + } - let wasMuted = await mediaController.muteSystemAudio() let deviceID = deviceManager.getCurrentDevice() if deviceID != 0 { do { @@ -87,7 +84,15 @@ class Recorder: ObservableObject { } engine = AVAudioEngine() - let inputNode = engine!.inputNode + + guard let engine = self.engine else { + logger.error("❌ AVAudioEngine is nil after creation attempt.") + await mediaController.unmuteSystemAudio() + stopRecording() + throw RecorderError.couldNotStartRecording + } + + let inputNode = engine.inputNode let inputFormat = inputNode.outputFormat(forBus: 0) let whisperSettings: [String: Any] = [ @@ -110,7 +115,7 @@ class Recorder: ObservableObject { do { file = try AVAudioFile(forWriting: url, settings: whisperSettings) } catch { - logger.error("Failed to create audio file: \(error.localizedDescription)") + logger.error("❌ Failed to create audio file: \(error.localizedDescription)") await mediaController.unmuteSystemAudio() stopRecording() throw RecorderError.couldNotStartRecording @@ -176,8 +181,8 @@ class Recorder: ObservableObject { } do { - try engine!.start() - logger.notice("✅ Recording started successfully.") + try engine.start() + logger.notice("✅ Recording engine started successfully.") } catch { logger.error("❌ Failed to start audio engine: \(error.localizedDescription)") await mediaController.unmuteSystemAudio() @@ -196,8 +201,6 @@ class Recorder: ObservableObject { if wasRunning { logger.notice("âšī¸ Recording stopped.") - } else { - logger.info("â„šī¸ stopRecording called, but engine was not running.") } audioMeter = AudioMeter(averagePower: 0, peakPower: 0)