using NAudio.CoreAudioApi;
using RemSound.Core;
namespace RemSound.App;
///
/// Enumerates currently active Windows audio endpoints, separately for output (render — used
/// for loopback capture) and input (capture — mics, line-ins) devices. Used by the App to
/// populate the two send-device check-lists.
///
/// Selection state is intentionally NOT persisted: every session starts with all checkboxes
/// unticked and nothing being sent. The user re-ticks once per session. Stops the
/// "wrong-device-still-checked" surprise after a card unplug, ID change, etc.
///
internal static class AudioDeviceCatalog
{
public static IReadOnlyList LoadOutputs()
{
using var enumerator = new MMDeviceEnumerator();
var devices = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).ToList();
var choices = devices
.Select(d => new AudioDeviceChoice(d.FriendlyName, d.ID, CaptureKind.Loopback))
.ToList();
foreach (var device in devices) device.Dispose();
return choices;
}
public static IReadOnlyList LoadInputs()
{
using var enumerator = new MMDeviceEnumerator();
var devices = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active).ToList();
var choices = devices
.Select(d => new AudioDeviceChoice(d.FriendlyName, d.ID, CaptureKind.Input))
.ToList();
foreach (var device in devices) device.Dispose();
return choices;
}
}