Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

application-loopback

WerdoxDev186MIT1.1.1TypeScript support: included

null

audio, audio-capture, loopback, wasapi, windows, windows-audio, pcm, per-process, nodejs, native, sound, child-process, low-level

readme

🎧 Application Audio Capture (Windows Only)

A simple Node.js wrapper around native C++ binaries to list running application windows and capture audio from specific Windows processes using loopback recording.

⚠️ Requirements: This package only runs on Windows 10 x64 and later. It uses native binaries and will throw an error on unsupported platforms.

🚀 Features

  • List all visible application windows and their process IDs.

  • Capture raw PCM audio from individual applications using WASAPI loopback.

  • Pipe real-time audio data into your JavaScript/TypeScript app.

https://github.com/user-attachments/assets/fc058596-6ea3-4ded-8065-aeb642c5a465

📦 Installation

Install using your favourite package manager.

npm install application-loopback
#OR
bun install application-loopback
#OR any package manager..

🧠 Usage

  1. Get Active Window Titles and Process IDs
import { getActiveWindowProcessIds, type Window } from "application-loopback";

const windows = await getActiveWindowProcessIds();

windows.forEach((win: Window) => {
  console.log(`PID: ${win.processId}, Title: ${win.title}`);
});
  1. Start Capturing Audio from a Process
import { startAudioCapture } from "your-package-name";

startAudioCapture("1234", {
  onData: (chunk: Uint8Array) => {
    console.log("Audio data:", chunk); // Uint8Array
  },
});

🧠 chunk is a raw PCM audio buffer. You can pipe it to a file, stream it, analyze it, etc.

  1. Stop Capturing Audio
import { stopAudioCapture } from "your-package-name";

const processId = startAudioCapture("1234");
//       ^
//     "1234"

const stopped = stopAudioCapture("1234");

if (stopped) {
  console.log("Audio capture stopped.");
} else {
  console.log("No capture process found for that PID.");
}

🪟 Why and how?

For my desktop application (Huginn) I needed to capture an application's audio selectively to share in a call just like discord does.

I did a lot of tries with NAPI but windows WASPI was just not having it... That's when it hit me... I can compile a normal C++ application that does the audio capture and basically keep dumping the output to stdout and simply read it from nodejs. Yea that took a couple weeks to figure out 😶

The C++ application is simply a stripped out version from a sample in microsoft's classic samples repo https://github.com/microsoft/Windows-classic-samples

🧪 Example Use Cases

  • Build a real-time audio visualizer for specific apps.

  • Record browser or game audio selectively.

  • Stream audio from only one process instead of the whole system.