- MM_HIMETRIC qui định đơn vị đo
Mỗi lệnh điều khiển tương ứng với 1 message khác nhau
message khác nhau
Message được gởi đến thiết bị thông qua hàm mciSendCommand <Winmm.lib> hàm mciSendCommand <Winmm.lib>
Thư viện MCI - MCI Command Message…(tt) MCIERROR mciSendCommand(MCIDEVICEID IDDevice,
UINT uMsg,
DWORD fdwCommand, DWORD dwParam);
IDDevice:ID của thiết bị cần điều khiển, thông số này không dùng cho thông điệp MCI_OPEN, giá trị này sẽ có được sau khi thực hiện MCI_OPEN
uMsg: Thông điệp hay chỉ thịđược gởi tới thiết bị, nhằm điều khiển theo những mục đích cụ thể, Đó là những thông điệp
được biểu diễn dưới dạng những hằng sốđược Windows
định nghĩa trước MCI_xxx
fdwCommand: là giá trịđược xem như những tham số bổ
sung tương ứng với từng thông điệp.
dwParam: con trỏ chỉ tới cấu trúc lưu thông tin ứng với từng thông điệp do mỗi thông điệp có những đặc thù riêng. Ví dụ ứng với thông điệp MCI_PLAY, chúng ta có cấu trúc tương
Summer 2004
C4W - MultiMedia - Nguyen Tri Tuan - DH.KHTN Tp.HCM 27 Thư viện MCI - MCI Command Message…(tt)
VD1. Mở thiết bị
MCI_OPEN_PARMS mciOpenParams;
mciOpenParams.lpstrDeviceType = "waveaudio";
mciOpenParams.lpstrElementName = “C:/MySound.wav”; DWORD mciError = mciSendCommand(NULL, MCI_OPEN,
MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD)(LPVOID) &mciOpenParams); (DWORD)(LPVOID) &mciOpenParams); mciDevID = mciOpenParams.wDeviceID;
VD2. Play
MCI_PLAY_PARMS mciPlayParms;
mciPlayParams.dwCallback = (unsigned long) m_hWnd; DWORD mciError = mciSendCommand(mciDevID, MCI_PLAY,
MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParms);
Thư viện MCI - MCI Command Message…(tt)
VD3. Ngừng play DWORD mciError =
mciSendCommand(mciDevID, MCI_STOP, 0, 0);
VD4. Đóng thiết bị
DWORD mciError =
Summer 2004
C4W - MultiMedia - Nguyen Tri Tuan - DH.KHTN Tp.HCM 29 Thư viện MCI - MCI Command Message…(tt)
Ưu điểm
Sử dụng message Æquen thuộc với các lập trình Windows
Lệnh có cú pháp rõ ràng, dễnhớ
Xử lý được file có tên chứa khoảng trắng
Khuyết điểm
Cần nắm rõ các cấu trúc dữ liệu tương ứng với mỗi thông điệp
Thư viện MCI - Xử lý lỗi
mciSendStringvà mciSendCommandcó giá trị trả về là
MCIERROR
0: lệnh được thực hiện thành công;
Khác 0: là mã lỗi ở dạng số
MCI cung cấp cho chúng ta hàmmciGetErrorStringđể
nhận thông báo lỗi tương ứng ở dạng chuỗi
BOOL mciGetErrorString(DWORD fdwError, LPTSTR lpszErrorText, UINT cchErrorText);
fdwError: Đây chính là mã lỗi nhận được từ các hàm
mciSendStringvàmciSendCommand
lpszErrorText: Chuỗi chứa nội dung thông báo lỗi (dài tối đa 128 ký tự)
Summer 2004
C4W - MultiMedia - Nguyen Tri Tuan - DH.KHTN Tp.HCM 31 Thư viện MCI - Xử lý lỗi…(tt)
VD. Xác định chuỗi thông báo lỗi
if (dwReturn = mciSendCommand(mciDevID, MCI_PLAY, MCI_NOTIFY, (DWORD)(LPVOID) &mciPlayParams)) {
char szError[128];
mciSendCommand(mciDevID, MCI_CLOSE, 0, 0L); mciGetErrorString(dwReturn, szError, 128); MessageBox(szError, "Error", MB_OK);
return; }
Thư viện MCI - Nhận xét Ưu điểm
Dễ sử dụng
Không cần hiểu biết nhiều về các thiết bị Multi-Media, các cấu trúc file
Sử dụng cùng một cơ chế cho các thiết bị: Wave audio, MIDI, CD Audio, AVI,…
Độc lập thiết bị
Khuyết điểm
Do xử lý ở cấp cao nên phụ thuộc vào giao diện hàm MCI có sẵn, không thể can thiệp vào việc mở rộng khả
năng ứng dụng Multimedia như hiệu ứng âm thanh, graphics equalizer,…
Đối với xử lý âm thanh wave audio thì MCI chỉ xử lý
Summer 2004
C4W - MultiMedia - Nguyen Tri Tuan - DH.KHTN Tp.HCM 33 Cám ơn - Hỏi & Đáp