本文整理汇总了C#中MIXERCONTROLDETAILS类的典型用法代码示例。如果您正苦于以下问题:C# MIXERCONTROLDETAILS类的具体用法?C# MIXERCONTROLDETAILS怎么用?C# MIXERCONTROLDETAILS使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
MIXERCONTROLDETAILS类属于命名空间,在下文中一共展示了MIXERCONTROLDETAILS类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetCurrentVolume
uint GetCurrentVolume()
{
MIXERCONTROLDETAILS volCtl = new MIXERCONTROLDETAILS();
IntPtr volPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(new MIXERCONTROLDETAILS_UNSIGNED()));
volCtl.StructSize = (uint)Marshal.SizeOf(new MIXERCONTROLDETAILS());
volCtl.ControlID = _volumeID;
volCtl.Channels = 1;
volCtl.MultipleItems = 0;
volCtl.DetailsItemSize = (uint)Marshal.SizeOf(new MIXERCONTROLDETAILS_UNSIGNED());
volCtl.DetailsPointer = volPtr;
uint mmresult = mixerGetControlDetails(_hMixer, ref volCtl,
MIXER_OBJECTF.HMIXER , MIXER_GETCONTROLDETAILSF.VALUE);
if (mmresult != (uint)MMRESULT.MMSYSERR_NOERROR)
{
Marshal.FreeCoTaskMem(volPtr);
throw new MixerException("mixerGetControlDetails" , mmresult);
}
MIXERCONTROLDETAILS_UNSIGNED volInfo
= (MIXERCONTROLDETAILS_UNSIGNED)Marshal.PtrToStructure(volPtr,
typeof(MIXERCONTROLDETAILS_UNSIGNED));
Marshal.FreeCoTaskMem(volPtr);
double ret = ((double)(volInfo.Value - _volMin) * 100 + (double)(_volMax - _volMin) / 2)
/ (double)(_volMax - _volMin);
Debug.WriteLine(string.Format("MixerAPI.GetCurrentVolume vol:{0} volMax:{1} volMin:{2} ret:{3}",
volInfo.Value,_volMax,_volMin,ret));
return (uint)ret;
}
示例2: GetVolumeControl
private static bool GetVolumeControl(int hmixer, int componentType, int ctrlType, out MIXERCONTROL mxc,
out int vCurrentVol)
{
// This function attempts to obtain a mixer control.
// Returns True if successful.
MIXERLINECONTROLS mxlc = new MIXERLINECONTROLS();
MIXERLINE mxl = new MIXERLINE();
MIXERCONTROLDETAILS pmxcd = new MIXERCONTROLDETAILS();
MIXERCONTROLDETAILS_UNSIGNED du = new MIXERCONTROLDETAILS_UNSIGNED();
mxc = new MIXERCONTROL();
int rc;
bool retValue;
vCurrentVol = -1;
mxl.cbStruct = Marshal.SizeOf(mxl);
mxl.dwComponentType = componentType;
rc = mixerGetLineInfoA(hmixer, ref mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
if (MMSYSERR_NOERROR == rc)
{
int sizeofMIXERCONTROL = 152;
int ctrl = Marshal.SizeOf(typeof (MIXERCONTROL));
mxlc.pamxctrl = Marshal.AllocCoTaskMem(sizeofMIXERCONTROL);
mxlc.cbStruct = Marshal.SizeOf(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControl = ctrlType;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeofMIXERCONTROL;
// Allocate a buffer for the control
mxc.cbStruct = sizeofMIXERCONTROL;
// Get the control
rc = mixerGetLineControlsA(hmixer, ref mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if (MMSYSERR_NOERROR == rc)
{
retValue = true;
// Copy the control into the destination structure
mxc = (MIXERCONTROL)Marshal.PtrToStructure(mxlc.pamxctrl, typeof (MIXERCONTROL));
}
else
{
retValue = false;
}
int sizeofMIXERCONTROLDETAILS = Marshal.SizeOf(typeof (MIXERCONTROLDETAILS));
int sizeofMIXERCONTROLDETAILS_UNSIGNED = Marshal.SizeOf(typeof (MIXERCONTROLDETAILS_UNSIGNED));
pmxcd.cbStruct = sizeofMIXERCONTROLDETAILS;
pmxcd.dwControlID = mxc.dwControlID;
pmxcd.paDetails =
Marshal.AllocCoTaskMem(sizeofMIXERCONTROLDETAILS_UNSIGNED);
pmxcd.cChannels = 1;
pmxcd.item = 0;
pmxcd.cbDetails = sizeofMIXERCONTROLDETAILS_UNSIGNED;
rc = mixerGetControlDetailsA(hmixer, ref pmxcd, MIXER_GETCONTROLDETAILSF_VALUE);
du =
(MIXERCONTROLDETAILS_UNSIGNED)Marshal.PtrToStructure(pmxcd.paDetails, typeof (MIXERCONTROLDETAILS_UNSIGNED));
vCurrentVol = du.dwValue;
return retValue;
}
retValue = false;
return retValue;
}
示例3: mixerSetControlDetails
private static extern int mixerSetControlDetails(int hmxobj, ref MIXERCONTROLDETAILS pmxcd, int fdwDetails);
示例4: mixerSetControlDetails
public static extern MmResult mixerSetControlDetails(IntPtr hMixer, ref MIXERCONTROLDETAILS mixerControlDetails, MixerFlags dwDetailsFlags);
示例5: IsMuted
/// <summary>
/// Used to get or set the values of this switch.
/// </summary>
///
//Added this function since Values didn't seem to be working correctly for MuteSwitch
//TODO: Re-evaluate what's necessary once thorough testing has been completed for XP
public bool IsMuted()
{
MIXERCONTROLDETAILS mcd = new MIXERCONTROLDETAILS();
mcd.cbStruct = Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
mcd.dwControlID = ctrl.dwControlID;
mcd.cMultipleItems = 0;
mcd.cChannels = 1;
mcd.cbDetails = 4;
mcd.paDetails = Marshal.AllocHGlobal((int)mcd.cbDetails);
mixerGetControlDetailsA(IntPtr.Zero, ref mcd, 0x0 | 0x0);
int rtn = Marshal.ReadInt32(mcd.paDetails);
Marshal.FreeHGlobal(mcd.paDetails);
return rtn != 0;
}
示例6: IsMuted
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;
}
示例7: SetMute
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);
}
示例8: GetMuxLineNames
public static bool GetMuxLineNames(int mixerID, out ArrayList a)
{
int mixer;
MIXERCONTROL ctrl = new MIXERCONTROL();
a = new ArrayList();
mixerOpen(out mixer, mixerID, 0, 0, 0);
GetControlByType(mixer, MIXERLINE_COMPONENTTYPE_DST_WAVEIN, 0, MIXERCONTROL_CONTROLTYPE_MUX, out ctrl);
int n = ctrl.cMultipleItems;
MIXERCONTROLDETAILS mxcd = new MIXERCONTROLDETAILS();
mxcd.cbStruct = Marshal.SizeOf(mxcd);
mxcd.dwControlID = ctrl.dwControlID; // <== MIXERCONTROL.dwControlID
mxcd.cChannels = 1;
mxcd.item = n; // <== MIXERCONTROL.cMultipleItems
int size = Marshal.SizeOf(typeof(MIXERCONTROLDETAILS_LISTTEXT))*n;
mxcd.cbDetails = Marshal.SizeOf(typeof(MIXERCONTROLDETAILS_LISTTEXT));
mxcd.paDetails = Marshal.AllocCoTaskMem(size);
int result = mixerGetControlDetails(mixer, ref mxcd, MIXER_GETCONTROLDETAILSF_LISTTEXT);
if(result != MMSYSERR_NOERROR)
{
mixerClose(mixer);
return false;
}
for(int i=0; i<mxcd.item; i++)
{
MIXERCONTROLDETAILS_LISTTEXT ltxt = new MIXERCONTROLDETAILS_LISTTEXT();
IntPtr ptr = new IntPtr(mxcd.paDetails.ToInt32() + i*mxcd.cbDetails);
ltxt = (MIXERCONTROLDETAILS_LISTTEXT)Marshal.PtrToStructure(ptr, typeof(MIXERCONTROLDETAILS_LISTTEXT));
a.Add(ltxt.szName);
}
mixerClose(mixer);
return true;
}
示例9: GetMux
public static int GetMux(int mixerID)
{
int mixer;
MIXERCONTROL ctrl = new MIXERCONTROL();
mixerOpen(out mixer, mixerID, 0, 0, 0);
GetControlByType(mixer, MIXERLINE_COMPONENTTYPE_DST_WAVEIN, 0, MIXERCONTROL_CONTROLTYPE_MUX, out ctrl);
MIXERCONTROLDETAILS details = new MIXERCONTROLDETAILS();
int size = Marshal.SizeOf(typeof(MIXERCONTROLDETAILS_UNSIGNED));
details.dwControlID = ctrl.dwControlID;
details.item = ctrl.cMultipleItems;
details.cbDetails = size;
if(details.item > 0) size *= ctrl.cMultipleItems;
details.paDetails = Marshal.AllocCoTaskMem(size);
details.cbStruct = Marshal.SizeOf(details);
details.cChannels = 1;
int retval = mixerGetControlDetails(mixer, ref details, MIXER_GETCONTROLDETAILSF_VALUE);
if(retval == MMSYSERR_NOERROR)
{
if(details.item > 0)
{
MIXERCONTROLDETAILS_UNSIGNED[] val = new MIXERCONTROLDETAILS_UNSIGNED[details.item];
for(int m=0; m<details.item; m++)
{
IntPtr ptr = new IntPtr(details.paDetails.ToInt32() + m*details.cbDetails);
val[m] = new MIXERCONTROLDETAILS_UNSIGNED();
val[m] = (MIXERCONTROLDETAILS_UNSIGNED)Marshal.PtrToStructure(ptr, typeof(MIXERCONTROLDETAILS_UNSIGNED));
if(val[m].dwValue == 1)
{
retval = m;
m = details.item;
}
}
}
}
mixerClose(mixer);
return retval;
}
示例10: SetMute
void SetMute(bool flag)
{
MIXERCONTROLDETAILS muteCtl = new MIXERCONTROLDETAILS();
MIXERCONTROLDETAILS_BOOLEAN muteVal = new MIXERCONTROLDETAILS_BOOLEAN();
muteVal.Value = flag ? 1 : 0;
Debug.WriteLine("MixerAPI.SetMute:" + flag.ToString());
IntPtr mutePtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(new MIXERCONTROLDETAILS_BOOLEAN()));
Marshal.StructureToPtr(muteVal, mutePtr, false);
muteCtl.StructSize = (uint)Marshal.SizeOf(new MIXERCONTROLDETAILS());
muteCtl.ControlID = _muteID;
muteCtl.Channels = 1;
muteCtl.MultipleItems = 0;
muteCtl.DetailsItemSize = (uint)Marshal.SizeOf(new MIXERCONTROLDETAILS_BOOLEAN());
muteCtl.DetailsPointer = mutePtr;
uint mmresult = mixerSetControlDetails(_hMixer, ref muteCtl,
MIXER_OBJECTF.HMIXER, MIXER_GETCONTROLDETAILSF.VALUE);
Marshal.FreeCoTaskMem(mutePtr);
if (mmresult != (uint)MMRESULT.MMSYSERR_NOERROR)
{
throw new Exception("mixerSetControlDetails" + mmresult.ToString());
}
}
示例11: GetVolume_RealtekHDaudio
private static int GetVolume_RealtekHDaudio(int mixerID, int dst_type, int src_type) // yt7pwr
{
if (mixerID > mixerGetNumDevs() - 1 ||
mixerID < 0)
return -1;
int mixer;
int val;
MIXERCONTROL volCtrl = new MIXERCONTROL();
int retval = mixerOpen(out mixer, mixerID, 0, 0, 0);
if (retval != MMSYSERR_NOERROR)
return -1;
bool success = GetControlByID(mixer, dst_type, src_type, MIXERCONTROL_CONTROLTYPE_VOLUME, out volCtrl);
if (success == true)
{
MIXERCONTROLDETAILS details = new MIXERCONTROLDETAILS();
int sizeofMIXERCONTROLDETAILS = Marshal.SizeOf(typeof(MIXERCONTROLDETAILS));
int sizeofMIXERCONTROLDETAILS_UNSIGNED = Marshal.SizeOf(typeof(MIXERCONTROLDETAILS_UNSIGNED));
details.cbStruct = sizeofMIXERCONTROLDETAILS;
details.dwControlID = volCtrl.dwControlID;
details.paDetails = Marshal.AllocCoTaskMem(sizeofMIXERCONTROLDETAILS_UNSIGNED);
details.cChannels = 1;
details.item = 0;
details.cbDetails = sizeofMIXERCONTROLDETAILS_UNSIGNED;
retval = mixerGetControlDetails(mixer, ref details, MIXER_GETCONTROLDETAILSF_VALUE);
if (retval == MMSYSERR_NOERROR)
{
MIXERCONTROLDETAILS_UNSIGNED du = (MIXERCONTROLDETAILS_UNSIGNED)Marshal.PtrToStructure(details.paDetails, typeof(MIXERCONTROLDETAILS_UNSIGNED));
val = du.dwValue;
}
else val = -1;
Marshal.FreeCoTaskMem(details.paDetails);
}
else val = -1;
mixerClose(mixer);
return val;
}
示例12: IsMute
bool IsMute()
{
MIXERCONTROLDETAILS muteCtl = new MIXERCONTROLDETAILS();
IntPtr mutePtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(new MIXERCONTROLDETAILS_BOOLEAN()));
muteCtl.StructSize = (uint)Marshal.SizeOf(new MIXERCONTROLDETAILS());
muteCtl.ControlID = _muteID;
muteCtl.Channels = 1;
muteCtl.MultipleItems = 0;
muteCtl.DetailsItemSize = (uint)Marshal.SizeOf(new MIXERCONTROLDETAILS_BOOLEAN());
muteCtl.DetailsPointer = mutePtr;
uint mmresult = mixerGetControlDetails(_hMixer, ref muteCtl,
MIXER_OBJECTF.HMIXER, MIXER_GETCONTROLDETAILSF.VALUE);
if (mmresult != (uint)MMRESULT.MMSYSERR_NOERROR)
{
Marshal.FreeCoTaskMem(mutePtr);
throw new MixerException("mixerGetControlDetails" , mmresult);
}
MIXERCONTROLDETAILS_BOOLEAN muteInfo
= (MIXERCONTROLDETAILS_BOOLEAN)Marshal.PtrToStructure(mutePtr,
typeof(MIXERCONTROLDETAILS_BOOLEAN));
Marshal.FreeCoTaskMem(mutePtr);
Debug.WriteLine("MixerAPI.IsMuteret:" + muteInfo.Value.ToString());
return muteInfo.Value > 0;
}
示例13: SetVolume
void SetVolume(uint value)
{
MIXERCONTROLDETAILS volCtl = new MIXERCONTROLDETAILS();
MIXERCONTROLDETAILS_UNSIGNED volDat = new MIXERCONTROLDETAILS_UNSIGNED();
double volValue = (double)value * (double)(_volMax - _volMin) / 100D + _volMin;
volDat.Value = (uint)volValue;
Debug.WriteLine(string.Format("MixerAPI.SetCurrentVolume vol:{0} volMax:{1} volMin:{2} param:{3}",
value, _volMax, _volMin, volDat.Value));
IntPtr volPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(new MIXERCONTROLDETAILS_UNSIGNED()));
Marshal.StructureToPtr(volDat, volPtr, false);
volCtl.StructSize = (uint)Marshal.SizeOf(new MIXERCONTROLDETAILS());
volCtl.ControlID = _volumeID;
volCtl.Channels = 1;
volCtl.MultipleItems = 0;
volCtl.DetailsItemSize = (uint)Marshal.SizeOf(new MIXERCONTROLDETAILS_UNSIGNED());
volCtl.DetailsPointer = volPtr;
uint mmresult = mixerSetControlDetails(_hMixer, ref volCtl,
MIXER_OBJECTF.HMIXER, MIXER_GETCONTROLDETAILSF.VALUE);
Marshal.FreeCoTaskMem(volPtr);
if (mmresult != (uint)MMRESULT.MMSYSERR_NOERROR)
{
throw new MixerException("mixerSetControlDetails" , mmresult);
}
}
示例14: mixerSetControlDetails
static uint mixerSetControlDetails(IntPtr hmxobj, ref MIXERCONTROLDETAILS pmxcd, MIXER_OBJECTF fdwDetails, MIXER_GETCONTROLDETAILSF getControlDetails)
{
uint flags = ((uint)fdwDetails | (uint)getControlDetails);
return mixerSetControlDetails(hmxobj, ref pmxcd, flags);
}
示例15: RestoreState
public static void RestoreState()
{
int index = 0;
uint[] ctrl_list =
{
MIXERCONTROL_CONTROLTYPE_CUSTOM,
MIXERCONTROL_CONTROLTYPE_BOOLEANMETER,
MIXERCONTROL_CONTROLTYPE_SIGNEDMETER,
MIXERCONTROL_CONTROLTYPE_PEAKMETER,
MIXERCONTROL_CONTROLTYPE_BOOLEAN,
MIXERCONTROL_CONTROLTYPE_ONOFF,
MIXERCONTROL_CONTROLTYPE_MUTE,
MIXERCONTROL_CONTROLTYPE_MONO,
MIXERCONTROL_CONTROLTYPE_LOUDNESS,
MIXERCONTROL_CONTROLTYPE_STEREOENH,
MIXERCONTROL_CONTROLTYPE_BUTTON,
MIXERCONTROL_CONTROLTYPE_DECIBELS,
MIXERCONTROL_CONTROLTYPE_SIGNED,
MIXERCONTROL_CONTROLTYPE_SLIDER,
MIXERCONTROL_CONTROLTYPE_PAN,
MIXERCONTROL_CONTROLTYPE_QSOUNDPAN,
MIXERCONTROL_CONTROLTYPE_SINGLESELECT,
MIXERCONTROL_CONTROLTYPE_MUX,
MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT,
MIXERCONTROL_CONTROLTYPE_MIXER,
MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER,
MIXERCONTROL_CONTROLTYPE_UNSIGNED,
MIXERCONTROL_CONTROLTYPE_BASS,
MIXERCONTROL_CONTROLTYPE_EQUALIZER,
MIXERCONTROL_CONTROLTYPE_FADER,
MIXERCONTROL_CONTROLTYPE_TREBLE,
MIXERCONTROL_CONTROLTYPE_VOLUME,
MIXERCONTROL_CONTROLTYPE_MICROTIME,
MIXERCONTROL_CONTROLTYPE_MILLITIME,
MIXERCONTROL_CONTROLTYPE_PERCENT,
};
int num_mixers = mixerGetNumDevs();
int mixer = -1;
int retval = -1;
for(int i=0; i<num_mixers; i++) // for each mixer
{
mixerOpen(out mixer, i, 0, 0, 0);
MIXERCAPS mc = new MIXERCAPS();
retval = mixerGetDevCaps(mixer, ref mc, Marshal.SizeOf(mc));
if(retval == MMSYSERR_NOERROR)
{
int num_dest = mc.cDestinations;
for(int j=0; j<num_dest; j++) // for each destination line in this mixer
{
MIXERLINE dst_line = new MIXERLINE();
dst_line.cbStruct = Marshal.SizeOf(dst_line);
dst_line.dwDestination = j;
retval = mixerGetLineInfo(mixer, ref dst_line, MIXER_GETLINEINFOF_DESTINATION);
if(retval == MMSYSERR_NOERROR)
{
for(int k=0; k<30; k++) // for each control in this destination line
{
MIXERLINECONTROLS dst_lc = new MIXERLINECONTROLS();
int mcSize = 152;
dst_lc.pamxctrl = Marshal.AllocCoTaskMem(mcSize);
dst_lc.cbStruct = Marshal.SizeOf(dst_lc);
dst_lc.dwLineID = dst_line.dwLineID;
dst_lc.dwControl = ctrl_list[k];
dst_lc.cControls = 1;
dst_lc.cbmxctrl = mcSize;
// Get the control
retval = mixerGetLineControls(mixer, ref dst_lc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
if(retval == MMSYSERR_NOERROR)
{
MIXERCONTROL ctrl = new MIXERCONTROL();
ctrl.cbStruct = mcSize;
// Copy the control into the destination structure
ctrl = (MIXERCONTROL)Marshal.PtrToStructure(dst_lc.pamxctrl, typeof(MIXERCONTROL));
MIXERCONTROLDETAILS details = new MIXERCONTROLDETAILS();
int size = Marshal.SizeOf(typeof(MIXERCONTROLDETAILS_SIGNED));
details.dwControlID = ctrl.dwControlID;
details.cbDetails = size;
details.item = ctrl.cMultipleItems;
if(details.item > 0) size *= details.item;
details.paDetails = Marshal.AllocCoTaskMem(size);
details.cbStruct = Marshal.SizeOf(details);
details.cChannels = 1;
if(details.item > 0)
{
if(index != save.Count)
{
int rec_index = (int)save[index];
int[] val = new int[details.item];
for(int m=0; m<details.item; m++)
{
if(m == rec_index) val[m] = 1;
else val[m] = 0;
}
Marshal.Copy(val, 0, details.paDetails, details.item);
//.........这里部分代码省略.........