• Thứ Ba, 20/07/2004 16:28 (GMT+7)

    Câu hỏi :
    Tôi đang viết 1 chương trình VB 6.0 chơi các file *.dat, *.mpg nhưng không biết cách thực hiện chức năng tắt tiếng các đĩa karaoke hay chức năng nghe mono Left hoặc mono Right như trong chương trình Herosoft 2001. Xin hướng dẫn.

    Trả lời :

    Về mặt lập trình điều khiển multimedia, bạn có thể dùng nhiều thư viện lập trình ở nhiều mức độ khác nhau để chơi các file multimedia và điều khiển sound card. Thí dụ cấp độ dễ dàng nhất để chơi các file multimedia là dùng linh kiện phần mềm (software component) dạng ActiveX Control của Microsoft tên là "Windows Media Player", bạn chỉ cần thiết lập giá trị của thuộc tính "filename" của linh kiện miêu tả đường dẫn file multimedia là nó sẽ tự động chơi dùm bạn. Về mặt điều khiển sound card, một trong các thư viện ở cấp độ thấp nhất của Windows là thư viện Winmm.lib, cung cấp một số hàm API có tên dùng tiếp đầu ngữ waveIn và waveOut để truy xuất thiết bị thu và thiết bị phát âm thanh. Thường các CD karaoke dùng kênh trái (Left) để phát lời và kênh phải (Right) để phát nhạc karaoke, do đó muốn tắt tiếng, bạn có thể gọi hàm waveOutSetVolume() để thiết lập tham số cho thiết bị phát âm thanh của sound card. Đoạn chương trình VC++ sau đây cho phép bạn tắt kênh trái và chỉnh kênh phải cực đại:

    // file này phải được link với thư viện winmm.lib.

    #include <stdlib.h>

    #include <mmsystem.h>

    void CVCDialupDirectDlg::OnLeft() {

       UINT uRetVal, uNumDevs;

       WAVEOUTCAPS waveCaps;

       // Kiểm tra để đảm bảo ít nhất có 1 thiết bị xuất âm thanh.

       if ((uNumDevs = waveOutGetNumDevs())==0) {

          ::MessageBox(NULL, "Máy không có thiết bị waveout", "NumDevs", MB_OK);

                return;

       }

       // Thí dụ này dùng thiết bị số 0 (thường là vậy).

       // nhưng nếu máy có nhiều thiết bị phát âm thanh, ứng dụng nên duyệt từng thiết bị từ 0 tới uNumDevs-1 để điều khiển nó.

       if (!waveOutGetDevCaps(0,(LPWAVEOUTCAPS)&waveCaps, sizeof(WAVEOUTCAPS))) {

          // Kiểm tra xem thiết bị phát âm có hỗ trợ việc hiệu chỉnh âm lượng

          if(waveCaps.dwSupport & WAVECAPS_VOLUME) {

             // word trọng số thấp là âm lượng kênh Left,

             // word trọng số cao là âm lượng kênh Right

             // tắt tiếng Left, cực đại Right

             uRetVal = waveOutSetVolume(0, (DWORD)0x0000ffffUL);

                }

        }

    }

    Chuyên mục: Lập trình