/// <summary> /// The Initialize Audio Client /// </summary> /// <param name="audioFlow"></param> /// <param name="_deviceEnumerator"></param> private void InitializeAudioClient() { //Get Audio Client from device COMResult result = _audioDevice.Activate(typeof(IAudioClient).GUID, 0, IntPtr.Zero, out object obj); _audioClient = (IAudioClient)obj; //Get Audio Meter from device result = _audioDevice.Activate(typeof(IAudioMeterInformation).GUID, 0, IntPtr.Zero, out obj); _audioMeter = (IAudioMeterInformation)obj; //Get Audio End Point result = _audioDevice.Activate(typeof(IAudioEndpointVolume).GUID, 0, IntPtr.Zero, out obj); _audioEndpointVolume = (IAudioEndpointVolume)obj; _audioEndpointVolume.RegisterControlChangeNotify(classCallBack); //Initialize Audio Client. _sessionGuid = new Guid(); result = _audioClient.GetMixFormat(out waveFormat); AudioClientStreamFlags streamFlag = AudioClientStreamFlags.None; if (_audioDataFlow == AudioDataFlow.eRender) { streamFlag = AudioClientStreamFlags.Loopback; } result = _audioClient.Initialize(AudioClientMode.Shared, streamFlag, 10000000, 0, waveFormat, ref _sessionGuid); result = _audioClient.Start(); //Change wave format here SetupWaveFormat(waveFormat); result = _audioEndpointVolume.GetChannelCount(out _channelCount); }
public uint GetChannelCount() { uint result = 0; int retVal = iAudioEndpoint.GetChannelCount(ref result); Marshal.ThrowExceptionForHR(retVal); return(result); }
public AudioDeviceChannelCollection(IAudioEndpointVolume deviceVolume, Dispatcher dispatcher) { _dispatcher = dispatcher; var ret = new List <AudioDeviceChannel>(); for (uint i = 0; i < deviceVolume.GetChannelCount(); i++) { ret.Add(new AudioDeviceChannel(deviceVolume, i)); } Channels = ret; AUDIO_VOLUME_NOTIFICATION_DATA dummy; _afChannelVolumesOffset = Marshal.OffsetOf <AUDIO_VOLUME_NOTIFICATION_DATA>(nameof(dummy.afChannelVolumes)).ToInt32(); }