El Control De Volumen Del Mezclador

Quiero controlar el volumen de la aplicación(firefox).

puedo hacerlo con Volume Mixer

El Control De Volumen Del Mezclador

¿Cuál es la bibliotecas de la Volume Mixer?

Un poco de google le da la espalda a este: dreamincode.net/forums/topic/…
Esto está implementado en Windows por WASAPI, Sesión de Audio de Windows API. Usted necesitará un contenedor para que, de encontrar entradas en google buscando “c# wasapi”
Mourier creo que este código de control de volumen del sistema.quiero controlar firefox solo volumen.
He estado trabajando en un CoreAudio de la biblioteca .NET. La biblioteca es libre y de código abierto. Una implementación más robusta está disponible en el comercial de MixerProNET de la Biblioteca

OriginalEl autor user1974519 | 2013-01-13

1 respuesta

  1. 75

    Aquí es un ejemplo de C# Aplicación de Consola que hace. Se basa en la Windows Núcleo De La Biblioteca De Audio. Sólo funciona en Windows 7 y superiores.

    using System;
    using System.Runtime.InteropServices;
    using System.Collections.Generic;
    
    namespace SetAppVolumne
    {
        class Program
        {
            static void Main(string[] args)
            {
                const string app = "Mozilla Firefox";
    
                foreach (string name in EnumerateApplications())
                {
                    Console.WriteLine("name:" + name);
                    if (name == app)
                    {
                        //display mute state & volume level (% of master)
                        Console.WriteLine("Mute:" + GetApplicationMute(app));
                        Console.WriteLine("Volume:" + GetApplicationVolume(app));
    
                        //mute the application
                        SetApplicationMute(app, true);
    
                        //set the volume to half of master volume (50%)
                        SetApplicationVolume(app, 50);
                    }
                }
            }
    
            public static float? GetApplicationVolume(string name)
            {
                ISimpleAudioVolume volume = GetVolumeObject(name);
                if (volume == null)
                    return null;
    
                float level;
                volume.GetMasterVolume(out level);
                return level * 100;
            }
    
            public static bool? GetApplicationMute(string name)
            {
                ISimpleAudioVolume volume = GetVolumeObject(name);
                if (volume == null)
                    return null;
    
                bool mute;
                volume.GetMute(out mute);
                return mute;
            }
    
            public static void SetApplicationVolume(string name, float level)
            {
                ISimpleAudioVolume volume = GetVolumeObject(name);
                if (volume == null)
                    return;
    
                Guid guid = Guid.Empty;
                volume.SetMasterVolume(level / 100, ref guid);
            }
    
            public static void SetApplicationMute(string name, bool mute)
            {
                ISimpleAudioVolume volume = GetVolumeObject(name);
                if (volume == null)
                    return;
    
                Guid guid = Guid.Empty;
                volume.SetMute(mute, ref guid);
            }
    
            public static IEnumerable<string> EnumerateApplications()
            {
                //get the speakers (1st render + multimedia) device
                IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());
                IMMDevice speakers;
                deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers);
    
                //activate the session manager. we need the enumerator
                Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID;
                object o;
                speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o);
                IAudioSessionManager2 mgr = (IAudioSessionManager2)o;
    
                //enumerate sessions for on this device
                IAudioSessionEnumerator sessionEnumerator;
                mgr.GetSessionEnumerator(out sessionEnumerator);
                int count;
                sessionEnumerator.GetCount(out count);
    
                for (int i = 0; i < count; i++)
                {
                    IAudioSessionControl ctl;
                    sessionEnumerator.GetSession(i, out ctl);
                    string dn;
                    ctl.GetDisplayName(out dn);
                    yield return dn;
                    Marshal.ReleaseComObject(ctl);
                }
                Marshal.ReleaseComObject(sessionEnumerator);
                Marshal.ReleaseComObject(mgr);
                Marshal.ReleaseComObject(speakers);
                Marshal.ReleaseComObject(deviceEnumerator);
            }
    
            private static ISimpleAudioVolume GetVolumeObject(string name)
            {
                //get the speakers (1st render + multimedia) device
                IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());
                IMMDevice speakers;
                deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers);
    
                //activate the session manager. we need the enumerator
                Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID;
                object o;
                speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o);
                IAudioSessionManager2 mgr = (IAudioSessionManager2)o;
    
                //enumerate sessions for on this device
                IAudioSessionEnumerator sessionEnumerator;
                mgr.GetSessionEnumerator(out sessionEnumerator);
                int count;
                sessionEnumerator.GetCount(out count);
    
                //search for an audio session with the required name
                //NOTE: we could also use the process id instead of the app name (with IAudioSessionControl2)
                ISimpleAudioVolume volumeControl = null;
                for (int i = 0; i < count; i++)
                {
                    IAudioSessionControl ctl;
                    sessionEnumerator.GetSession(i, out ctl);
                    string dn;
                    ctl.GetDisplayName(out dn);
                    if (string.Compare(name, dn, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        volumeControl = ctl as ISimpleAudioVolume;
                        break;
                    }
                    Marshal.ReleaseComObject(ctl);
                }
                Marshal.ReleaseComObject(sessionEnumerator);
                Marshal.ReleaseComObject(mgr);
                Marshal.ReleaseComObject(speakers);
                Marshal.ReleaseComObject(deviceEnumerator);
                return volumeControl;
            }
        }
    
        [ComImport]
        [Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")]
        internal class MMDeviceEnumerator
        {
        }
    
        internal enum EDataFlow
        {
            eRender,
            eCapture,
            eAll,
            EDataFlow_enum_count
        }
    
        internal enum ERole
        {
            eConsole,
            eMultimedia,
            eCommunications,
            ERole_enum_count
        }
    
        [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IMMDeviceEnumerator
        {
            int NotImpl1();
    
            [PreserveSig]
            int GetDefaultAudioEndpoint(EDataFlow dataFlow, ERole role, out IMMDevice ppDevice);
    
            //the rest is not implemented
        }
    
        [Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IMMDevice
        {
            [PreserveSig]
            int Activate(ref Guid iid, int dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.IUnknown)] out object ppInterface);
    
            //the rest is not implemented
        }
    
        [Guid("77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IAudioSessionManager2
        {
            int NotImpl1();
            int NotImpl2();
    
            [PreserveSig]
            int GetSessionEnumerator(out IAudioSessionEnumerator SessionEnum);
    
            //the rest is not implemented
        }
    
        [Guid("E2F5BB11-0570-40CA-ACDD-3AA01277DEE8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IAudioSessionEnumerator
        {
            [PreserveSig]
            int GetCount(out int SessionCount);
    
            [PreserveSig]
            int GetSession(int SessionCount, out IAudioSessionControl Session);
        }
    
        [Guid("F4B1A599-7266-4319-A8CA-E70ACB11E8CD"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface IAudioSessionControl
        {
            int NotImpl1();
    
            [PreserveSig]
            int GetDisplayName([MarshalAs(UnmanagedType.LPWStr)] out string pRetVal);
    
            //the rest is not implemented
        }
    
        [Guid("87CE5498-68D6-44E5-9215-6DA47EF883D8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        internal interface ISimpleAudioVolume
        {
            [PreserveSig]
            int SetMasterVolume(float fLevel, ref Guid EventContext);
    
            [PreserveSig]
            int GetMasterVolume(out float pfLevel);
    
            [PreserveSig]
            int SetMute(bool bMute, ref Guid EventContext);
    
            [PreserveSig]
            int GetMute(out bool pbMute);
        }
    }

    Nota: no he definido las interfaces completamente, sólo lo que era necesario para que el código funcione.

    Tal vez usted puede tratar con “Spotify” en lugar de “Mozilla Firefox”
    Ya lo he intentado, pero el mezclador de Volumen no dar la espalda a un DisplayName para Spotify, sólo se hace para Firefox y algún tipo de .dll
    En Windows 7, hay un IAudioSessionControl2 interfaz que se puede obtener el identificador de proceso. Desde allí se puede determinar si es spotify o no. Si usted no sabe cómo hacerlo, pídale a otra pregunta.
    este es otro problema, así que, como he dicho, debe hacer otra pregunta
    Mourier – tengo este error en EnumerateApplications() función – aquí está la captura de pantalla: i.imgur.com/YzbgOKH.png Puede usted por favor ayuda?

    OriginalEl autor Simon Mourier

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *