Đây là dạng của Microsoft Windows. Các tệp Wave của Windows ứng dụng cho cả 2 dạng tệp âm thanh nổi (stereo) và dạng đơn (mono) với một tập các độ phân giải và tần số lấy mẫu. Kiểu tệp này cho phép sự định rõ RIFF (Resource Information File Format), và cho phép thông tin phụ của ngƣời sử dụng đƣợc nhúng vào và đƣợc ghi cùng với tệp âm thanh. Dạng âm thanh PCM dùng cho Windows chuẩn chứa dữ liệu đã đƣợc mã hoá, dữ liệu đã đƣợc định dạng theo kiểu điều biến mã xung dạng không bị nén.
Do dạng tệp Wave là một dạng âm thanh tự nhiên đƣợc Microsoft Windows sử dụng, nên nó trở thành một trong các dạng âm thanh phổ biến nhất. Nói chung, cấu trúc của nó đƣợc phát triển dựa trên dạng khởi đầu Interchange File Format (IFF) đƣợc Electronic Arts phát triển cho việc sử dụng trên Amiga. IFF cũng định hình khuôn dạng cơ sở của dạng âm thanh Aiff của Apple.
Tiếp theo IFF, Microsoft định nghĩa một dạng tệp chung đƣợc gọi là Resource Interchange File Format (RIFF). Tệp Riff đƣợc tổ chức nhƣ một tập các khúc gài vào nhau. Và hai biến dạng chung là: tệp Wave (hay Wav) lƣu trữ âm thanh; và tệp AVI lƣu trữ các hình ảnh video.
Đặc tính chung của các tệp Riff và Iff
Do tệp Wave là một dạng đặc biệt của tệp Riff, nên trƣớc hết ta nói về những đặc trƣng cơ bản cơ bản của dạng RIFF. Trong đó ta chú tâm tới các biến thể IFF khác, bao gồm Aiff và IFF/8SVX.
Một tệp Riff bao gồm một tập hợp các khúc xếp chồng. Mỗi khúc chứa một mã độ dài 4 ký tự (như RIFF, fmt, hay LIST; các mã ngắn hơn được chèn thêm các khoảng trống). Mã này chỉ định khuôn dạng của khúc. Ví dụ, một khúc fmt chứa các thông tin về khuôn dạng âm thanh. Tiếp theo đó là dạng khúc với một giá trị kích thƣớc 4-byte, chỉ ra kích thƣớc của dữ liệu đƣợc khúc đó mang theo. Trƣờng kích thƣớc trong khúc RIFF ít hơn kích thƣớc tệp tổng thể 8-bytes do không tính đến dạng khúc và kích thƣớc.
Một vài dạng khúc, nhƣ các khúc RIFF và LIST, đƣợc gọi là các “container chunks” mà chúng chứa đựng các khúc khác. Dữ liệu của "container chunk" bắt đầu với một mã độ dài 4 ký tự chỉ ra dạng của dữ liệu chứa trong khúc đó. Ví dụ, khúc RIFF trong minh hoạ trên có mã là WAVE, chỉ ra rằng nó chứa các dữ liệu về âm thanh. Các tên khúc bên trong có thể có nghĩa khác nhau, phụ thuộc vào các container xung quanh. Do khúc fmt đƣợc chứa trong RIFF Wave container, nên nó chỉ định khuôn dạng của dữ liệu âm thanh. Trong một dạng container khác, nó có thể chứa các thông tin khác.
Cấu trúc tổng quát của một tệp Wave
Đây là khuôn dạng phổ biến nhất để lƣu trữ âm thanh số trong thế giới PC. Nó đƣợc thiết kế cho các ứng dụng multimedia chạy dƣới Microsft Windows. Tệp Wav lƣu giữ các mẫu dạng sóng của một hoặc nhiều kênh theo các tần số lấy mẫu. Tệp Wav tự mã hoá và mô tả dữ liệu của nó trong phần mềm mà ta sử dụng. Nó không giới hạn độ dài tệp, có thể lên tới 4GB.
Một tệp Wave là một dạng đặc biệt của tệp Riff, và mọi tệp Riff đều bắt đầu với các ký tự RIFF. Tiếp theo đó là 4-byte độ dài và mã định dạng. Tệp Wav theo cấu trúc RIFF (Microsoft’s Resouce Interchange File Format), nên cấu trúc gồm các phần nhỏ gọi là khúc (chunk). Có hai loại khúc đƣợc dùng trong tệp .Wav: khúc dữ liệu (data chunk), nhƣ một định danh biểu diễn độ dài và bản thân dữ liệu; và khúc định dạng (format chunk) chứa các dữ liệu mô tả thông tin trong nó. Khuôn dạng chung tệp Wave nhƣ sau:
R I F F K Ý c h th - í c W A V E K h ó c f m t K h ó c d a t a
C ¸ c b y te s k Ýc h th - í c
Hình 2.3: Khuôn dạng tệp Wave
Do có rất nhiều tệp Wave có cùng cấu trúc cơ sở này, nên nhiều chƣơng trình xử lý các tệp Wave giống nhƣ chúng có một header ấn định. Điều này tạo thuận lợi cho việc viết các tệp Wave dài nhƣ khi chỉ viết các dữ liệu PCM và thiết lập một cách thích đáng các trƣờng kích thƣớc. Sau đây là mô tả dạng tệp Wave cơ bản:
Kích thƣớc Mô tả
4 Dạng khúc: RIFF
4 Kích thƣớc tệp tổng thể trừ 8 4 Dạng RIFF container: WAVE 4 Dạng khúc: fmt
4 Độ dài dữ liệu khúc định dạng: thông thƣờng là 16 16 Dữ liệu khúc định dạng
4 Dạng khúc: data
4 Độ dài dữ liệu âm thanh n Các mẫu âm thanh hiện thời
Tệp Wave có thể có các khúc khác trong chúng. Đặc biệt, khúc dữ liệu đơn đôi khi đƣợc thay thế bằng bởi một LIST container mà nó chứa các khúc slnt (chỉ ra các quãng trầm) và các khúc dữ liệu với các dữ liệu âm thanh.
Đọc tệp Wave
Trong dạng IFF gốc, cần thấy rõ rằng các khúc khác nhau có thể xuất hiện theo bất cứ thứ tự nào. Vì vậy, rất có thể một vài dạng tệp Wave có thể có khúc dữ liệu âm thanh trƣớc khúc định dạng. Và, sự thể hiện của bất kỳ khúc nào đều phụ thuộc vào cả dạng của khúc và dạng của container kèm theo. Nguyên tắc chung của RIFF và các dạng tƣơng tự là nên bỏ qua bất cứ khúc nào mà ta không thể nhận dạng đƣợc.
Một cách để truy cập những tệp nhƣ vậy là đọc lƣớt toàn bộ tệp và tạo ra một sự ánh xạ trong bộ nhớ với sự định vị và dạng của mỗi khúc. Sau đó, có thể định vị các khúc một cách riêng biệt tuỳ theo yêu cầu. Tuy nhiên, sự tiếp cận này, mặc dù chi tiết, nhƣng lại có một trở ngại lớn: nó yêu cầu phải có sự hiệu lực toàn bộ tệp ngay lập tức. Đặc biệt, nếu ta quan tâm tới quá trình truyền một tệp Wave qua mạng và quá trình phát nó giống nhƣ dữ liệu đƣợc nhận, ta có thể bỏ qua toàn bộ tệp và định vị các khúc trƣớc khi ta bắt đầu phát.
Ngoài ra, có một cách tiếp cận khác, thay vào việc ánh xạ sự định vị cho mỗi khúc, ta có thể đọc tệp từ phần đầu cho tới cuối và xử lý các khối ngay trong quá trình đọc.
Và, trong các tệp Riff (như trong mọi dạng IFF-derived file), mỗi khúc chiếm giữ một số bytes trong tệp. Nếu kích thƣớc của khúc hiện thời là lẻ, thì sẽ có một byte phụ của phần thêm vào cần đƣợc bỏ qua. Và có thể, khúc mà chúng ta vừa xoá lại là khúc cuối cùng của container của nó. Do đó, nếu bất cứ container còn lại ít hơn 8-bytes thì cần phải đƣợc kết thúc bởi vì một header của khúc yêu cầu ít nhất 8 bytes.
Khúc fmt
Khúc fmt chứa thông tin định dạng âm thanh hiện thời. Những nội dung chính xác của sự thay đổi khúc fmt phụ thuộc vào phƣơng thức nén. Bảng sau chỉ ra khuôn dạng khúc fmt sử dụng cho dữ liệu PCM.
Kích thƣớc Mô tả
2 Mã phƣơng thức nén 2 Số kênh truyền
4 Số mẫu trong mỗi giây
4 Số bytes trung bình trong mỗi giây 2 Block alignement
2 Số bits cho mỗi mẫu
2 Số bytes của thông tin thêm vào n Thông tin về bộ nén phụ
Mã hoá dữ liệu
Gần 100 bộ mã về phƣơng thức nén đã đƣợc đăng ký với Microsoft cho việc sử dụng trong các tệp Wave. Tệp Wave có thể sử dụng các phƣơng thức nén -Law hay A-Law. Sau đây là một vài khuôn dạng:
Mã hoá Mô tả 0 Không nhận dạng đƣợc 1 PCM 2 Microsoft ADPCM 6 ITU G.711 A-Law 7 ITU G.711 -Law 17 IMA ADPCM 20 ITU G.723 ADPCM 49 GSM 6.10 64 ITU G.721 ADPCM 80 MPEG 65535 Experiment
Tuy nhiên, tốt nhất nên sử dụng các bản tin dạng văn bản hơn là một số mã hoá. Nên đôi khi một phƣơng thức nén tối ƣu hay phổ biến cũng không nên sử dụng (ví dụ như phương thức nén MS ADPCM).
Khúc dữ liệu
Khúc dữ liệu (Data chunk) của dạng Wav theo chuẩn mẫu RIFF. Bốn byte đầu xác định khúc dữ liệu với các ký tự “data” trong mã ASCII. Theo sau là bốn byte biểu diễn độ dài dữ liệu. Cuối cùng là các dữ liệu đƣợc mã hoá trong một số byte cho trƣớc.
Các khúc văn bản
Sự thay đổi của các khúc tạo ra sự sinh động dạng văn bản. Các khúc này có thể xuất hiện trong bất cứ dạng tệp Riff nào, chứ không phải chỉ trong các tệp Wave. Tên của chúng đều bắt đầu với một chữ "I" để chỉ ra rằng chúng đƣợc dùng cho việc lƣu trữ thông tin.