CẤU TRÚC FILE WAVE VÀ HÀM PLAYSOUND .1 Cấu trúc file âm thanh wave

Một phần của tài liệu Thiết kế chương trình truyền tiếng nói qua mạng LAN thông qua sự trợgiúp của công cụ SDK (Trang 27 - 30)

TÌM HIỂU HỖ TRỢ CỦA WINDOWS SDK TRONG XỬ LÝ VÀ TRUYỀN NHẬN ÂM THANH

IV.1 MÔI TRƯỜNG LẬP TRÌNH SDK ĐỐI VỚI TRUYỀN ÂM THANH

IV.1.1 CẤU TRÚC FILE WAVE VÀ HÀM PLAYSOUND .1 Cấu trúc file âm thanh wave

Một file wave thật sự là một phần của một lớp file lớn hơn dùng bởi các hàm multimedia của windows là các file RIFF ( Resource Interchange File Format). Một file Riff bao gồm một hoặc nhiều chunk. Trong mỗi chunk có con trỏ chỉ đến chunk kế tiếp. Mỗi chunk có một mô tả kiểu theo sau bởi một số dữ liệu. Một ứng dụng để đọc các file RIFF có thể bước qua một số chunk, đọc các chunk cần quan tâm và bỏ qua các chunk không liên quan. Chunk file RIFF luôn luôn bắt đầu bằng header sau:

Typedef struct {

FOURCC ckID;

DWORD cksize;

}CK;

Trong đó:

FOURCC là một vùng 4 bytes định nghĩa loại chunk. Vùng này sẽ chứa từ WAVE đối với file wave.

ckSize đặc tả kích thước dữ liệu trong chunk, sau header này chúng ta sẽ tìm thấy cSize bytes dữ liệu.

Các chunk có thể chứa các subchunks. Cấu trúc thật sự một file wave cơ bản bao gồm một chunk fmt theo sau là một chunk dữ liệu. Có thể có những chunk khác

phía sau chunk WAVE nhưng thiết bị sử dụng file WAVE sẽ bỏ qua các chunk này.

Hình sau mô tả cấu trúc file RIFF chứa dữ liệu WAVE.

ID SIZE FROM TYPE

"fmt"

SIZE

"data"

SIZE

Hai subchunk trong chunk wave đặc tả thông tin về một âm thanh file wave và sau đó là chính dữ liệu âm thanh. Chunk fmt chứa chủ yếu đối tượng WAVEFORMAT và một số dữ liệu thêm vào gắn ở cuối chunk. Một đối tượng WAVEFORMAT được định nghĩa như sau :

Typedef struct waveformar_tag{

WORD wFormatTag;

WORD nChannels;

DWORD nSamplesPerSec;

DWORD nAvgBytesPerSec;

WORD nBlockAlign;

} WAVEFORMAT;

Trong đo :

wFormatTag : Chứa hằng WAVE_FORMAT_PCM được định nghĩa trong MMSYSTEM.H như sau:

# define WAVE_FORMAT_PCM 1

Giá trị WAVE_FORMAT_PCM báo cho phần mềm đọc file wave biết cách âm thanh trong nó được mã hoá.

nChannels : Của đối tượng WAVEFORMAT có 2 giá trị :

 1 đối với âm thanh mono.

 2 đối với âm thanh stereo.

nSamplePerSec : Cho biết tần số lấy mẫu của âm thanh để có thể thu và phát cùng một tốc độ, giá trị thông thường của field này nhận một những giá trị sau:

11025 - 11,025Khz 22055 - 22,050Khz 44100 - 44,1 Khz

nAvgBytesPerSec : Cho biết số bytes trung bình trong mỗi giây để thu và phát dữ liệu wave.

nBlockAlign : Xác định số bytes yêu cầu chứa trong một mẫu

 Những mẫu có độ phân giải nhỏ hơn hoặc bằng 8 bits có thể lưu vào 1 bytes.

 Những mẫu có độ phân giải từ 9 đến 16 bits yêu cầu 2 bytes.

Những mẫu stereo yêu cầu số bytes gấp đôi những mono.

Trong cấu trúc trên không định nghĩa số bits thật sự trong một mẫu dữ liệu âm thanh file wave, để định nghĩa số bits trong một mẫu ta dùng cấu trúc sau:

Typedef struct pvmwaveformat_tag{

WAVEFORMAT wf;

WORD wBitsPerSample;

} PCMWAVEFORMAT;

Trong đó:

wf: Đối với dữ liệu subchunk fmt của một chunk WAVE chúng ta thật sự làm việc với đối tượng PCMWAVEFORMAT.

nBitsPerSample: Xác định số bits thật sự trong một mẫu .

Trong một mẫu mono 8 bits dữ liệu của chunk dữ liệu gồm một chuỗi dài có giá trị 1 byte. Những mẫu stereo được chia ra với byte đầu dùng cho kênh bên trái và byte thứ hai dùng cho kênh bên phải, như vậy mỗi mẫu stereo 8 bits sẽ cần 2 bytes.[6]

Để làm việc với một file RIFF bao gồm các bước sau : Mở file.

Vào chunk cần thiết.

Chuyển con trỏ file vào vị trí bắt đầu dữ liệu của chunk.

Hoàn tất, ra khỏi chunk.

Vào chunk kế tiếp.

IV.1.1.2 Hàm Playsound

Chúng ta dùng hàm PlaySound để play dữ liệu dạng waveform hoặc chúng ta có thể dùng hàm sndPlaySound. Tuy nhiên trong môi trường Win32 thì nên dùng hàm PlaySound.

Hàm PlaySound cho phép chúng ta chỉ định các thông số nguồn âm thanh theo các cách sau:

• Dùng tên alias khai báo trong file WIN.INI

• Dùng tên file.

• Dùng chỉ số nhận dạng tài nguyên

Waveform-Audio Files

Trong môi trường Windows, phần lớn các file âm thanh dạng waveform đều có phần mở rông là .WAV

Ví dụ dưới đây minh họa cho việc phát file âm thanh “AmThanh.WAV”

PlaySound("C:\\SOUNDS\\AmThanh.WAV", NULL, SND_SYNC);

Play sound theo các hiện tượng

Hàm PlaySound còn cho phép chúng ta xuất âm thanh tùy theo một sự kiện nào đó xảy ra trong hệ thống như click mouse hay nhấn một phím nào đó. Hệ thống sẽ phát âm thanh tùy theo hiệc tượng xảy ra để cảnh báo người sử dụng. Am thanh dạng này được gọi là sound events.

Để xác định sound event, hàm PlaySound sẽ được gọi với thông số pszSound trỏ đến bảng đăng ký sự kiện. Ví dụ chúng ta sẽ gọi hàm PlaySound ứng với sự kiện mouse click như sau:

PlaySound("MouseClick", NULL, SND_SYNC);

Một phần của tài liệu Thiết kế chương trình truyền tiếng nói qua mạng LAN thông qua sự trợgiúp của công cụ SDK (Trang 27 - 30)

Tải bản đầy đủ (DOC)

(82 trang)
w