Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: [VC6] Làm sao để repeat khi chơi 1 file MIDI

  1. #1
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    Mặc định [VC6] Làm sao để repeat khi chơi 1 file MIDI

    Mình sử dụng :
    mciSendString("play MySound from 0", 0, 0, 0);
    hoặc :
    mciSendCommand(mciGetDeviceID("MySound"), MCI_PLAY ,0, 0);

    Để chơi 1 bài MIDI. Có điều nó chỉ chơi có 1 lượt mà ko repeat. Mình đã đọc MSDN rất kĩ và thử :
    mciSendString("play MySound repeat", 0, 0, 0);
    nhưng ko được. Hình như là cái repeat đó chỉ áp dụng cho video thôi.
    Có bác nào bết xin chỉ dùm.

  2. #2
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    Các bạn giúp tớ với chứ.

  3. #3
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Cái này hình như phải dựa vào thời gian rồi dùng vòng lặp thì phải, dù sao thì việc bật cái file midi này cũng phải cho vào một thread riêng nên cho vào vòng lặp vô hạn cũng không ảnh hưởng gì

  4. #4
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Cách 1: chuyển qua dùng file *.wav (tha hồ loop), dùng sndPlaySound or PlaySound. Ngoài ra, nếu có thể thì nên dùng thằng OpenAL (thằng này resemble cả data type lẫn coding convention của OpenGL). Tin xấu: OpenAL không hỗ trợ midi file. Tin tốt: OpenAL rất khả chuyển (support Windows, Linux/Unix, MacOS như OpenGL) + provide 3D audio API (multichannel). Nếu bác quen OpenGL (provide 3D graphic API) thì bác sẽ thấy OpenAL là một sự bổ sung không thể thiếu.

    OpenAL Homepage: www.openal.org (download OpenAL SDK & ALUT)

    Cách 2: download DirectX SDK về rồi lên codeproject or codeguru, search bằng từ khóa "midi" hoặc vào phần multimedia của nó để xem một số project sẵn có về cách replay midi file (đối với codeproject, phải đăng ký thì mới có quyền down project về).

    Cách 3: tính độ dài của file midi theo mili giây (giả sử là s). Sau đó, sử dụng hàm SetTimer để gửi thông điệp WM_TIMER sau mỗi s mili giây. Chặn thông điệp WM_TIMER để play lại file midi từ đầu. Bác nhớ gọi thằng KillTimer để ngưng khi không còn cần thiết nữa.

    Nói chung, nên dùng file *.wav cho đơn giản, hiệu quả (các game như StarCraft, Age of Empires, CS ... đều sử dụng wav file - nếu không tin, bác cứ mở thư mục sound của chúng ra mà xem).

    P.S: Cái này dùng cho phần credit của chương trình cờ caro của bác đúng không ?
    Our dreams are young and we both know they take us where we want to go...

  5. #5
    Ngày gia nhập
    01 2007
    Nơi ở
    Hải Phòng
    Bài viết
    210

    Thằng PlaySound thì quá tệ. Nó chỉ chạy được một cái tại 1 thời điểm mà ko thể chạy được 2 cái. Đã vậy cho thêm một đoạn nhạc .wav và chương trình thì chương trình của tớ sẽ "tăng trọng" gấp đôi mất.

    - Cái cách tính độ dài của file MIDI rồi SetTimer có lẽ là được nhưng mà tớ thấy có vẻ ko ổn cho lắm. Có vẻ nó hơi bị thủ công ???

    - Thằng DirectSound thì mình cũng search trên CodeProject từ trước rồi, nhưng mấy cái Direct này nó hơi bị khó, mình cũng chưa có tài liệu nên xem mã nguồn của người ta, toàn thấy một mớ bòng bong chẳng biết cái đoạn nó Play ở đâu nữa. Có lẽ mình sẽ sử dụng cách này, nhưng phải đầu tư nghiên cứu sâu hơn mới mong xài được.

    PS : Hổng phải Credit đâu bạn. Cả chương trình đều chạy chung một nhạc nền mà ! À mà có cái tên của cậu ở trong phần Spacial Thanks của Credit đó. Cảm ơn vì đã giúp đỡ nhiều. Nhưng mà sao lạ quá vậy ? Cái này tớ hỏi mãi từ lâu rồi mà bi giờ cậu mới trả lời ?? Lần sau cậu nhớ siêng vào congdongcviet và tớ hỏi cái gì thì cậu nhớ trả lời luôn nhé không mất công tớ đợi mãi, khổ thân !
    Đã được chỉnh sửa lần cuối bởi hieubm : 26-02-2007 lúc 02:16 PM.

Các đề tài tương tự

  1. Lấy Time của từ trong file midi???
    Gửi bởi thuyan1990 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 11-12-2016, 09:13 PM
  2. Mã nguồn chương trình nghe file midi!
    Gửi bởi kirimaru80 trong diễn đàn Dự án & Source code VC++
    Trả lời: 8
    Bài viết cuối: 05-12-2016, 04:48 PM
  3. Cách nào repeat một file mp3 khi nó hết bài trong Console C#?
    Gửi bởi hunterkhanh trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 17-04-2013, 10:20 PM
  4. đọc file MIDI từ SD Card trong C/C++?
    Gửi bởi vuphu24988 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 28-10-2011, 11:23 AM
  5. Đọc dữ liệu file midi dạng số HEX và lấy lời nhạc trong file ra file text
    Gửi bởi kimngockhtn_2007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 29-06-2011, 04:40 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn