Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Audio...
#7
Function Peak_Meter
Code:
Copy      Help
;;From (http://support.microsoft.com/kb/181550)
;;I think I have it adapted right for QM...not sure though :)
;;Right off the bat...MMRESULT and HMIXER types do not work...I think I need them?

;MMRESULT rc              ;; Return code.
int rc                    ;; (EDIT) Changed from MMRESULT rc
;HMIXER hMixer            ;; Mixer handle used in mixer API calls.
int hMixer                ;; (EDIT) Changed from HMIXER hMixer
MIXERCONTROL mxc;         ;; Holds the mixer control data.
MIXERLINE mxl;            ;; Holds the mixer line data.
MIXERLINECONTROLS mxlc;   ;; Obtains the mixer control.

;;;;;; Open the mixer. This opens the mixer with a deviceID of 0. If you
;;;;;; have a single sound card/mixer, then this will open it. If you have
;;;;;; multiple sound cards/mixers, the deviceIDs will be 0, 1, 2, and
;;;;;; so on.
rc = mixerOpen(&hMixer, 0,0,0,0);
if (MMSYSERR_NOERROR != rc)
,mes "Couldn't open the mixer."
;;;;;; Initialize MIXERLINE structure.
;ZeroMemory(&mxl,sizeof(mxl)); ;;(Disabled)DOES NOT WORK??
mxl.cbStruct = sizeof(mxl);

;;;;;; Specify the line you want to get. You are getting the input line
;;;;;; here. If you want to get the output line, you need to use
;;;;;; MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT.
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN;

rc = mixerGetLineInfo(hMixer, &mxl,MIXER_GETLINEINFOF_COMPONENTTYPE); ;;Changed from: rc = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl,MIXER_GETLINEINFOF_COMPONENTTYPE);
if (MMSYSERR_NOERROR == rc)
,mes "Couldn't get the mixer line."

;;;;;; Get the control.
;ZeroMemory(&mxlc, sizeof(mxlc)); ;;(Disabled)DOES NOT WORK??
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_PEAKMETER;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(mxc);
mxlc.pamxctrl = &mxc;

;ZeroMemory(&mxc, sizeof(mxc)); ;;(Disabled)DOES NOT WORK??

mxc.cbStruct = sizeof(mxc);
rc = mixerGetLineControls(hMixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE); ;;Changed from: rc = mixerGetLineControls((HMIXEROBJ)hMixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE);
if (MMSYSERR_NOERROR != rc)
,mes "Couldn't get the control."

;;;;;; After successfully getting the peakmeter control, the volume range
;;;;;; will be specified by mxc.Bounds.lMinimum to mxc.Bounds.lMaximum.

MIXERCONTROLDETAILS mxcd;             ;; Gets the control values.
MIXERCONTROLDETAILS_SIGNED volStruct; ;; Gets the control values.
long volume;                          ;; Holds the final volume value.

;;;;;; Initialize the MIXERCONTROLDETAILS structure
;ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(volStruct);
mxcd.dwControlID = mxc.dwControlID;
mxcd.paDetails = &volStruct;
mxcd.cChannels = 1;

;;;;;; Get the current value of the peakmeter control. Typically, you
;;;;;; would set a timer in your program to query the volume every 10th
;;;;;; of a second or so.
rc = mixerGetControlDetails(hMixer, &mxcd,MIXER_GETCONTROLDETAILSF_VALUE); ;;Changed from: rc = mixerGetControlDetails((HMIXEROBJ)hMixer, &mxcd,MIXER_GETCONTROLDETAILSF_VALUE);
if (MMSYSERR_NOERROR == rc)
,mes "Couldn't get the current volume."
volume = volStruct.lValue;

;;;;;; Get the absolute value of the volume.
if (volume < 0)
,volume = -volume;
,
out volume
;;output is 0 which tells me it is not working.  Maybe someone will have good luck with this!  Thanks...Jimmy Vig


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)