全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:666
推到 Plurk!
推到 Facebook!

關於Mc Volume的dwControlID的問題

尚未結案
venson0704
一般會員


發表:3
回覆:3
積分:1
註冊:2002-08-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-26 12:37:24 IP:211.20.xxx.xxx 未訂閱
//---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
#include "mmsystem.h"
#include "assert.h"    #include "stdio.h"    HMIXER MM_HMIXER;    MIXERCAPS MM_MxCaps;    //---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Initial();    ScrollBar1->Max = 0xFFFF;    ScrollBar2->Max = 0xFFFF;    ScrollBar3->Max = 0xFFFF;    ScrollBar4->Max = 0xFFFF;    ScrollBar5->Max = 0xFFFF;    ScrollBar6->Max = 0xFFFF;    ScrollBar7->Max = 0xFFFF;    ScrollBar8->Max = 0xFFFF;    ScrollBar9->Max = 0xFFFF;    ScrollBar10->Max = 0xFFFF;    ScrollBar11->Max = 0xFFFF;    ScrollBar13->Max = 0xFFFF;    ScrollBar15->Max = 0xFFFF;    ScrollBar16->Max = 0xFFFF;    int VolumeValue[2];    GetMasterVolumeValue(0,VolumeValue);    ScrollBar1->Position = 0xFFFF - VolumeValue[0];    ScrollBar9->Position = 0xFFFF - VolumeValue[1];    GetMasterVolumeValue(2,VolumeValue);    ScrollBar2->Position = 0xFFFF - VolumeValue[0];    ScrollBar10->Position = 0xFFFF - VolumeValue[1];    GetMasterVolumeValue(4,VolumeValue);    ScrollBar3->Position = 0xFFFF - VolumeValue[0];    ScrollBar11->Position = 0xFFFF - VolumeValue[1];    GetMasterVolumeValue(6,VolumeValue);    ScrollBar4->Position = 0xFFFF - VolumeValue[0];    GetMasterVolumeValue(8,VolumeValue);    ScrollBar5->Position = 0xFFFF - VolumeValue[0];    ScrollBar13->Position = 0xFFFF - VolumeValue[1];    GetMasterVolumeValue(11,VolumeValue);    ScrollBar6->Position = 0xFFFF - VolumeValue[0];    GetMasterVolumeValue(13,VolumeValue);    ScrollBar7->Position = 0xFFFF - VolumeValue[0];    ScrollBar15->Position = 0xFFFF - VolumeValue[1];    GetMasterVolumeValue(15,VolumeValue);    ScrollBar8->Position = 0xFFFF - VolumeValue[0];    ScrollBar16->Position = 0xFFFF - VolumeValue[1];
}
//---------------------------------------------------------------------------    __fastcall TForm1::~TForm1()
{
UnInitial();
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
/*
mciSendString("close p1",0,0,0);    mciSendStringA("open new type WAVEAudio alias p1",0,0,0);    mciSendString("record p1",0,0,0);
*/
}
//---------------------------------------------------------------------------
               
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
SetMasterVolumeValue(0xFFFF - ScrollBar1->Position,0xFFFF - ScrollBar9->Position,MIXERLINE_COMPONENTTYPE_DST_FIRST);    SetMasterVolumeValue(0xFFFF - ScrollBar2->Position,0xFFFF - ScrollBar10->Position,2);    SetMasterVolumeValue(0xFFFF - ScrollBar3->Position,0xFFFF - ScrollBar11->Position,4);    SetMasterVolumeValue(0xFFFF - ScrollBar4->Position,0xFFFF - ScrollBar4->Position,6);    SetMasterVolumeValue(0xFFFF - ScrollBar5->Position,0xFFFF - ScrollBar13->Position,8);    SetMasterVolumeValue(0xFFFF - ScrollBar6->Position,0xFFFF - ScrollBar6->Position,11);    SetMasterVolumeValue(0xFFFF - ScrollBar7->Position,0xFFFF - ScrollBar15->Position,13);    SetMasterVolumeValue(0xFFFF - ScrollBar8->Position,0xFFFF - ScrollBar16->Position,15);
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Initial(void)
{
assert(MM_HMIXER == NULL);    MM_NumMixers = mixerGetNumDevs();    MM_HMIXER = NULL;    ZeroMemory(&MM_MxCaps,sizeof(MIXERCAPS));    MM_Minimum = 0;    MM_Maximum = 0;    MM_VolumeControlID = 0;    MM_DstLineName = "";    MM_VolumeControlName = "";    if (MM_NumMixers != 0)
        {
        if (mixerOpen(&MM_HMIXER,0,reinterpret_cast(Handle),NULL,MIXER_OBJECTF_MIXER | CALLBACK_WINDOW) != MMSYSERR_NOERROR)
                {
                ShowMessage("mixerOpen Error");                    return;
                }
                
        if (mixerGetDevCaps(reinterpret_cast(MM_HMIXER),&MM_MxCaps,sizeof(MIXERCAPS)) != MMSYSERR_NOERROR)
                {
                ShowMessage("mixerGetDevCaps Error");                    return;
                }
        }
else
        {
        ShowMessage("mixerGetNumDevs Error");
        }    if (MM_HMIXER == NULL)
        {
        ShowMessage("Initial Error_1");            return ;
        }    MIXERLINE mxl1,mxl2;    MIXERCONTROL mxc1,mxc2;    MIXERLINECONTROLS mxlc1,mxlc2;    for (int i = 0;i < MM_MxCaps.cDestinations - 1;i  )
        {
        mxl1.dwDestination = i;            mxl1.cbStruct = sizeof(MIXERLINE);            if (mixerGetLineInfo(reinterpret_cast(MM_HMIXER),&mxl1,MIXER_GETLINEINFOF_DESTINATION) != MMSYSERR_NOERROR)
                {
                ShowMessage("MIXER_GETLINEINFOF_DESTINATION Error");                    return;
                }            if (mxl1.cControls > 1)
                {
                mxlc1.cbStruct = sizeof(MIXERLINECONTROLS);                    mxlc1.dwLineID = mxl1.dwLineID;                    mxlc1.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;                    mxlc1.cControls = mxl1.cControls;                    mxlc1.cbmxctrl = sizeof(MIXERCONTROL);                    mxlc1.pamxctrl = &mxc1;                    if (mixerGetLineControls(reinterpret_cast(MM_HMIXER),&mxlc1,MIXER_GETLINECONTROLSF_ALL) != MMSYSERR_NOERROR)
                        {
                        ShowMessage("MIXER_GETLINECONTROLSF_ALL Error");                            return;
                        }                    for (int k = 0;k < mxlc1.cControls - 1;k  )
                        {
                        Form1->ListBox1->Items->Add(mxl1.szName);                            Form1->ListBox1->Items->Add(mxc1.dwControlID);
                        }
                }            for (int j = 0;j < mxl1.cConnections;j  )
                {
                mxl2.dwSource = j;                    mxl2.dwDestination = mxl1.dwDestination;                    mxl2.cbStruct = sizeof(MIXERLINE);                    if (mixerGetLineInfo(reinterpret_cast(MM_HMIXER),&mxl2,MIXER_GETLINEINFOF_SOURCE) != MMSYSERR_NOERROR)
                        {
                        ShowMessage("MIXER_GETLINEINFOF_SOURCE Error");                            return;
                        }                    mxlc2.cbStruct = sizeof(MIXERLINECONTROLS);                    mxlc2.dwLineID = mxl2.dwLineID;                    mxlc2.cControls = mxl2.cControls;                    mxlc2.cbmxctrl = sizeof(MIXERCONTROL);                    mxlc2.pamxctrl = &mxc2;                    if (mixerGetLineControls(reinterpret_cast(MM_HMIXER),&mxlc2,MIXER_GETLINECONTROLSF_ALL) != MMSYSERR_NOERROR)
                        {
                        ShowMessage("MIXER_GETLINECONTROLSF_ALL Error");                            return;
                        }                    for (int k = 0;k < mxlc2.cControls - 1;k  )
                        {
                        if (mxlc2.dwControlType == MIXERCONTROL_CONTROLTYPE_VOLUME)
                                {                                    }
                        }                    Form1->ListBox1->Items->Add(mxl2.szName);                    Form1->ListBox1->Items->Add(mxc2.dwControlID);
                }    
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::UnInitial(void)
{
if(MM_HMIXER != NULL)
        {
        if(mixerClose(MM_HMIXER) == MMSYSERR_NOERROR)
                {
                MM_HMIXER = NULL;
                }
        else
                {
                ShowMessage("Close MM_HMIXER Error");
                }
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::SetMasterVolumeValue(double ValueL,double ValueR,long ID)
{
if (MM_HMIXER == NULL)
        {
        ShowMessage("SetMasterVolumeValue Error_1");            return;
        }    MIXERCONTROLDETAILS_UNSIGNED mxcdVolume[2] = {ValueL,ValueR};    MIXERCONTROLDETAILS mxcd;    mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);    mxcd.dwControlID = ID;    if (ID == 6 || ID == 11)
        {
        mxcd.cChannels = 1;            ValueR = ValueL;
        }
else
        {
        mxcd.cChannels = 2;
        }    mxcd.cMultipleItems = 0;    mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);    mxcd.paDetails = &mxcdVolume;    if (mixerSetControlDetails(reinterpret_cast(MM_HMIXER),&mxcd,MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR)
        {
        ShowMessage("SetMasterVolumeValue Error_2");            return;
        }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::GetMasterVolumeValue(long ID,int *VolumeValue)
{
MIXERCONTROLDETAILS mxcd;    MIXERCONTROLDETAILS_UNSIGNED mxcdVolume[2];    ZeroMemory(mxcdVolume,sizeof(mxcdVolume));    if (MM_HMIXER == NULL)
        {
        ShowMessage("GetMasterVolumeValue Error_1");            return;
        }    mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);    mxcd.dwControlID = ID;    if (ID == 6 || ID == 11)
        {
        mxcd.cChannels = 1;
        }
else
        {
        mxcd.cChannels = 2;
        }    mxcd.cMultipleItems = 0;    mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);    mxcd.paDetails = &mxcdVolume;    if (mixerGetControlDetails(reinterpret_cast(MM_HMIXER),&mxcd,MIXER_GETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR)
        {                                                               
        ShowMessage("GetMasterVolumeValue Error_2");            return;
        }    VolumeValue[0] = mxcdVolume[0].dwValue;    VolumeValue[1] = mxcdVolume[1].dwValue;    if (ID == 6 || ID == 11)
        {
        VolumeValue[1] = VolumeValue[0];
        }
}
//---------------------------------------------------------------------------                                                                        
請問一下 為何我用這一段程式所獲取的Mc Volume的dwControlID為10,當我直接把設定值哪來用時卻無法使用. 之後我把設定值改為11的話就可以使用了 而其餘所獲的的dwControlID都可以直接拿來使用
for (int j = 0;j < mxl1.cConnections;j  )
                {
                mxl2.dwSource = j;                    mxl2.dwDestination = mxl1.dwDestination;                    mxl2.cbStruct = sizeof(MIXERLINE);                    if (mixerGetLineInfo(reinterpret_cast(MM_HMIXER),&mxl2,MIXER_GETLINEINFOF_SOURCE) != MMSYSERR_NOERROR)
                        {
                        ShowMessage("MIXER_GETLINEINFOF_SOURCE Error");                            return;
                        }                    mxlc2.cbStruct = sizeof(MIXERLINECONTROLS);                    mxlc2.dwLineID = mxl2.dwLineID;                    mxlc2.cControls = mxl2.cControls;                    mxlc2.cbmxctrl = sizeof(MIXERCONTROL);                    mxlc2.pamxctrl = &mxc2;                    if (mixerGetLineControls(reinterpret_cast(MM_HMIXER),&mxlc2,MIXER_GETLINECONTROLSF_ALL) != MMSYSERR_NOERROR)
                        {
                        ShowMessage("MIXER_GETLINECONTROLSF_ALL Error");                            return;
                        }                    for (int k = 0;k < mxlc2.cControls - 1;k  )
                        {
                        if (mxlc2.dwControlType == MIXERCONTROL_CONTROLTYPE_VOLUME)
                                {                                    }
                        }                    Form1->ListBox1->Items->Add(mxl2.szName);                    Form1->ListBox1->Items->Add(mxc2.dwControlID);
                }    
 
系統時間:2024-05-10 11:10:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!