Exemplo n.º 1
0
    private async Task <PcAudio> GetCurrentAudioStateAsync(CoreAudioController coreAudioController)
    {
        var audioState = new PcAudio
        {
            ApplicationVersion = ApplicationVersion,
            ProtocolVersion    = ProtocolVersion
        };

        var devices = await coreAudioController.GetPlaybackDevicesAsync();

        foreach (var device in devices.Where(x => x.State == DeviceState.Active).ToList())
        {
            audioState.DeviceIds.Add(device.Id.ToString(), device.FullName);
        }

        var defaultPlaybackDevice = coreAudioController.DefaultPlaybackDevice;

        audioState.DefaultDevice = new AudioDevice
        {
            Name         = defaultPlaybackDevice.FullName,
            DeviceId     = defaultPlaybackDevice.Id.ToString(),
            MasterVolume = defaultPlaybackDevice.Volume,
            MasterMuted  = defaultPlaybackDevice.IsMuted
        };

        return(audioState);
    }
Exemplo n.º 2
0
    private async Task UpdateStateAsync(
        PcAudio audioUpdate, CoreAudioController coreAudioController, CancellationToken stoppingToken)
    {
        if (audioUpdate?.DefaultDevice == null)
        {
            return;
        }

        var defaultPlaybackDevice = coreAudioController.DefaultPlaybackDevice;

        // Change default audio device.
        if (audioUpdate.DefaultDevice.DeviceId != defaultPlaybackDevice.Id.ToString())
        {
            var deviceId = Guid.Parse(audioUpdate.DefaultDevice.DeviceId);
            var newDefaultAudioDevice = await coreAudioController.GetDeviceAsync(deviceId);

            await newDefaultAudioDevice.SetAsDefaultAsync(stoppingToken);

            await newDefaultAudioDevice.SetAsDefaultCommunicationsAsync(stoppingToken);

            return;
        }

        // Change muted and / or volume values.
        if (audioUpdate.DefaultDevice.MasterMuted.HasValue)
        {
            var muted = audioUpdate.DefaultDevice.MasterMuted.Value;

            if (muted != defaultPlaybackDevice.IsMuted)
            {
                await defaultPlaybackDevice.SetMuteAsync(muted, stoppingToken);
            }
        }
        if (audioUpdate.DefaultDevice.MasterVolume.HasValue)
        {
            const int increment = 2;

            var deviceAudioVolume = defaultPlaybackDevice.Volume;
            var clientAudioVolume = audioUpdate.DefaultDevice.MasterVolume.Value;

            var volume = deviceAudioVolume;
            if (clientAudioVolume < deviceAudioVolume)
            {
                volume -= increment;
            }
            else if (clientAudioVolume > deviceAudioVolume)
            {
                volume += increment;
            }

            // ReSharper disable once CompareOfFloatsByEqualityOperator
            if (volume != deviceAudioVolume)
            {
                await defaultPlaybackDevice.SetVolumeAsync(volume, stoppingToken);
            }
        }
    }