Sự tích hợp âm thanh, âm nhạc và video vào Windows là 1 bước tiến quan trọng trong lịch sử phát triển của Windows. Đầu tiên phải kể đến sự thành công rầm rộ của Multimedia Extensions to Windows vào năm 1991. Năm 1992 thì Windows 3.1 ra đời đã có bập bẹ các API hỗ trợ và 1998 thì thiết bị âm thanh "sound card" đã trở thành chuẩn cho các pc, nó được nhà sản xuất tích hợp luôn vào trong main của máy tính chứ ko còn những chiếc card sound yamaha nữa
(hè hè, trước đó thì card sound yamaha vẫn là no1, pc như của ba mình hồi đó chưa có card sound liền, chỉ có cắm ngoài thôi)

Chap 1 : Windows và multimedia


Theo một ý nghĩa nào đó, multimedia (đa phương tiện) đều truy xuất được đến các thiết bị phần cứng khác nhau bởi các lệnh gọi hàm API độc lập thiết bị. Trước hết chúng ta hãy nói qua về phần cứng tí nha, sau đó mới để ý tới các API mà Windows cho ta để làm điều đó

(Em đi ngủ đây, 12h hơn rồi, sáng mai e còn đi học sớm, chiều mai viết tiếp)

Các API hỗ trợ multimedia trong Windows nằm trong 2 tập hợp chính : giao diện cấp thấp và giao diện cấp cao.
Giao diện cấp thấp là một loạt các hàm bắt đầu bằng chữ cái viết thường ví dụ : mciSendString, w
aveIn,<font color="Red">midiIn, midiStream.......



Trong danh sách các hàm multimedia , có 9 hàm bắt đầu bằng mci để truy xuất Media Control Interface
* mciExecute
* mciGetCreatorTask
* mciGetDeviceID
* mciGetDeviceIDFromElementID
* mciGetErrorString
* mciGetYieldProc
* mciSendCommand
* mciSendString
* mciSetYieldProc


thôi lí thuyết làm gì cho mệt, thực hành luôn

Ví dụ mẫu 1 : PlaySound từ file

Project :
Mã:
http://forums.congdongcviet.com/attachment.php?attachmentid=5417&d=1299249100
Code mẫu

Mã:
#include <windows.h>#pragma comment(lib,"winmm.lib") int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow){     PlaySound(TEXT ("langman.wav"), NULL, SND_FILENAME | SND_ASYNC) ;     Sleep(5000);     return EXIT_SUCCESS;}

Ví dụ mẫu 2</font> : chạy từ resource
vào file vào new tạo 1 Resource script mới
sai đó insert file .wav vào
project
Mã:
http://forums.congdongcviet.com/attachment.php?attachmentid=5418&d=1299249100
Code

Mã:
#include <windows.h>#include "resource.h" #pragma comment(lib,"winmm.lib") int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow){    PlaySound(MAKEINTRESOURCE(IDR_LANGMAN),GetModuleHandle(NULL),SND_RESOURCE);     Sleep(5000);     return EXIT_SUCCESS;}
Ví dụ mẫu 3 : chạy từ resource của hệ thống


Mã:
http://forums.congdongcviet.com/attachment.php?attachmentid=5419&d=1299249104
Mã:
#include <windows.h>#pragma comment(lib,"winmm.lib") int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow){    PlaySound(TEXT("SystemStart"), NULL, SND_ALIAS);    Sleep(5000);    return EXIT_SUCCESS;}
<font size="4"><font color="Red">Ví dụ 4 : Chạy từ resource của hệ thống bằng ID



Mã:
http://forums.congdongcviet.com/attachment.php?attachmentid=5420&stc=1&d=1299249718
Mã:
#include <windows.h>#pragma comment(lib,"winmm.lib") int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow){    PlaySound((LPCTSTR)SND_ALIAS_SYSTEMSTART, NULL, SND_ALIAS_ID);    Sleep(5000);    return EXIT_SUCCESS;}
Bảng tham chiếu
Mã nguồn PHP:
Value DescriptionSND_ALIAS_SYSTEMASTERISK "SystemAsterisk" event.SND_ALIAS_SYSTEMDEFAULT "SystemDefault" event.SND_ALIAS_SYSTEMEXCLAMATION "SystemExclamation" event.SND_ALIAS_SYSTEMEXIT "SystemExit" event.SND_ALIAS_SYSTEMHAND "SystemHand" event.SND_ALIAS_SYSTEMQUESTION "SystemQuestion" event.SND_ALIAS_SYSTEMSTART "SystemStart" event.SND_ALIAS_SYSTEMWELCOME "SystemWelcome" event.  
1. mặc định khi bạn play sound là nó sẽ tạo ra 1 thread mới và chạy trên thread đó nên
+ nếu process tắt thì sẽ tắt hết thread con -> tắt sound -> trong ví dụ trên mình phải thêm Sleep vào process ko bị tắt -> nghe được sound
sau này trong các ứng dụng của các bạn thì đừng thêm sleep vào làm gì

2. mặc định thì các sound này ở dạng ko đồng bộ , play thêm lần nữa thì sẽ tạo thêm thread nữa để play

3. ta có thể đồng bộ hóa chúng nếu thêm tham số SND_ASYNC

Mã:
PlaySound(TEXT ("langman.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
4. nếu trong tình trạng chạy đồng bộ thì ta có thể gọi lệnh stop sound bằng cách

Mã:
PlaySound(NULL, 0, 0);
More MSDN:http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx</font></font>