4. Phạm vi luận án Error! Bookmark not defined.
3.1. File định dạng Wave (*.wav)
Đây là dạng của Microsoft Windows. Các file Wave của Windows ứng dụng cho cả 2 dạng file â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 file 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 file â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 file 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 file chung được gọi là Resource Interchange File Format (RIFF). File 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à: file Wave (hay Wav) lưu trữ âm thanh; và file AVI lưu trữ các hình ảnh video.
3.1.1. Đặc tính chung của các file Riff và Iff
Do file Wave là một dạng đặc biệt của file 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 file 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 file 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.
3.1.2. Cấu trúc tổng quát của một file 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. File 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. File 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 file, có thể lên tới 4GB.
Một file Wave là một dạng đặc biệt của file Riff, và mọi file 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. File 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 file .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 file Wave như sau:
R I F F KÝch th−íc W A V E Khóc fmt Khóc data
C¸c bytes kÝch th−íc
Hình 3.1: Khuôn dạng file Wave
Do có rất nhiều file Wave có cùng cấu trúc cơ sở này, nên nhiều chương trình xử lý các file 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 file 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 file Wave cơ bản:
Kích thước Mô tả
4 Dạng khúc: RIFF
4 Kích thước file 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
Bảng 3.1: Cấu trúc file Wave
File 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.
3.1.3. Đọc file 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 file 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 file như vậy là đọc lướt toàn bộ file 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ộ file ngay lập tức. Đặc biệt, nếu ta
quan tâm tới quá trình truyền một file 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ộ file 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 file 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 file Riff (như trong mọi dạng IFF-derived file), mỗi khúc chiếm giữ một số bytes trong file. 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ụ
Bảng 3.2: Cấu trúc khúc fmt của file Wave
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 file Wave. File 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 file Riff nào, chứ không phải chỉ trong các file 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.