TỔNG HỢP TIẾNG NĨI
XIV.Khái niệm về file Wave và file RIFF :
liệu sĩng âm được số hĩa. Nĩ hỗ trợ rất đa dạng các thơng số của âm thanh như số bit lượng tử hĩa, tốc độ lấy mẫu, số kênh. Dạng file này rất phổ biến trên các thế hệ máy tính IBM và được sử dụng rộng rãi trong các chương trình chuyên nghiệp để xử lý các sĩng âm được số hĩa.
File Wave là một trong số các file thuộc chuẩn của file RIFF (Resource Interchange File Format - Dạng file trao đổi tài nguyên). File RIFF sử dụng phương pháp lưu trữ dữ liệu trong các chunk. Mỗi chunk sẽ gồm 3 trường :
• Tên nhận dạng của chunk (ID) : gồm 4 byte kiểu Char
• Kích thước của chunk (Size) : Kiểu DoubleWord. Giá trị này khơng bao gồm 4 byte của ID và 4 byte của Size
• Dữ liệu của chunk đĩ (Data)
Đặc biệt, chunk RIFF cĩ thể chứa các chunk khác trong trường dữ liệu. Các chunk này được gọi là subchunk và chunk RIFF lúc này được gọi là
parent chunk.
Một file RIFF luơn bắt đầu bằng một chunk RIFF. Kích thước của chunk RIFF là kích tổng số byte mà trường dữ liệu của nĩ chiếm, nĩi cách khác chính là kích thước của file RIFF - 8 .
Tất cả các chunk khác trong file RIFF đều là subchunk của chunk RIFF. Chunk RIFF cĩ thêm một trường bổ sung nằm ở 4 byte đầu tiên trong trường dữ liệu của nĩ. Trường bổ sung này được gọi là kiểu định dạng (form type) , gồm 4 byte kiểu Char. Nĩ cho biết dạng dữ liệu được lưu trữ bên trong file RIFF là gì. Ví dụ, đối với các file Wave trường này sẽ cĩ tên là “WAVE” , đối với các file Avi trường này sẽ cĩ tên là “AVI ”
Hình sau minh họa 2 subchunk trong chunk RIFF của file RIFF :
XV. Cấu trúc file Wave :
Một file wave là một tập hợp các loại chunk khác nhau. Vì file Wave chính là file RIFF nên chunk đầu tiên sẽ là chunk RIFF. Ngồi ra, cĩ 2 chunk rất quan trọng khơng thể thiếu là chunk Format mơ tả các thơng số của sĩng âm như tốc độ lấy mẫu, số bit lượng tử hĩa, vv... Chunk thứ hai là chunk Data để
Trường dữ liệu (Data) của chunk RIFF
chứa dữ liệu âm thanh đã được số hĩa. Các chunk khác tùy trường hợp cĩ thể cĩ, cĩ thể khơng.
III.1.1. Chunk Format :
Cấu trúc của chunk Format được định nghĩa như sau :
Trước hết chunk Format luơn cĩ tên nhận dạng là “fmt ”. Kích thước của chunk Format cĩ thể thay đổi tùy theo giá trị của wFormatTag. Giá trị này cho biết chuẩn nén âm thanh. Cĩ hơn 50 chuẩn của Microsoft và các hãng khác được định nghĩa trong file mmreg.h . Thơng thường chuẩn PCM (Pulse Code Modulation) của Microsoft là chuẩn phổ biến nhất. Với chuẩn này, các mẫu âm thanh được lưu trữ sẽ khơng được nén và cĩ giá trị được định nghĩa là 1.
wChannels là số kênh âm thanh. Giá trị 1 cho âm thanh mono, 2 cho âm thanh stereo, 4 cho âm thanh 4 kênh, vv ...
dwSamplesPerSec là tốc độ lấy mẫu, nghĩa là số mẫu được phát trong một giây, đơn vị là Hertz . Cĩ 3 giá trị thơng dụng là : 11025, 22050 và 44100 Hz mặc dù các tốc độ khác vẫn được dùng.
dwAvgBytesPerSec sẽ chỉ ra cĩ bao nhiêu byte được phát mỗi giây. Nếu là chuẩn PCM thì giá trị này chính là dwSamplesPerSec *
wBlockAlign . Ngược lại, giá trị này phải được tính tốn phù hợp với chuẩn tương ứng.
wBlockAlign là kích thước của một khung mẫu âm thanh, tính theo byte. Ví dụ một khung mẫu âm thanh 16-bit mono là 2 byte, 16-bit
typedef struct { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX;
stereo là 4 byte. Nếu chuẩn là PCM thì giá trị này bằng wChannels * (wBitsPerSample / 8)
wBitsPerSample cho biết số bit dùng để lượng tử hĩa mỗi điểm lấy mẫu. Nếu chuẩn là PCM thì giá trị này là 8 hoặc 16. Vì các mẫu phải được lưu dạng BYTE hoặc WORD nên khi lưu trữ vẫn phải lưu hẳn 1 BYTE hoặc 1 WORD. Ví dụ số bit lượng tử hĩa là 12 thì sẽ cĩ 4 bit thừa khơng dùng tới.
cbSize là kích thước của những thơng tin mở rộng thêm được thêm vào cuối cấu trúc WAVEFORMATEX. Thơng tin này được dùng khi chuẩn khác PCM. Với chuẩn PCM thì giá trị này bẳng 0
III.1.2. Chunk Data :