Files
AFFiNE-Mirror/packages/frontend/native/media_capture/src/windows
DarkSky 8d72e4dc29 feat(core): import progress & perf (#15197)
#### PR Dependency Tree


* **PR #15197** 👈

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**
* Added a new import pipeline with “plan then commit” batch handling for
Markdown, Notion HTML, Obsidian, and Bear backups.
* Enabled native import sessions with progress, cancellation, and
batch-by-batch committing (including assets, folders, icons, and tags).
  * Added web preflight limits for ZIP and multi-file imports.
* **Bug Fixes**
* Improved import error/warning reporting and continued processing when
some items fail.
* Strengthened snapshot-based file/directory picking to preserve paths.
* **Chores**
  * Updated project packaging/configuration for the new import workflow.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-06 01:29:24 +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.