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.

http://winmm.codeplex.com/

Это можно сейчас (на самом деле уже довольно давно) сделать очень легко с помощью 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);
}
Другие вопросы по тегам