非常齊全的MCI命令簡(jiǎn)介_第1頁
非常齊全的MCI命令簡(jiǎn)介_第2頁
非常齊全的MCI命令簡(jiǎn)介_第3頁
非常齊全的MCI命令簡(jiǎn)介_第4頁
非常齊全的MCI命令簡(jiǎn)介_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

注:下面是我編程時(shí)看資料(主要是MSDN)的隨手筆記,不全,隨著日后的學(xué)習(xí)再進(jìn)一步擴(kuò)充吧。只是為了日后查找方便,可以很快回想起各種命令的用法。俗話說好記性不如爛筆頭嘛:)MciSendCommand命令格式:MCIERRORmciSendCommand(MCIDEVICEIDIDDevice,/接受命令的設(shè)備ID,由MCI_OPEN命令的wDevicelD變量返回UINTuMsg, //MiC令DWORDfdwCommand, //flag列表區(qū),一般都與DWORDdwParam中的相關(guān)成員配合使用(DWORD)相應(yīng)MCI命令的參數(shù)區(qū)類型)dwParam);返回的值:返回0表示成功,否則為出錯(cuò)代碼.MCI命令列表:MCI_BREAK設(shè)置中斷鍵,缺省是”CTRL+BREAK"。下面是MCI_BREAK命令第四個(gè)參數(shù)dwParam的結(jié)構(gòu):(其它各命令用相同格式說明)typedefstruct{DWORDdwCallback;〃低字指定一個(gè)窗口句柄,與MCI_NOTIFY有關(guān)(處理命令完成后的相應(yīng)動(dòng)作)intnVirtKey;〃鍵碼 (相關(guān)flag:MCI_BREAK_KEY)HWNDhwndBreak;〃窗口句柄(相關(guān)flag:MCI_BREAK_HWND)}MCI_BREAK_PARMS;flags:MCIBREAKOFF關(guān)閉中斷鍵MCI_CAPTURE抓取當(dāng)前幀并存入指定文件,僅用于數(shù)字視頻typedefstruct{DWORDdwCallback;LPSTRlpstrFileName;//存入指定文件的全路徑RECTrc; 〃抓取的矩形區(qū)域}MCI_DGV_CAPTURE_PARMS;[注]typedefstruct_RECT{LONGleft;LONGtop;LONGright;LONGbottom;}RECT;MCI_CLOSE關(guān)閉設(shè)備用于所有設(shè)備,沒有什么要特別說明的typedefstruct{DWORDdwCallback;}MCIGENERICPARMS;

MCICONFIGURE彈出配置對(duì)話框,僅用于數(shù)字視頻(Digital-video)MCI_COPY拷貝數(shù)據(jù)至剪貼板僅用于數(shù)字視頻typedefstruct{DWORDdwCallback;DWORDdwFrom;〃復(fù)制起點(diǎn)DWORDdwTo;〃復(fù)制終點(diǎn)RECTrc; //(相關(guān)flag:MCI_DGV_COPY_AT)DWORDdwAudioStream;DWORDdwVideoStream;}MCIDGVCOPYPARMS;MCI_FROMMCI_TOMCI_DGV_COPY_AT不使用此flag,將復(fù)制完整幀MCI_DGV_COPY_AUDIO_STREAM(缺省是這兩個(gè)STRAM都不指定)MCI_DGV_COPY_VIDEO_STREAM(但如果你使用一般只用其中一個(gè))MCI_CUE延時(shí)播放或錄音用于Digital-video,VCR,和waveform-audioMCI_CUT刪除數(shù)據(jù),并將數(shù)據(jù)復(fù)制到剪貼板 用于Digital-videoMCI_DELETE將文件中的數(shù)據(jù)刪除 用于Digital-video和waveform-audioMCI_ESCAPE直接向設(shè)備發(fā)送一個(gè)串 僅用于激光視頻MCI_FREEZE將顯示定格 Digital-video,video-overlay,andVCRdevicesMCI_GETDEVCAPS獲取設(shè)備信息用于所有設(shè)備typedefstruct{DWORDdwCallback;DWORDdwReturn;DWORDdwItem;}MCIGETDEVCAPSPARMS;MCI_INDEX當(dāng)前屏幕顯示與否,僅用于VCR設(shè)備MCI_INFO獲取設(shè)備字符串信息typedefstruct{DWORDdwCallback;LPSTRlpstrReturn;〃根據(jù)相應(yīng)的flags返回信息串DWORDdwRetSize;〃返回信息串大小(bytes)}MCIINFOPARMS;MCI_INFO_PRODUCT設(shè)備的硬件信息用于所有設(shè)備用于cdaudio的flags:MCI_INFO_MEDIA_IDENTITYMCI_INFO_MEDIA_UPC產(chǎn)品通用代碼(UPC),不一定使用于所有CD。MCI_LIST獲取輸入設(shè)備數(shù)量,支持?jǐn)?shù)字視頻和VCR設(shè)備MCI_LOAD裝入一個(gè)文件Digital-videoandvideo-overlayMCI_MARK取消或做一個(gè)記號(hào),供MCISEEK快速定位VCRdevicesMCI_MONITOR為數(shù)字視頻指定報(bào)告設(shè)備typedefstruct{DWORDdwCallback;DWORDdwSource;DWORDdwMethod;

}MCIDGVMONITORPARMS;MCI_OPEN打開設(shè)備Alldevices(詳見后面的介紹)typedefstruct{DWORDdwCallback;MCIDEVICEIDwDeviceID;LPCSTRIpstrDeviceType;LPCSTRIpstrElementName;LPCSTRlpstrAlias;}MCIOPENPARMS;MCIPASTE粘帖數(shù)據(jù)僅用于數(shù)字視頻MCI_PAUSE暫停當(dāng)前動(dòng)作typedefstruct{DWORDdwCallback;}MCI_GENERIC_PARMS;MCI_PLAY播放MCI_PUT設(shè)置源、目的和邊框矩形Digital-videoandvideo-overlayMCI_QUALITY定義設(shè)備缺省質(zhì)里typedefstruct{DWORDdwCallback;DWORDdwItem;LPSTRlpstrName;DWORDlpstrAlgorithm;DWORDdwHandle;}MCIDGVQUALITYPARMS;MCI_RECORD開始錄制VCRandwaveform-audio(詳見后面的介紹)typedefstruct{DWORDdwCallback;DWORDdwFrom;DWORDdwTo;}MCIRECORDPARMS;MCIRESERVE為后面的記錄分配相對(duì)連續(xù)的硬盤空間Digital-videoMCI_RESTORE拷貝一個(gè)bmp文件至幀緩沖Digital-videotypedefstruct{DWORDdwCallback;DWORDlpstrFileName;RECTrc;}MCIDGVRESTOREPARMS;MCI_RESUME使一個(gè)暫停設(shè)備重新啟動(dòng)Digital-video,VCR,andwaveform-audioMCI_SAVE保存數(shù)據(jù)Video-overlayandwaveform-audio(詳見后面的介紹)MCI_SEEK更改媒體位置(詳見后面的介紹)

typedefstruct{DWORDdwCallback;DWORDdwTo;}MCISEEKPARMS;MCI_SET設(shè)置設(shè)備信息(詳見后面的介紹)typedefstruct{DWORDdwCallback;DWORDdwTimeFormat;DWORDdwAudio;}MCI_SET_PARMS;MCI_SETAUDIO設(shè)置視頻設(shè)備中的audio播放和捕捉的相關(guān)參數(shù)用于Digital-videoandVCRMCI_SETTIMECODE啟用或取消VCR設(shè)備的時(shí)間碼用于VCRMCI_SETTUNER設(shè)置VCR設(shè)備頻道MCI_SETVIDEO設(shè)置video參數(shù)用于Digital-videoandVCRMCI_SIGNAL在工作區(qū)上設(shè)置指定空間用于Digital-video,typedefstruct{DWORDdwCallback;DWORDdwPosition;//Positiontobemarked.DWORDdwPeriod;//Intervalofthepositionmarks.DWORDdwUserParm;//Uservalueassociatedwithsignals.}MCIDGVSIGNALPARMS;MCI_STATUS獲取設(shè)備當(dāng)前的相關(guān)狀態(tài)信息用于Alldevices(詳見后面的介紹)ttypedefstruct{DWORDdwCallback;DWORDdwReturn;DWORDdwItem;DWORDdwTrack;}MCI_STATUS_PARMS;MCI_STEP使播放設(shè)備跳幀Digital-video,VCR,andCAV-formatvideodiscMCI_STOP停止播放和錄音CDaudio,digital-video,MIDIsequencer,videodisc,VCR,andwaveform-audioMCI_SYSINFO返回MCI設(shè)備信息typedefstruct{DWORDdwCallback;LPSTRlpstrReturn;DWORDdwRetSize;DWORDdwNumber;UINTwDeviceType;}MCISYSINFOPARMS;MCI_UNDO取消操作如新近操作MCICUT,MCICOPY,MCIDELETE,or

MCIPASTE等用于Digital-videodevicesMCI_UNFREEZE讓使用MCI_UNFREEZE的視頻緩沖區(qū)恢復(fù)運(yùn)動(dòng)Digital-video,VCR,andvideo-overlayMCI_UPDATE更新顯示區(qū)域Digital-videodevicesMCI_WHERE獲取設(shè)備裁減矩形Digital-video,andvideo-overlaydevicesMCI_WINDOW指定圖形設(shè)備窗口和窗口特性用于Digital-video,andvideo-overlaydevicesFordigital-videodevices:typedefstruct{DWORDdwCallback;WORDhWnd;WORDnCmdShow;LPSTRlpstrText;}MCI_DGV_WINDOW_PARMS;其中比較常用的指令有MCI_OPEN、MCI_CLOSE、MCI_PLAY、MCI_STOP、MCI_PAUSE、MCI_STATUS等等。 MciSendCommand命令格式:發(fā)送命令消息到指定的MCIdevice.MCIERRORmciSendCommand(MCIDEVICEIDIDDevice,/接受命令的設(shè)備ID,由MCI_OPEN命令的wDevicelD變量返回UINTuMsg, //MiC令DWORDfdwCommand, //flag列表區(qū),般都與DWORDdwParam中的相關(guān)成員配合使用(DWORD)相應(yīng)MCI命令的參數(shù)區(qū)類型)dwParam);返回的值:返回0表示成功,否則為出錯(cuò)代碼.參數(shù):IDDeviceMCIdevice的標(biāo)識(shí)符。(此參數(shù)不被MCI_OPEN命令消息所使用,被置為null)此參數(shù)IDDevice指定了設(shè)備標(biāo)識(shí),這個(gè)標(biāo)識(shí)會(huì)在程序員使用MCI_OPEN打開MCI設(shè)備時(shí)由系統(tǒng)提供,保存在MCI_OPEN_PARMS結(jié)構(gòu)的wDeviceID變量中。uMsg命令消息(Commandmessage).第二個(gè)參數(shù)指定將如何控制設(shè)備,詳細(xì)請(qǐng)查閱上面“MCI指令”列表

fdwCommandFlagsforthecommandmessage.第三個(gè)參數(shù)為訪問標(biāo)識(shí)(flags)在后面有詳細(xì)說明。dwParam第四個(gè)參數(shù)一般是一個(gè)數(shù)據(jù)結(jié)構(gòu),程序在使用mciSendCommand命令訪問MCI時(shí)需要的或者是返回的一些信息。返回的值:返回0表示成功,否則為出錯(cuò)代碼.mciSendCommand返回的值是一個(gè)雙字,其中低字中包含出錯(cuò)代碼。如果是出錯(cuò)是由可識(shí)別的設(shè)備引起的,那么在高字中返回該設(shè)備的標(biāo)識(shí)符ID(thedriveridentifier),否則高字中為零(0).可以通過查看MCIERRReturnValues相關(guān)內(nèi)容判斷出錯(cuò)原因。*使用MCLOPEN得到當(dāng)前打開設(shè)備的ID(保存在MCI_OPEN_PARMS結(jié)構(gòu)的wDevicelD變量中).環(huán)境要求:WindowsNT:V3.1以上.Windows:Windows95以上.WindowsCE:不支持.頭文件包含:mmsystem.h.函數(shù)庫:winmm.lib.支持Unicode(雙字節(jié)編碼)和ANSI編碼.*現(xiàn)在我們通過MCI_OPEN命令的使用來熟悉mciSendCommand命令。——MCI_OPENMCI_OPEN命令可以被所有設(shè)備識(shí)別。它可以用來初始化一個(gè)設(shè)備或者是一個(gè)文件。命令格式:MCIERRORmciSendCommand(MCIDEVICEIDwDevicelD,MCI_OPEN,DWORDdwFlags,(DWORD)(LPMCI_OPEN_PARMS)lpOpen);『例』/////////////////////////////////////////////////////////////////////////**函數(shù)名稱:MCI_Open*函數(shù)介紹:用mci命令打開文件*輸入?yún)?shù):CStringstrPath,文件的路徑*輸出參數(shù):無

*返回值:mci命令的錯(cuò)誤信息*/DWORDMCIMP3::MCIOpen(constCString&strPath){MCI_OPEN_PARMSmciOP;DWORDdwReturn;ASSERT(m_wID==NULL);//m_wID保存將打開設(shè)備的ID//由mci判斷文件類型mciOP.lpstrDeviceType=NULL;mciOP.lpstrElementName=strPath;dwReturn=mciSendCommand(NULL,//定設(shè)備標(biāo)識(shí),MCI_OPEN此處為NULL,成功OPEN后,標(biāo)識(shí)放入MCI_OPEN_PARMS結(jié)構(gòu)的wDeviceID變量中MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT|MCI_OPEN_SHAREABLE,(DWORD)(LPVOID)&mciOP);if(dwReturn==0)//成功打開文件,將對(duì)應(yīng)的設(shè)備ID送m_wID以供其他命令引用,m_wID=mciOP.wDeviceID;elsem_wID=NULL;returndwReturn;}上例說明: MCI_OPEN_PARMS(對(duì)應(yīng)MCI_OPEN命令格式中的第4個(gè)參數(shù))在這個(gè)結(jié)構(gòu)中,我們給相應(yīng)的成員變量賦值,為使用MCI_OPEN做好準(zhǔn)備;女口:mciOP.lpstrDeviceType=NULL;〃由mci判斷文件類型當(dāng)我們給MCI_OPEN_PARMS中某些成員賦值,并同時(shí)在fdwCommand參數(shù)區(qū)指定了相應(yīng)的標(biāo)志(flags),那么該成員所賦值在此次mciSendCommand命令中生效。例如上例:fdwCommand參數(shù) 對(duì)應(yīng)引用MCI_OPEN_PARMS的成員MCI_OPEN_ELEMENTmciOP.lpstrElementName=strPath待打開的文件MCI_OPEN_PARMS結(jié)構(gòu):typedefstruct{DWORDdwCallback;MCIDEVICEIDwDeviceID;LPCSTRlpstrDeviceType;LPCSTRlpstrElementName;LPCSTRlpstrAlias;}MCI_OPEN_PARMS;

[注]對(duì)于一些擴(kuò)展的命令設(shè)置[我們可以通過程序中fdwCommand參數(shù)區(qū)指定的相應(yīng)標(biāo)志(flags)明白它是來控制什么類型的設(shè)備,從而做出正確的操作動(dòng)作系統(tǒng)會(huì)用設(shè)備特殊的“數(shù)據(jù)結(jié)構(gòu)”來代替上面這個(gè)常用的結(jié)構(gòu)。例如:forwaveform-audiodevices:typedefstruet{DWORDdwCallbaek;MCIDEVICEIDwDeviceID;LPCSTRlpstrDeviceType;LPCSTRlpstrElementName;LPCSTRlpstrAlias;DWORDdwBufferSeconds;}MCI_WAVE_OPEN_PARMS;MCI_OPEN_PARMS結(jié)構(gòu)成員說明:dwCallback低位字為MCI_NOTIFYflag指定一個(gè)窗口句柄.wDeviceID為成功打開的文件返回設(shè)備標(biāo)識(shí)符.(上例://MCI_OPEN命令中的這個(gè)參數(shù)(第一個(gè)參數(shù))一定為NULL,成功OPEN后,標(biāo)識(shí)放入MCI_OPEN_PARMS結(jié)構(gòu)的wDeviceID變量mciOP.wDeviceID中)IpstrDeviceType設(shè)備類型的名字或常量標(biāo)識(shí)?(設(shè)備名可以從注冊(cè)表或者SYSTEM.INI文件中獲得)MCI的設(shè)備類型有:設(shè)備描述描述字符串說明MCI_ALL_DEVICE_ID所有設(shè)備MCI_DEVTYPE_ANIMATIONAnimation動(dòng)畫設(shè)備MCI_DEVTYPE_CD_AUDIOCdaudioCD^音頻MCI_DEVTYPE_DATDat數(shù)

字^音頻MCI_DEVTYPE_DIGITAL_VIDEODigitalvideo數(shù)字視頻MCI_DEVTYPE_OTHEROther未定義設(shè)備MCI_DEVTYPE_OVERLAYOverlay重疊視頻MCI_DEVTYPE_SCANNERScanner掃描儀MCI_DEVTYPE_SEQUENCERSequencerMIDI序列器MCI_DEVTYPE_VCRVcr合式錄像機(jī)MCI_DEVTYPE_VIDEODISCVideodisc激光視盤MCI_DEVTYPE_WAVEFORM_AUDIOWaveaudioWave^音頻對(duì)于未在上面定義的MCI設(shè)備,用戶可查看system.ini文件中[mci]部分,例如:[mci]cdaudio=mcicda.drvsequencer=mciseq.drvwaveaudio=mciwave.drvavivideo=mciavi.drvvideodisc=mcipionr.drvvcr=mcivisca.drvActiveMovie=mciqtz.drvQTWVideo=mciqtw.drvMPEGVideo=C:\PROGRA?1\XING\XINGMP?l\xmdrv95.dll其中最后兩句分別指明了Apple的QuickTime設(shè)備,設(shè)備名為"QTWVidio”、MPEG影像設(shè)備,設(shè)備名為"MPEGVideo”。在MCI編程中,既可以將設(shè)備描述當(dāng)設(shè)備名,也可以將描述字符串當(dāng)設(shè)備名,一個(gè)極端偷懶的辦法是程序員不要在程序中指定設(shè)備名,Windows將自動(dòng)根據(jù)文件擴(kuò)展名識(shí)別設(shè)備類型。(如上例:mciOP.lpstrDeviceType=NULL)IpstrElementName設(shè)備元素(通常是打開的文件全路徑).lpstrAlias可選別名. TheWait,Notify兩個(gè)通用的fdwCommand參數(shù)/library/default.asp?url=/library/en-us/multimed/mci_3353.asp在多數(shù)的MCI命令中都會(huì)有fdwCommand參數(shù)區(qū)(如上例MCI_OPEN命令,第三個(gè)參數(shù):”MCI_OPEN_ELEMENT|MCI_WAIT|MCI_OPEN_SHAREABLE”),而且對(duì)于不同的命令有不同的falgs。但有這樣兩個(gè)falg參數(shù),對(duì)于所有mciSendCommand命令都適用:(The"wait"(MCI_WAIT)and"notify"(MCI_NOTIFY)flags) TheWaitFlagMCI命令在執(zhí)行時(shí)一般會(huì)立即返回執(zhí)行結(jié)果,即使有些命令執(zhí)行要花上幾分鐘才能完成。你可以使用"wait"(MCI_WAIT)flag來指定設(shè)備等待,直到請(qǐng)求命令完成再返回到應(yīng)用程序控制。比如:下面使用mciSendString來發(fā)送一個(gè)play命令,執(zhí)行play直到palyback完成后才返回應(yīng)用程序。mciSendString("playmydevicefrom0to100wait",lpszReturnString,lstrlen(lpszReturnString),NULL);注:用戶可以使用abreakkey來終止wait,缺省的breakkey是:CTRL+BREAK.你也可以使用MCI_BREAK命令重新定義這個(gè)功能鍵(MCI_BREAK使用MCI_BREAK_PARMS結(jié)構(gòu))在我們的例子中也使用到了這個(gè)參數(shù),目的是為了在沒有完成OPEN(可能正在打開文件)操作的過程中不會(huì)將控制權(quán)交由應(yīng)用程序,避免“人為”的干擾;實(shí)際上這個(gè)時(shí)間一般持續(xù)的相當(dāng)短暫,以至于你根本無法察覺的到(除非你的設(shè)備或文件有問題?)。 TheNotifyFlagThe"notify"(MCI_NOTIFY)flag指示設(shè)備完成一次操作后(郵寄)post—個(gè)MM_MCINOTIFY信息。我們可以在MM_MCINOTIFY的處理函數(shù)來做一些相應(yīng)的處理工作:是否completedsuccessfully,failed,orwassupersededoraborted等等。 TheTestFlagThe"test"(MCI_TEST)flag測(cè)試設(shè)備此時(shí)是否能執(zhí)行命令.如果可以執(zhí)行,設(shè)備返回一個(gè)無錯(cuò)信息。MCI_TESTflag支持digital-videoandVCRdevices所有命令,但在open(MCI_OPEN)andclose(MCI_CLOSE)中不能使用. MCI_OPENfdwCommand參數(shù)區(qū)中可用的flags對(duì)應(yīng)與不同的設(shè)備有如下分類:*MCI_OPEN通用的flags參數(shù)表(所有設(shè)備均可用):MCI_OPEN_ALIAS對(duì)應(yīng)MCI_OPEN_PARMS結(jié)構(gòu)中的LPCSTRlpstrAlias成員變量,為打開的設(shè)備起個(gè)別名。MCI_OPEN_SHAREABLE將設(shè)備或文件以共享的方式打開。MCI_OPEN_TYPE對(duì)應(yīng)MCI_OPEN_PARMS結(jié)構(gòu)中的LPCSTRlpstrDeviceType成員變量,設(shè)備類型的名字或常量標(biāo)識(shí)?(設(shè)備名可以從注冊(cè)表或者SYSTEM.INI文件中獲得)MCI_OPEN_TYPE_ID和MCI_OPEN_TYPEflag一起使用后,我們可以在MCI_OPEN_PARMS結(jié)構(gòu)中的lpstrDeviceType成員變量的低字中得到一個(gè)標(biāo)準(zhǔn)的MCI設(shè)備的類型ID,同時(shí)在高字中指出該設(shè)備ID此時(shí)在系統(tǒng)里的順序索引號(hào)。MCI_OPEN為compounddevices提供的flags控制參數(shù):MCI_OPEN_ELEMENT對(duì)應(yīng)MCI_OPEN_PARMS結(jié)構(gòu)中的LPCSTRlpstrElementName成員變量,設(shè)備元素(通常是打開的文件全路徑).

MCI_OPEN_ELEMENT_ID和MCI_OPEN_ELEMENTflag一起使用后,我們可以將MCI_OPEN_PARMS結(jié)構(gòu)中的IpstrElementName成員變量看成是一個(gè)doublewordvalue,表示一個(gè)內(nèi)部的設(shè)備。*MCI_OPEN為digitalvideo(數(shù)字視頻)提供的flags控制參數(shù):MCI_DGV_OPEN_NOSTATICMCI_DGV_OPEN_PARENTMCI_DGV_OPEN_WSMCI_DGV_0PEN_16BITMCI_DGV_OPEN_32BITthelpOpenparameterpointstoanMCI_DGV_OPEN_PARMSstructure:typedefstruet{DWORDdwCallbaek;UINTwDevieelD;LPSTRlpstrDevieeType;LPSTRlpstrElementName;LPSTRlpstrAlias;DWORDdwStyle;HWNDhWndParent;}MCI_DGV_OPEN_PARMS;*下面的flags控制參數(shù)用于theoverlaydevicetype(重疊視頻):MCI_OVLY_OPEN_PARENTMCI_OVLY_OPEN_WSthelpOpenparameterpointstoanMCI_OVLY_OPEN_PARMSstructure:typedefstruct{DWORDdwCallback;MCIDEVICEIDwDeviceID;LPCSTRlpstrDeviceType;LPCSTRlpstrElementName;LPCSTRlpstrAlias;DWORDdwStyle;DWORDhWndParent;

}MCI_OVLY_OPEN_PARMS;*下面的flags控制參數(shù)用于thewaveaudiodevicetype:(音頻設(shè)備MCI_DEVTYPE_WAVEFORM_AUDIO)MCI_WAVE_OPEN_BUFFER對(duì)應(yīng)MCI_WAVE_OPEN_PARMS(替代了MCI_OPEN_PARMS)結(jié)構(gòu)中的DWORDdwBufferSeconds成員變量,用來設(shè)置讀寫音頻的數(shù)據(jù)緩沖長(zhǎng)度。forwaveform-audiodevices:typedefstruet{DWORDdwCallbaek;MCIDEVICEIDwDevieelD;LPCSTRlpstrDevieeType;LPCSTRlpstrElementName;LPCSTRlpstrAlias;DWORDdwBufferSeconds;數(shù)據(jù)緩沖的長(zhǎng)度}MCI_WAVE_OPEN_PARMS;小結(jié):通過對(duì)MCI_OPEN細(xì)致分析,我們基本了解了如何利用MciSendCommand命令來正確的控制MCI設(shè)備了;下面我們所要掌握的就是各個(gè)MCI命令的格式及相關(guān)參數(shù)的使用了。在這些MCI命令的使用中,我的經(jīng)驗(yàn)是主要是要掌握每個(gè)命令“參數(shù)表”的數(shù)據(jù)結(jié)構(gòu)(如:MCI_OPEN的MCI_OPEN_PARMS結(jié)構(gòu)中各成員的含義)及fdwCommand參數(shù)區(qū)(如上例MCI_OPEN命令,第三個(gè)參數(shù):”MCI_OPEN_ELEMENT|MCI_WAIT|MCI_OPEN_SHAREABLE”)中各標(biāo)志(falgs)的正確含義。在學(xué)習(xí)的過程中,最好的在線老師就是微軟提供的MSDN.說明的非常詳盡,如果你覺得還是不夠的話,那么你不妨直接到微軟MSDN的網(wǎng)站上去看看吧。有了上面的知識(shí)基礎(chǔ),相信再理解以后的MCI命令不會(huì)有什么大問題的。――MCI_OPEN使用2:為錄音打開一個(gè)空文件(wav文件)BOOLCWaveAudio::Record(void){Close();//為成功打開設(shè)備,錄制前關(guān)閉一次設(shè)備MCI_OPEN_PARMSOpenParms;OpenParms.lpstrDeviceType="waveaudio";OpenParms.lpstrElementName="";if(::mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE|MCI_WAIT,

(DWORD)(LPVOID)&0penParms))returnFALSE;/打開設(shè)備失敗m_wDeviceID=OpenParms.wDeviceID;//打開設(shè)備成功,保存設(shè)備IDMCI_RECORD_PARMSRecordParms;if(mciSendCommand(m_wDeviceID,MCI_RECORD,NULL,(DWORD)(LPVOID)&RecordParms))returnFALSE;//開始錄音,設(shè)置程序相應(yīng)標(biāo)志m_bRecording=TRUE;m_bOpened=TRUE;returnTRUE;}——MCI_SAVEMCI_SAVE命令保存當(dāng)前文件。在保存文件操作之前,設(shè)備可以修改當(dāng)前打開的文件,但不會(huì)影響到原來保存在磁盤上的原文件。Video-overlay(覆蓋視頻)和waveform-audio設(shè)備可以正確識(shí)別該命令。[例]BOOLCWaveAudio::Save(CStringFilename){if(!m_bRecording)returnFALSE;Stop();MCI_SAVE_PARMSSaveParms;SaveParms.lpfilename=(LPCSTR)Filename;if(mciSendCommand(m_wDeviceID,MCI_SAVE,MCI_SAVE_FILE|MCI_WAIT,(DWORD)(LPVOID)&SaveParms))returnFALSE;m_bRecording=FALSE;Load(Filename);returnTRUE;}MCIERRORmciSendCommand(MCIDEVICEIDwDeviceID,MCI_SAVE,

DWORDdwFlags,(DWORD)(LPMCI_SAVE_PARMS)lpSave);lpSave:typedefstruet{DWORD_PTRdwCallbaek;LPCSTRlpfilename;}MCI_SAVE_PARMS;dwFlags:MCI_SAVE_FILE 應(yīng)用于所有設(shè)備。lpSave結(jié)構(gòu)中l(wèi)pfilename成員指出存盤目標(biāo)文件名。——MCI_PLAY不用多說它是用來做什么的。CDaudio,digital-video,MIDIsequencer,videodisc,VCR,waveform-audiodevices均可識(shí)別該命令.『例』/////////////////////////////////////////////////////////////////////////**函數(shù)名稱:MCIPlay*函數(shù)介紹:用mci命令播放已打開(當(dāng)前)的MP3文件*輸入?yún)?shù):無*輸出參數(shù):無*返回值:mci命令的錯(cuò)誤信息*/DWORDMCIMP3::MCIPlay(){MCI_PLAY_PARMSmciPP;//mciPP.dwCallback=(DWORD)GetSafeHwnd();returnmciSendCommand(m_wID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPP);}格式:MCIERRORmciSendCommand(MCIDEVICEIDwDeviceID,MCI_PLAY,DWORDdwFlags,(DWORD)(LPMCI_PLAY_PARMS)lpPlay);

參數(shù):wDevicelD接受播放的MCI設(shè)備的ID,在MCI_OPEN成功執(zhí)行后得到該設(shè)備的ID.dwFlagsMCI_NOTIFY,MCI_WAIT,digital-video和VCR設(shè)備還可用MCI_TEST.IpPlayMCI_PLAY_PARMS結(jié)構(gòu)的地址.(擴(kuò)展的命令中可能用設(shè)備指定的結(jié)構(gòu)所代替)typedefstruet{DWORDdwCallbaek;DWORDdwFrom;DWORDdwTo;}MCI_PLAY_PARMS;LPMCI_PLAY_PARMS成員:dwCallback低位字為MCI_NOTIFYflag指定一個(gè)窗口句柄.dwFrom播放起始點(diǎn).dwTo播放結(jié)束點(diǎn).備注:如果使用了成員函數(shù),必須設(shè)置相應(yīng)的fdwCommand參數(shù)區(qū)的標(biāo)志(flags).兩個(gè)常用的flags是:MCI_FROM:讓MCI_PLAY使用上面結(jié)構(gòu)中dwFrom??梢允褂肕CI_SET命令的MCI_SET_TIME_FORMATflag設(shè)定時(shí)間格式。缺省播放會(huì)從當(dāng)前位置開始。MCI_TO:用法和MCI_FROM相同,播放結(jié)束于dwTo。缺省停止位置是媒體結(jié)束。當(dāng)然還有對(duì)視頻等設(shè)備起作用的flags,這里不再詳述。返回:0表示成功。——MCIRECORD

從當(dāng)前位置開始或在一個(gè)指定區(qū)段中錄音。Video-overlay(覆蓋視頻)和waveform-audio設(shè)備可以正確識(shí)別該命令。[例]見MCI_OPEN使用2:為錄音打開一個(gè)空文件(wav文件)MCIERRORmciSendCommand(MCIDEVICEIDwDevicelD,MCI_RECORD,DWORDdwFlags,(DWORD)(LPMCI_RECORD_PARMS)lpRecord);lpRecord:typedefstruet{DWORD_PTRdwCallbaek;DWORDdwFrom;DWORDdwTo;}MCI_RECORD_PARMS;dwFrom,dwTo區(qū)段起止位置(必須和dwFlags中的MCI_FROM、MCI_TO配合使用)dwFlags:MCI_FROMIMCI_TO使lpRecord中的dwFrom,dwTo起作用。如果沒有使用這兩個(gè)flags,MCI_RECORD缺省的起始錄音位置是當(dāng)前位置;缺省的結(jié)束位置:你啥時(shí)候羅嗦完就算結(jié)束了:)使用的時(shí)間(或幀)長(zhǎng)度格式由MCI_SET命令的MCI_SET_TIME_FORMAT標(biāo)志(flag)來設(shè)定。MCI_RECORD_INSERT最新的錄音會(huì)被插入或粘貼到當(dāng)前的wave文件中。這是MCLRECORD命令缺省設(shè)置,但有些設(shè)備可能不支持此flag.MCI_RECORD_OVERWRITE最新錄音將覆蓋現(xiàn)存打開的文件。MCIWAVE.DRV設(shè)備返回MCIERR_UNSUPPORTED_FUNCTION響應(yīng)這個(gè)flag.支持digitalvideo設(shè)備的flags這里不做介紹?!狹CI_SET設(shè)置設(shè)備信息(設(shè)置時(shí)間格式及播放速度等)。CDaudio,digital-video,MIDIsequencer,VCR,videodisc,video-overlay,和waveform-audio設(shè)備可正確識(shí)別該命令。

[例]設(shè)置時(shí)間格式及播放速度MCI_SET_PARMSSetParms;SetParms.dwTimeFormat=MCI_FORMAT_MILLISECONDS;//設(shè)置時(shí)間單位為毫秒mciSendCommand(m_wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,(DWORD)(LPVOID)&SetParms)MCI_SEQ_SET_TEMPO設(shè)置播放速度,PQRN類型,此值為節(jié)拍/分,SMPTE類型,此值為禎/秒MCIERRORmciSendCommand(MCIDEVICEIDwDeviceID,MCI_SET,DWORDdwFlags,(DWORD)(LPMCI_SET_PARMS)lpSet);IpSet:typedefstruet{DWORDdwCallbaek;DWORDdwTimeFormat;DWORDdwAudio;}MCI_SET_PARMS;dwTimeFormat設(shè)置時(shí)間格式(相關(guān)flag:MCI_SET_TIME_FORMAT)時(shí)間格式常量:MCI_FORMAT_BYTESwaveaudio類型文件)MCI_FORMAT_MILLISECONDSMCI_FORMAT_MSFMCI_FORMAT_BYTESwaveaudio類型文件)MCI_FORMAT_MILLISECONDSMCI_FORMAT_MSFMCI_FORMAT_SAMPLESMCI_FORMAT_SMPTE_24MCI_FORMAT_SMPTE_25MCI_FORMAT_SMPTE_3OMCI_FORMAT_SMPTE_3ODROPMCI_FORMAT_TMSFMCI_SEQ_FORMAT_SONGPTRdwAudio音頻輸出聲道編號(hào).(相關(guān)flag:設(shè)置時(shí)間單位為毫秒(分/秒/幀)Minute/seeond/frame米樣SamplesSMPTE電影與電視工程師學(xué)會(huì)[美]),24幀SMPTE,2幀SMPTE,3幀SMPTE,30framedropTraek/minute/seeond/frameMIDIsongpointerMCI_SET_AUDIO)備注:MCISETPARMS成員賦值要必須要使用相應(yīng)的dwFlags.對(duì)于waveform-audio設(shè)備,IpSet指針將指向MCI_WAVE_SET_PARMS結(jié)構(gòu):

typedefstruet{DWORDdwCallbaek;DWORDdwTimeFormat;DWORDdwAudio;UINTwInput;UINTwOutput;WORDwFormatTag;WORDwReserved2;WORDnChannels;WORDwReserved3;DWORDnSamplesPerSec;DWORDnAvgBytesPerSec;WORDnBlockAlign;WORDwReserved4;WORDwBitsPerSample;WORDwReserved5;}MCI_WAVE_SET_PARMS;下面waveform-audio的屬性要在錄音(錄制)前設(shè)定好,錄音開始后將不能再被改變:MCI_WAVE_SET_AVGBYTESPERSECMCI_WAVE_SET_BITSPERSAMPLEMCI_WAVE_SET_BLOCKALIGNMCI_WAVE_SET_CHANNELSMCI_WAVE_SET_FORMATTAGMCI_WAVE_SET_SAMPLESPERSECdwFlags:對(duì)所有設(shè)備作用的flags:MCI_SET_AUDIO使dwAudio成員起作用。該flag必須配合MCI_SET_ON或MCI_SET_OFF使用。決定音頻輸出聲道編號(hào)的flags有:MCI_SET_AUDIO_ALL 所有聲道MCI_SET_AUDIO_LEFT 左聲道MCI_SET_AUDIO_RIGHT 右聲道MCI_SET_DOOR_CLOSED關(guān)閉設(shè)備面版(一般用在CD設(shè)備)MCI_SET_DOOR_OPENMCI_SET_OFF關(guān)閉扌旨定videooraudiochannel.MCI_SET_ONMCI_SET_TIME_FORMATMCI_FORMAT_BYTES bythewaveaudiodevicetype.MCI_FORMAT_FRAMESbythedigitalvideo,vcr,andvideodiscdevicetypes.

MCI_FORMAT_HMS 格式:時(shí)/分/秒bytheverandvideodiscdevicetypes.MCI_FORMAT_MILLISECONDSbyalldevicetypes.MCI_FORMAT_MSFbythecdaudioandvcrdevicetypes.MCI_FORMAT_SAMPLES 轉(zhuǎn)換時(shí)間格式為samples,bythewaveaudiodevicetype.MCI_FORMAT_SMPTE_24,MCI_FORMAT_SMPTE_25,andMCI_FORMAT_SMPTE_3Obythesequencerandvcrdevicetypes.MCI_FORMAT_SMPTE_3ODROP bythesequencerandvcrdevicetypes.MCI_FORMAT_TMSF bythecdaudioandvcrdevicetypes.MCI_SET_VIDEO與MCI_SET_ONorMCI_SET_OFF合用,設(shè)置視頻信號(hào)(videosignal)開關(guān)狀態(tài).設(shè)備無視頻功能返回MCIERR_UNSUPPORTED_FUNCTION.--MCLSTATUS查詢?cè)O(shè)備當(dāng)前的相關(guān)狀態(tài)信息。所有設(shè)備都能爭(zhēng)取識(shí)別該命令。返回的信息內(nèi)容在IpStatus結(jié)構(gòu)dwReturn成員變量中。[例]MCI_STATUS_PARMSmciSP;mciSP.dwItem=MCI_STATUS_MODE;DWORDdwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciSP);if(dwReturn==(DWORD)O)if(mciSP.dwReturn==MCI_MODE_OPEN||mciSP.dwReturn==MCI_MODE_PLAY||mciSP.dwReturn==MCI_MODE_PAUSE||mciSP.dwReturn==MCI_MODE_STOP||mciSP.dwReturn==MCI_MODE_SEEK)ret

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論