#### PR Dependency Tree * **PR #14243** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Batch management API for coordinated document mutations and change tracking. * New document accessors (IDs, state snapshots, change/delete set queries) and subscriber count. * **Chores** * Upgraded Rust edition across packages to 2024. * Repository-wide formatting, stylistic cleanups and test adjustments. * **Breaking Changes** * Removed the Node native bindings package and its JS/TS declarations and tests (no longer published/available). <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
Windows Audio Recording
This module provides Windows-specific audio recording functionality using the Windows Audio Session API (WASAPI).
Features
- Microphone Activity Detection: Monitor when applications are using the microphone
- Process Identification: Identify which process is using the microphone
- Real-time Notifications: Get callbacks when microphone usage starts/stops
Usage
MicrophoneListener
The MicrophoneListener class provides real-time monitoring of microphone usage:
import { MicrophoneListener } from '@affine/native';
const listener = new MicrophoneListener((isRunning: boolean, processName: string) => {
console.log(`Microphone ${isRunning ? 'started' : 'stopped'} by ${processName}`);
});
// Check current status
console.log('Is microphone currently active:', listener.is_running());
Callback Parameters
The callback receives two parameters:
isRunning: boolean- Whether the microphone is currently activeprocessName: string- Name of the process using the microphone
Implementation Details
Audio Session Monitoring
The implementation uses Windows Audio Session API to:
- Enumerate Audio Sessions: Get all active audio sessions
- Monitor Session State: Track when sessions become active/inactive
- Process Identification: Map audio sessions to process names
- Event Handling: Provide real-time notifications
COM Initialization
The module automatically initializes COM (Component Object Model) with COINIT_MULTITHREADED for proper Windows API interaction.
Error Handling
All Windows API errors are wrapped in WindowsAudioError enum and converted to NAPI errors for JavaScript consumption.
Cross-Platform Compatibility
This Windows implementation maintains API compatibility with the macOS version, providing the same JavaScript interface while using Windows-specific APIs underneath.
Platform Requirements
- Windows 10 or later
- Microphone access permissions
- Audio devices available
Dependencies
windowscrate v0.61 with Audio and Process featureswindows-corecrate v0.61napiandnapi-derivefor JavaScript bindings
Technical Notes
Thread Safety
The implementation uses thread-safe callbacks to JavaScript with ThreadsafeFunction<(bool, String), ()> to ensure proper communication between the Windows audio session monitoring thread and the JavaScript runtime.
Process Name Resolution
Process names are resolved using Windows APIs:
GetModuleFileNameExWfor full executable pathGetProcessImageFileNameWas fallback- Automatic extraction of filename from full path
Session Filtering
The implementation automatically filters out system audio sessions (like AudioSrv) to focus on user applications.