Трябва да мога да насоча звуковия изход от моето приложение към всички аудио изходи на системата - по-специално както към вградените високоговорители, така и към слушалките на лаптоп. Използвам C# на Windows Vista/7 и най-новата версия на .NET Framework и не е необходимо да поддържам по-стари (т.е. Windows XP) операционни системи.
Успях успешно да използвам API на Core Audio, за да променя силата на звука за активни високоговорители и успя да изброи и конкретно да манипулира отделни аудио устройства, но не успя действително да промени състоянието на устройствата, за да ги активира.
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 Interface, но съм намирам го за трудно, тъй като не се предлага като управляван код и .NET обвивката, която използвам, не го прилага напълно. Също така съм отворен за предложения, които имат напълно различен подход, стига все още да мога да го правя с C#. Благодаря!