Мне нужно иметь возможность направлять звук из моего приложения на все аудиовыходы системы, в частности, на встроенные динамики и наушники ноутбука. Я использую C# в Windows Vista/7 и последней версии .NET Framework, и мне не нужно поддерживать более старые (например, Windows XP) ОС.
Мне удалось успешно использовать Core Audio API для изменения громкости активных динамиков и мог перечислять отдельные аудиоустройства и конкретно управлять ими, но не мог фактически изменить состояние устройств, чтобы включить их.
private MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
private MMDeviceCollection audioDevices = null;
public Form1()
{
InitializeComponent();
this.defaultDevice = this.devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
AudioEndpointVolumeNotificationDelegate(AudioEndpointVolume_OnVolumeNotification);
this.audioDevices = this.devEnum.EnumerateAudioEndPoints(EDataFlow.eRender, EDeviceState.DEVICE_STATEMASK_ALL);
for (int i = 1; i < this.audioDevices.Count; i++)
{
// Doesn't work - throws exception because property is read-only:
// this.audioDevices[i].State = EDeviceState.DEVICE_STATE_ACTIVE
}
}
По сути, я ищу способ включить аудиоустройства, а не просто регулировать их громкость. Кто-нибудь знает способ сделать это? Я просматривал документацию MSDN для интерфейса IMMDevice, но найти это сложно, поскольку он не предлагается в виде управляемого кода, а используемая мной оболочка .NET не полностью его реализует. Я также открыт для предложений, использующих совершенно другой подход, если я все еще могу сделать это с помощью C#. Спасибо!