Files
AFFiNE-Mirror/packages/frontend/native/media_capture/src/windows
DarkSky ca2462f987 feat(native): sync yocto codes (#14243)
#### 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 -->
2026-01-11 06:08:33 +08:00
..

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 active
  • processName: string - Name of the process using the microphone

Implementation Details

Audio Session Monitoring

The implementation uses Windows Audio Session API to:

  1. Enumerate Audio Sessions: Get all active audio sessions
  2. Monitor Session State: Track when sessions become active/inactive
  3. Process Identification: Map audio sessions to process names
  4. 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

  • windows crate v0.61 with Audio and Process features
  • windows-core crate v0.61
  • napi and napi-derive for 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:

  • GetModuleFileNameExW for full executable path
  • GetProcessImageFileNameW as 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.