Beispiel #1
0
        public static void SetMute(MixerInfo mi, bool mute)
        {
            if (IntPtr.Size == 4)
            {
                MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();
                mcd.cbStruct       = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
                mcd.dwControlID    = mi.muteCtl;
                mcd.cMultipleItems = 0;
                mcd.cChannels      = 1;
                mcd.cbDetails      = 4;
                mcd.paDetails      = Marshal.AllocHGlobal((int)mcd.cbDetails);

                Marshal.WriteInt32(mcd.paDetails, mute ? 1 : 0);

                mixerSetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

                Marshal.FreeHGlobal(mcd.paDetails);
            }
            else
            {
                MIXERCONTROLDETAILS64 mcd = new MIXERCONTROLDETAILS64();
                mcd.cbStruct       = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS64));
                mcd.dwControlID    = mi.muteCtl;
                mcd.cMultipleItems = 0;
                mcd.cChannels      = 1;
                mcd.cbDetails      = 4;
                mcd.paDetails      = Marshal.AllocHGlobal((int)mcd.cbDetails);

                Marshal.WriteInt32(mcd.paDetails, mute ? 1 : 0);

                mixerSetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

                Marshal.FreeHGlobal(mcd.paDetails);
            }
        }
Beispiel #2
0
        public static void SetVolume(MixerInfo mi, VOLUME volume)
        {
            if (IntPtr.Size == 4)
            {
                MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();
                mcd.cbStruct       = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
                mcd.dwControlID    = mi.volumeCtl;
                mcd.cMultipleItems = 0;
                mcd.cChannels      = 2;
                mcd.cbDetails      = (uint)Marshal.SizeOf(typeof(VOLUME));
                mcd.paDetails      = Marshal.AllocHGlobal((int)mcd.cbDetails);

                Marshal.StructureToPtr(volume, mcd.paDetails, false);

                mixerSetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

                Marshal.FreeHGlobal(mcd.paDetails);
            }
            else
            {
                MIXERCONTROLDETAILS64 mcd = new MIXERCONTROLDETAILS64();
                mcd.cbStruct       = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS64));
                mcd.dwControlID    = mi.volumeCtl;
                mcd.cMultipleItems = 0;
                mcd.cChannels      = 2;
                mcd.cbDetails      = (uint)Marshal.SizeOf(typeof(VOLUME));
                mcd.paDetails      = Marshal.AllocHGlobal((int)mcd.cbDetails);

                Marshal.StructureToPtr(volume, mcd.paDetails, false);

                mixerSetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

                Marshal.FreeHGlobal(mcd.paDetails);
            }
        }
Beispiel #3
0
        public static void AdjustVolume(MixerInfo mi, int delta)
        {
            VOLUME volume = GetVolume(mi);

            if (delta > 0)
            {
                volume.left  = Math.Min(mi.maxVolume, volume.left + delta);
                volume.right = Math.Min(mi.maxVolume, volume.right + delta);
            }
            else
            {
                volume.left  = Math.Max(mi.minVolume, volume.left + delta);
                volume.right = Math.Max(mi.minVolume, volume.right + delta);
            }

            SetVolume(mi, volume);
        }
Beispiel #4
0
        static bool IsMuted(MixerInfo mi)
        {
            MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();

            mcd.cbStruct       = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
            mcd.dwControlID    = mi.muteCtl;
            mcd.cMultipleItems = 0;
            mcd.cChannels      = 1;
            mcd.cbDetails      = 4;
            mcd.paDetails      = Marshal.AllocHGlobal((int)mcd.cbDetails);

            mixerGetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

            int rtn = Marshal.ReadInt32(mcd.paDetails);

            Marshal.FreeHGlobal(mcd.paDetails);

            return(rtn != 0);
        }
Beispiel #5
0
        static VOLUME GetVolume(MixerInfo mi)
        {
            MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();

            mcd.cbStruct       = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
            mcd.dwControlID    = mi.volumeCtl;
            mcd.cMultipleItems = 0;
            mcd.cChannels      = 2;
            mcd.cbDetails      = (uint)Marshal.SizeOf(typeof(int));
            mcd.paDetails      = Marshal.AllocHGlobal((int)mcd.cbDetails);

            mixerGetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

            VOLUME rtn = (VOLUME)Marshal.PtrToStructure(mcd.paDetails, typeof(VOLUME));

            Marshal.FreeHGlobal(mcd.paDetails);

            return(rtn);
        }
Beispiel #6
0
        public static MixerInfo GetMixerControls()
        {
            MIXERLINE         mxl = new MIXERLINE();
            MIXERLINECONTROLS mlc = new MIXERLINECONTROLS();

            mxl.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERLINE));
            mlc.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERLINECONTROLS));

            mixerGetLineInfo(IntPtr.Zero, ref mxl, MIXER.OBJECTF_MIXER | MIXER.GETLINEINFOF_DESTINATION);

            mlc.dwLineID  = mxl.dwLineID;
            mlc.cControls = mxl.cControls;
            mlc.cbmxctrl  = (uint)Marshal.SizeOf(typeof(MIXERCONTROL));
            mlc.pamxctrl  = Marshal.AllocHGlobal((int)(mlc.cbmxctrl * mlc.cControls));

            mixerGetLineControls(IntPtr.Zero, ref mlc, MIXER.OBJECTF_MIXER | MIXER.GETLINECONTROLSF_ALL);

            MixerInfo rtn = new MixerInfo();

            for (int i = 0; i < mlc.cControls; i++)
            {
                MIXERCONTROL mxc = (MIXERCONTROL)Marshal.PtrToStructure((IntPtr)((int)mlc.pamxctrl + (int)mlc.cbmxctrl * i), typeof(MIXERCONTROL));
                switch (mxc.dwControlType)
                {
                case MIXERCONTROL_CONTROLTYPE.VOLUME:
                    rtn.volumeCtl = mxc.dwControlID;
                    rtn.minVolume = mxc.Bounds.lMinimum;
                    rtn.maxVolume = mxc.Bounds.lMaximum;
                    break;

                case MIXERCONTROL_CONTROLTYPE.MUTE:
                    rtn.muteCtl = mxc.dwControlID;
                    break;
                }
            }

            Marshal.FreeHGlobal(mlc.pamxctrl);

            return(rtn);
        }
        static void SetVolume(MixerInfo mi, VOLUME volume)
        {
            MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();
            mcd.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
            mcd.dwControlID = mi.volumeCtl;
            mcd.cMultipleItems = 0;
            mcd.cChannels = 2;
            mcd.cbDetails = (uint)Marshal.SizeOf(typeof(int));
            mcd.paDetails = Marshal.AllocHGlobal((int)mcd.cbDetails);

            Marshal.StructureToPtr(volume, mcd.paDetails, false);

            mixerSetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

            Marshal.FreeHGlobal(mcd.paDetails);
        }
        static void SetMute(MixerInfo mi, bool mute)
        {
            MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();
            mcd.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
            mcd.dwControlID = mi.muteCtl;
            mcd.cMultipleItems = 0;
            mcd.cChannels = 1;
            mcd.cbDetails = 4;
            mcd.paDetails = Marshal.AllocHGlobal((int)mcd.cbDetails);

            Marshal.WriteInt32(mcd.paDetails, mute ? 1 : 0);

            mixerSetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

            Marshal.FreeHGlobal(mcd.paDetails);
        }
        static bool IsMuted(MixerInfo mi)
        {
            MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();
            mcd.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
            mcd.dwControlID = mi.muteCtl;
            mcd.cMultipleItems = 0;
            mcd.cChannels = 1;
            mcd.cbDetails = 4;
            mcd.paDetails = Marshal.AllocHGlobal((int)mcd.cbDetails);

            mixerGetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

            int rtn = Marshal.ReadInt32(mcd.paDetails);

            Marshal.FreeHGlobal(mcd.paDetails);

            return rtn != 0;
        }
        static VOLUME GetVolume(MixerInfo mi)
        {
            MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();
            mcd.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
            mcd.dwControlID = mi.volumeCtl;
            mcd.cMultipleItems = 0;
            mcd.cChannels = 2;
            mcd.cbDetails = (uint)Marshal.SizeOf(typeof(int));
            mcd.paDetails = Marshal.AllocHGlobal((int)mcd.cbDetails);

            mixerGetControlDetails(IntPtr.Zero, ref mcd, MIXER.GETCONTROLDETAILSF_VALUE | MIXER.OBJECTF_MIXER);

            VOLUME rtn = (VOLUME)Marshal.PtrToStructure(mcd.paDetails, typeof(VOLUME));

            Marshal.FreeHGlobal(mcd.paDetails);

            return rtn;
        }
        public static MixerInfo GetMixerControls()
        {
            MIXERLINE mxl = new MIXERLINE();
            MIXERLINECONTROLS mlc = new MIXERLINECONTROLS();
            mxl.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERLINE));
            mlc.cbStruct = (uint)Marshal.SizeOf(typeof(MIXERLINECONTROLS));

            mixerGetLineInfo(IntPtr.Zero, ref mxl, MIXER.OBJECTF_MIXER | MIXER.GETLINEINFOF_DESTINATION);

            mlc.dwLineID = mxl.dwLineID;
            mlc.cControls = mxl.cControls;
            mlc.cbmxctrl = (uint)Marshal.SizeOf(typeof(MIXERCONTROL));
            mlc.pamxctrl = Marshal.AllocHGlobal((int)(mlc.cbmxctrl * mlc.cControls));

            mixerGetLineControls(IntPtr.Zero, ref mlc, MIXER.OBJECTF_MIXER | MIXER.GETLINECONTROLSF_ALL);

            MixerInfo rtn = new MixerInfo();

            for (int i = 0; i < mlc.cControls; i++)
            {
                MIXERCONTROL mxc = (MIXERCONTROL)Marshal.PtrToStructure((IntPtr)((int)mlc.pamxctrl + (int)mlc.cbmxctrl * i), typeof(MIXERCONTROL));
                switch (mxc.dwControlType)
                {
                    case MIXERCONTROL_CONTROLTYPE.VOLUME:
                        rtn.volumeCtl = mxc.dwControlID;
                        rtn.minVolume = mxc.Bounds.lMinimum;
                        rtn.maxVolume = mxc.Bounds.lMaximum;
                        break;
                    case MIXERCONTROL_CONTROLTYPE.MUTE:
                        rtn.muteCtl = mxc.dwControlID;
                        break;
                }
            }

            Marshal.FreeHGlobal(mlc.pamxctrl);

            return rtn;
        }
        public static void AdjustVolume(MixerInfo mi, int delta)
        {
            VOLUME volume = GetVolume(mi);

            if (delta > 0)
            {
                volume.left = Math.Min(mi.maxVolume, volume.left + delta);
                volume.right = Math.Min(mi.maxVolume, volume.right + delta);
            }
            else
            {
                volume.left = Math.Max(mi.minVolume, volume.left + delta);
                volume.right = Math.Max(mi.minVolume, volume.right + delta);
            }

            SetVolume(mi, volume);
        }