From 9d38c7c8fa6a4d36c28176cdba10b733f78de7f8 Mon Sep 17 00:00:00 2001 From: Beingpax Date: Tue, 25 Feb 2025 16:14:46 +0545 Subject: [PATCH] Improve recorder responsiveness and UI consistency: 1) Added music control during recording 2) Made recorder more responsive by removing animations 3) Improved UI consistency with consistent button appearance 4) Optimized sound and UI sequence for better user experience --- VoiceInk/MediaController.swift | 219 ++++++++++++++++++++++++ VoiceInk/Models/PromptTemplates.swift | 2 +- VoiceInk/Recorder.swift | 21 +++ VoiceInk/Resources/Sounds/pastes.mp3 | Bin 65201 -> 12170 bytes VoiceInk/SoundManager.swift | 2 +- VoiceInk/Views/MiniRecorderView.swift | 5 - VoiceInk/Views/MiniWindowManager.swift | 12 +- VoiceInk/Views/NotchRecorderView.swift | 19 +- VoiceInk/Views/NotchWindowManager.swift | 15 +- VoiceInk/Views/RecordView.swift | 13 +- VoiceInk/WhisperState.swift | 58 +++++-- 11 files changed, 315 insertions(+), 51 deletions(-) create mode 100644 VoiceInk/MediaController.swift mode change 100755 => 100644 VoiceInk/Resources/Sounds/pastes.mp3 diff --git a/VoiceInk/MediaController.swift b/VoiceInk/MediaController.swift new file mode 100644 index 0000000..5132bbc --- /dev/null +++ b/VoiceInk/MediaController.swift @@ -0,0 +1,219 @@ +import Foundation +import AppKit +import SwiftUI +import os +import Combine + +/// Controls media playback detection and management during recording +class MediaController: ObservableObject { + static let shared = MediaController() + private var mediaRemoteHandle: UnsafeMutableRawPointer? + private var mrNowPlayingIsPlaying: MRNowPlayingIsPlayingFunc? + private var didPauseMedia = false + + private let logger = Logger(subsystem: "com.prakashjoshipax.voiceink", category: "MediaController") + + @Published var isMediaPauseEnabled: Bool = UserDefaults.standard.bool(forKey: "isMediaPauseEnabled") { + didSet { + UserDefaults.standard.set(isMediaPauseEnabled, forKey: "isMediaPauseEnabled") + } + } + + // Define function pointer types for MediaRemote functions + typealias MRNowPlayingIsPlayingFunc = @convention(c) (DispatchQueue, @escaping (Bool) -> Void) -> Void + typealias MRMediaRemoteCommandInfoFunc = @convention(c) () -> Void + + // Additional function pointers for direct control + private var mrSendCommand: (@convention(c) (Int, [String: Any]?) -> Bool)? + + // MediaRemote command constants + private let kMRPlay = 0 + private let kMRPause = 1 + private let kMRTogglePlayPause = 2 + + private init() { + // Set default if not already set + if !UserDefaults.standard.contains(key: "isMediaPauseEnabled") { + UserDefaults.standard.set(true, forKey: "isMediaPauseEnabled") + } + setupMediaRemote() + } + + private func setupMediaRemote() { + // Open the private framework + guard let handle = dlopen("/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote", RTLD_NOW) else { + logger.error("Unable to open MediaRemote framework") + return + } + mediaRemoteHandle = handle + + // Get pointer for the "is playing" function + guard let playingPtr = dlsym(handle, "MRMediaRemoteGetNowPlayingApplicationIsPlaying") else { + logger.error("Unable to find MRMediaRemoteGetNowPlayingApplicationIsPlaying function") + dlclose(handle) + mediaRemoteHandle = nil + return + } + + mrNowPlayingIsPlaying = unsafeBitCast(playingPtr, to: MRNowPlayingIsPlayingFunc.self) + + // Get the send command function pointer + if let sendCommandPtr = dlsym(handle, "MRMediaRemoteSendCommand") { + mrSendCommand = unsafeBitCast(sendCommandPtr, to: (@convention(c) (Int, [String: Any]?) -> Bool).self) + logger.info("Successfully loaded MRMediaRemoteSendCommand function") + } else { + logger.warning("Could not find MRMediaRemoteSendCommand function, fallback to key simulation") + } + + logger.info("MediaRemote framework initialized successfully") + } + + deinit { + if let handle = mediaRemoteHandle { + dlclose(handle) + } + } + + /// Checks if media is currently playing on the system + func isMediaPlaying() async -> Bool { + guard isMediaPauseEnabled, let mrNowPlayingIsPlaying = mrNowPlayingIsPlaying else { + return false + } + + return await withCheckedContinuation { continuation in + mrNowPlayingIsPlaying(DispatchQueue.main) { isPlaying in + continuation.resume(returning: isPlaying) + } + } + } + + /// Pauses media if it's currently playing + func pauseMediaIfPlaying() async -> Bool { + guard isMediaPauseEnabled else { + logger.info("Media pause feature is disabled") + return false + } + + if await isMediaPlaying() { + logger.info("Media is playing, pausing it for recording") + await MainActor.run { + // Try direct command first, then fall back to key simulation + if !sendMediaCommand(command: kMRPause) { + sendMediaKey() + } + } + didPauseMedia = true + return true + } + + logger.info("No media playing, no need to pause") + return false + } + + /// Resumes media if it was paused by this controller + func resumeMediaIfPaused() async { + guard isMediaPauseEnabled, didPauseMedia else { + return + } + + logger.info("Resuming previously paused media") + await MainActor.run { + // Try direct command first, then fall back to key simulation + if !sendMediaCommand(command: kMRPlay) { + sendMediaKey() + } + } + didPauseMedia = false + } + + /// Sends a media command using the MediaRemote framework + private func sendMediaCommand(command: Int) -> Bool { + guard let sendCommand = mrSendCommand else { + logger.warning("MRMediaRemoteSendCommand not available") + return false + } + + let result = sendCommand(command, nil) + logger.info("Sent media command \(command) with result: \(result)") + return result + } + + /// Simulates a media key press (Play/Pause) by posting a system-defined NSEvent + private func sendMediaKey() { + let NX_KEYTYPE_PLAY: UInt32 = 16 + let keys = [NX_KEYTYPE_PLAY] + + logger.info("Simulating media key press using NSEvent") + + for key in keys { + func postKeyEvent(down: Bool) { + let flags: NSEvent.ModifierFlags = down ? .init(rawValue: 0xA00) : .init(rawValue: 0xB00) + let data1 = Int((key << 16) | (down ? 0xA << 8 : 0xB << 8)) + + if let event = NSEvent.otherEvent( + with: .systemDefined, + location: .zero, + modifierFlags: flags, + timestamp: 0, + windowNumber: 0, + context: nil, + subtype: 8, + data1: data1, + data2: -1 + ) { + // Attempt to post directly to all applications + let didPost = event.cgEvent?.post(tap: .cghidEventTap) != nil + logger.info("Posted key event (down: \(down)) with result: \(didPost ? "success" : "failure")") + + // Add a small delay to ensure the event is processed + usleep(10000) // 10ms delay + } + } + + // Perform the key down/up sequence + postKeyEvent(down: true) + postKeyEvent(down: false) + + // Allow some time for the system to process the key event + usleep(50000) // 50ms delay + } + + // As a fallback, try to use CGEvent directly + createAndPostPlayPauseEvent() + } + + /// Creates and posts a CGEvent for media control as a fallback method + private func createAndPostPlayPauseEvent() { + logger.info("Attempting fallback CGEvent for media control") + + // Media keys as defined in IOKit + let NX_KEYTYPE_PLAY: Int64 = 16 + + // Create a CGEvent for the media key + guard let source = CGEventSource(stateID: .hidSystemState) else { + logger.error("Failed to create CGEventSource") + return + } + + if let keyDownEvent = CGEvent(keyboardEventSource: source, virtualKey: UInt16(NX_KEYTYPE_PLAY), keyDown: true) { + keyDownEvent.flags = .init(rawValue: 0xA00) + keyDownEvent.post(tap: .cghidEventTap) + logger.info("Posted play/pause key down event") + + // Small delay between down and up events + usleep(10000) // 10ms + + if let keyUpEvent = CGEvent(keyboardEventSource: source, virtualKey: UInt16(NX_KEYTYPE_PLAY), keyDown: false) { + keyUpEvent.flags = .init(rawValue: 0xB00) + keyUpEvent.post(tap: .cghidEventTap) + logger.info("Posted play/pause key up event") + } + } + } +} + +extension UserDefaults { + func contains(key: String) -> Bool { + return object(forKey: key) != nil + } +} diff --git a/VoiceInk/Models/PromptTemplates.swift b/VoiceInk/Models/PromptTemplates.swift index cde015a..10088ba 100644 --- a/VoiceInk/Models/PromptTemplates.swift +++ b/VoiceInk/Models/PromptTemplates.swift @@ -58,7 +58,7 @@ enum PromptTemplates { Input: "quick update on the project we're at 60% complete but facing some testing issues that might delay things we're working on solutions" Output: "We're at 60% complete but facing some testing issues that might delay things. We're working on solutions. -Can you please push the recent changes that we have made to GitHub? + I'll keep you updated. Regards, diff --git a/VoiceInk/Recorder.swift b/VoiceInk/Recorder.swift index e0ab293..4cca524 100644 --- a/VoiceInk/Recorder.swift +++ b/VoiceInk/Recorder.swift @@ -9,6 +9,7 @@ actor Recorder { private let deviceManager = AudioDeviceManager.shared private var deviceObserver: NSObjectProtocol? private var isReconfiguring = false + private let mediaController = MediaController.shared enum RecorderError: Error { case couldNotStartRecording @@ -98,6 +99,13 @@ actor Recorder { func startRecording(toOutputFile url: URL, delegate: AVAudioRecorderDelegate?) async throws { logger.info("Starting recording process") + + // Check if media is playing and pause it if needed + let wasPaused = await mediaController.pauseMediaIfPlaying() + if wasPaused { + logger.info("Media playback paused for recording") + } + // Get the current selected device let deviceID = deviceManager.getCurrentDevice() if deviceID != 0 { @@ -142,12 +150,20 @@ actor Recorder { if let deviceName = deviceManager.getDeviceName(deviceID: deviceID) { logger.error("Current device name: \(deviceName)") } + + // Resume media if we paused it but failed to start recording + await mediaController.resumeMediaIfPaused() + throw RecorderError.couldNotStartRecording } } catch { logger.error("Error creating AVAudioRecorder: \(error.localizedDescription)") logger.error("Recording settings used: \(recordSettings)") logger.error("Output URL: \(url.path)") + + // Resume media if we paused it but failed to start recording + await mediaController.resumeMediaIfPaused() + throw error } } @@ -162,6 +178,11 @@ actor Recorder { logger.info("Triggering audio device change notification") NotificationCenter.default.post(name: NSNotification.Name("AudioDeviceChanged"), object: nil) + // Resume media if we paused it + Task { + await mediaController.resumeMediaIfPaused() + } + logger.info("Recording stopped successfully") } diff --git a/VoiceInk/Resources/Sounds/pastes.mp3 b/VoiceInk/Resources/Sounds/pastes.mp3 old mode 100755 new mode 100644 index 08a48a3cc400948e13850cf68aff8017f90c19e0..be8d4bcb0b4489642f8038501a60148c5277d456 GIT binary patch literal 12170 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 J{NKL7{{m(Ay`%sD literal 65201 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