TỔNG HỢP TIẾNG NĨI
XXIX.Dùng các hàm cấp thấp của Windows :
báo đặc tả liên quan được cung cấp trong 2 file Mmsystem.h và Windows.h
4 hàm chính sau đây sẽ luơn được dùng để điều khiển việc phát một file Wave :
waveOutOpen()
waveOutPrepareHeader() waveOutWrite()
waveOutClose()
Trong đĩ, hàm waveOutOpen() sẽ yêu cầu cung cấp địa chỉ của một hàm gọi là CallBack. Hàm CallBack này sẽ cho biết một trong 3 sự kiện liên quan sẽ xảy ra , và 3 sự kiện này tương ứng với 3 thơng điệp sau được gửi đến hàm
CallBack :
waveOutOpen()
MM_WOM_DONE
Được gửi khi thiết bị đã phát xong khối dữ liệu âm thanh mà được gửi đi bằng hàm
waveOutWrite()
MM_WOM_CLOSE Được gửi khi thiết bị được đĩng bằng hàm
waveOutClose()
Ngồi ra, hàm waveOutOpen() cịn địi hỏi một số tham số quan trọng như : mã nhận dạng thiết bị âm thanh, handle của thiết bị sau khi mở, con trỏ tới một cấu trúc mơ tả file Wave. Để chọn thiết bị âm thanh mặc định, ta dùng hằng WAVE_MAPPER thay cho mã nhận dạng thiết bị âm thanh.
Hàm waveOutPrepareHeader() sẽ tạo ra một header cho khối dữ liệu âm thanh sẽ phát bao gồm cả các mẫu âm thanh đã được nạp vào bộ nhớ.
Cuối cùng, hàm waveOutWrite() sẽ bắt đầu gửi khối dữ liệu âm thanh này ra thiết bị để phát với header đĩ.
Sau khi phát xong, ta phải gọi hàm waveOutClose() để đĩng thiết bị đã mở nhằm giải phĩng tài nguyên hệ thống.
Tất cả các hàm liên quan đến cơng việc phát âm thanh này đều hoạt động thơng qua handle của thiết bị mà được lấy từ hàm waveOutOpen().
Nhận xét chung về 3 cách phát file Wave :
-Theo thứ tự của 3 cách nêu trên thì tính đơn giản tỷ lệ nghịch với tính linh động, uyển chuyển trong việc phát một file Wave, nghĩa là ta muốn nắm quyền kiểm sốt, điều khiển càng nhiều thì phải thực hiện càng nhiều thao tác.
-Trong 3 cách phát file Wave trên thì 2 cách đầu (dùng hàm sndPlaySound, PlaySound hoặc MCI) ta khơng cần quan tâm đến việc đọc file Wave và nạp các mẫu âm thanh vào bộ nhớ. Riêng cách thứ ba thì điều này là bắt buộc. Phần dưới đây sẽ nĩi sơ về cách đọc dữ liệu âm thanh vào bộ nhớ trước khi gọi các hàm đĩ.
V. Cách đọc file Wave vào bộ nhớ :