NB: Note that native integration with linux is under development and macos integration is not yet under development
This node.js
project is a sound mixer for node desktop apps providing control over volume for each render/capture device (I/O devices) and for each audio session in an audio device separately.
The native c++
code is provided in cppsrc/
and compiled using node-addon-api
postinstall scripts will automatically build bin files
- the
node.js
logic is now fully written inTypeScript
- old functional architecture turned to modern
object-oriented
architecture
This is a Node js package available through npm registry.
- no prerequisites are required for windows.
> npm install native-sound-mixer
or using yarn :
> yarn add native-sound-mixer
- Per-device volume control and monitoring
- Per-audio session volume control and monitoring within each device
- Fully compatible with TypeScript
-
SoundMixer: factory, default export
-
Device: Represents a physical/virtual device with channels and volume controls
- (Attribute) sessions:
readonly
- (Attribute) mute:
read-write
- (Attribute) volume:
read-write
- (Method) getSessionById
- (Attribute) sessions:
-
AudioSession: Represents an app-linked audio channel with volume controls
- (Attribute) mute:
read-write
- (Attribute) volume: ``read-write
- (Attribute) mute:
this function returns all the devices
found by the system.
import SoundMixer, {Device} from "native-sound-mixer";
const devices: Device[] = SoundMixer.devices;
returns the default device for the specified DeviceType
, if none found returns undefined.
import SoundMixer, {Device, DeviceType} from "native-sound-mixer";
const device: Device | undefined = SoundMixer.getDefaultDevice(DeviceType.RENDER);
returns the device
corresponding to the given id, if none, returns undefined
.
// import ...
const id = "<any id of device here>";
const device: Device | undefined = SoundMixer.getDeviceById(id);
returns all the AudioSessions
linked to the Device
.
// import ...
let device: Device;
// set device to any valid Device object.
const sessions: AudioSession[] = device.sessions;
gets and sets mute
value for the device.
// import ...
// retrieving the mute flag
const mute: boolean = device.mute;
// toggling mute
device.mute = !mute;
gets and sets the volume scalar
for the device.
// import ...
// retrieving the volume
const volume: VolumeScalar = device.volume;
// adding 10% to volume
device.volume += .1;
returns the AudioSession
linked to the given id. If not found, returns undefined
.
// import ...
const id: string = "<any audio session id>";
const session: AudioSession | undefined = device.getSessionById(id);
sets and gets the mute flag for the AudioSession
.
// import ...
let session: AudioSession;
// set session to a valid session object
const mute: boolean = session.mute;
// toggling mute
session.mute = !mute;
sets and gets the VolumeScalar
for the AudioSession
.
// import ...
let session: AudioSession;
// set session to a valid session object
const volume: VolumeScalar = session.volume;
// adding 10% to volume
session.volume += .1;
a clamped float betwen 0 and 1 representing the power of the volume, 1 is max power and 0 is no output.
an enumeration representing the state of the audio session. Possible values are
import {AudioSessionState} from "native-sound-mixer";
AudioSessionState.INACTIVE; // session is incative but valid
AudioSessionState.ACTIVE; // session is active
AudioSessionState.EXPIRED; // session no longer exists or is no longer available
an enumeration representing the type of the device. Possible values are :
import {DeviceType} from "native-sound-mixer";
DeviceType.RENDER; // device type is output
DeviceType.CAPTURE; // device type is input
DeviceType.ALL; // device type is both input and output
As an open-source project, every one is free to modify the codebase. The TODO file provides all future features with their current development state. Please test your code before committing to this repository.
This project is under MIT license