win32audio 1.3.0
win32audio: ^1.3.0 copied to clipboard
A Windows plugin that fetches audio devices, sets default device, sets Master Volume and specific app volume and as an extra, extracts icon from exe/HWND/HICON
win32audio #
A library to get Audio Devices on Windows.
Also you can get volume and set Master volume or individual application volume
Also includes a utilitary function nativeIconToBytes
that can be used for other purposes rather than audio device.
How to use #
Enumerate Devices #
Audio Devices
var audioDevices = <AudioDevice>[];
audioDevices = await Audio.enumDevices(audioDeviceType) ?? [];
Audio Mixer
var mixerList = <ProcessVolume>[];
mixerList = await Audio.enumAudioMixer() ?? [];
Default Device #
Get
var defaultDevice = AudioDevice();
defaultDevice = (await Audio.getDefaultDevice(audioDeviceType))!;
Set
id
is COM string
await Audio.setDefaultDevice(audioDevices[0].id, {bool console = false, bool multimedia = true, bool communications = false});
Switch to next Audio Device
await Audio.switchDefaultDevice(audioDeviceType, {bool console = false, bool multimedia = true, bool communications = false});
Volume #
Volume is double between 0 and 1.
Get
final volume = await Audio.getVolume(audioDeviceType);
Set
final volume = await Audio.setVolume(0.5,audioDeviceType);
Set Specific app volume:
await Audio.setAudioMixerVolume(mixerList[0].processId, 0.3);
Structs/Enums #
class AudioDevice {
String id = "";
String name = "";
String iconPath = "";
int iconID = 0;
bool isActive = false;
}
class ProcessVolume {
int processId = 0;
String processPath = "";
double maxVolume = 1.0;
double peakVolume = 0.0;
}
enum AudioDeviceType {
output,
input,
}
Extra Function #
nativeIconToBytes
extracts icon either from EXE file or dll file and store it as UInt8List
Map<String, Uint8List?> _audioIcons = {};
_audioIcons = {};
for (var audioDevice in audioDevices) {
if (_audioIcons[audioDevice.id] == null) {
_audioIcons[audioDevice.id] = await nativeIconToBytes(audioDevice.iconPath, iconID: audioDevice.iconID);
}
}
///....
widget: (_audioIcons.containsKey(audioDevices[index].id))
? Image.memory(
_audioIcons[audioDevices[index].id] ?? Uint8List(0),
width: 32,
height: 32,
)
: const Icon(Icons.spoke_outlined),
In the same way I've made a class WinIcons() with these functions:
extractFileIcon
that extract an asociated icon from any file.
extractWindowIcon
which extracts an icon from HWND/ Window Handle
extractIconHandle
which extracts an icon from HICON/ Icon Handle.