C# Как программно изменить устройство воспроизведения
Как я могу программно изменить аудиоустройство по умолчанию в системе Vista / Win 7? Используете C# или вызов Win API?
3 ответа
WinMM API должен предоставлять функции, которые вы запрашиваете.
Вы должны использовать сообщение DRVM_MAPPER_PREFERRED_SET, которое отправляется с функцией waveOutMessage().
Документация: http://msdn.microsoft.com/en-us/library/aa909789.aspx
Однако, если вы пытаетесь отправить звуковой сигнал самостоятельно, вам следует обратиться к библиотеке WinMM.Net.
Это можно сейчас (на самом деле уже довольно давно) сделать очень легко с помощью NuGet-пакета AudioSwitcher.AudioApi.CoreAudio .
Просто создайте новыйCoreAudioController
:
var controller = new AudioSwitcher.AudioApi.CoreAudio.CoreAudioController();
Получите желаемое устройство, используя его GUID:
var device = controller.GetDevice(Guid.Parse(...));
И, наконец, установите его в качестве устройства воспроизведения по умолчанию:
controller.DefaultPlaybackDevice = device;
Я нашелAudioSwitcher
в моем случае конструктор будет очень медленным.
Я предлагаю использовать API «CoreAudio» для управления аудиоустройствами.
Вот текущая библиотека-оболочка, доступная на NuGet. https://github.com/morphx666/CoreAudio/tree/master
Установить устройство:
public static void SetDefaultDevice(string id) {
MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator(Guid.NewGuid());
MMDevice device = deviceEnum.GetDevice(id);
deviceEnum.SetDefaultAudioEndpoint(device);
}
Получить устройства
public static MMDeviceCollection GetAudioDevices() {
MMDeviceEnumerator deviceEnum = new MMDeviceEnumerator(Guid.NewGuid());
return deviceEnum.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active);
}