3.2 .File WAVE
3.2.1.Cấu trúcfile 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 Microsoft Windows. Tệp wav tự mã hóa 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 4 GB.
Một tệp Wave là một dạng đặc biệt của tệp RIFF, là nhóm nội dung của tệp tin thành các khối riêng biệt đồng thời mỗi khối sẽ gồm một Header (dùng đề qui định kiểu và kích thước của khối) và các byte dữ liệu, 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 nên cấu trúc gồm các phần tử nhỏ gọi là khúc (chunk). Có 2 loại khúc được dùng trong tệp wav là 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ư trong Hình 3.3:
R I F F Kích thước W A V E Khúc fmt Khúc data
Các byte kích thước
Hình 3.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ó cùng 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.
Bảng 3.1 sau đây là mô tả dạng tệp Wave cơ bản:
Bảng 3.1: Dạng tệp tin 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 Dữ liệu âm thanh
Một file RIFF (Resource Interchanged File Format- chuẩn cấu trúc file tài nguyên có thể thay đổi) được bắt đầu với một phần header và sau đó là một chuỗi liên tục các khối dữ liệu (data chunk) một file wav là một file file RIFF với một khối dữ liệu “Wave” duy nhất bao gồm 2 khối con. Khối “fmt” xác định định dạng dữ liệu và khối dữ liệu “data” xác định dữ liệu thực sự.
Hình 3.4: Cấu trúc file wave
Một file wave chuẩn bắt đầu bởi ký hiệu RIFF Header như trong bảng 3.2:
Bảng 3.2: Một dạng chuẩn của file Wave
Offset Kích cỡ Tên Mô tả
0 4 Chunk ID Chứa chuỗi “RIFF”
4 4 Chunk size
36 + SubChunk2Size, hoặc chính xác hơn là 4 + (8 + SubChunk1Size) + (8+ subchunk2Size). Đây là kích cỡ của phần lớn các khối theo số này. Đây là kích cõ của toàn bộ file trừ đi 8 byte dành cho 2 trường chưa được tính vào là Chunk ID và ChunkSize.
Offset Kích cỡ Tên Mô tả
Định dạng Wave bao gồm 2 khối con : “fmt” và “data” : Khối con “fmt” mô tả khuôn dạng dữ liệu:
12 4 Subchunk1 ID Chứa chuỗi “fmt”
16 4 Subchunk1Size 16 cho PCM. Đây là kích cỡ của phần lớn các khối con theo sau con số này
20 2 AudioFormat
PCM=1 (VD: lượng tử tuyến tính
(Linear quantization Values other than 1 indicate some form of compression)
22 2 Numchannels Mono = 1; stereo = 2… 24 2 Sample Rate 8000, 44100…
28 4 Byte Rate = Sample Rate * number channels * Bitspersample/ 8
32 2 Block Align
= NumChannels*bitspersample/8
Số lượng byte cho mỗi mẫu bao gồm tất cả số các kênh. Điều gì sẽ xảy ra nếu số này không phải là số nguyên?
34 2 BitsperSample 8 bit =8, 16 bit= 16
2 ExtraparamSize Nếu là PCM thì không tồn tại
ExtraParams Không gian dành cho các tham số mở rộng
Khối “Data” chứa kích cỡ là các byte dữ liệu và âm thanh thực thụ và các byte dữ liệu này sẽ nhóm thành các mẫu, mỗi mẫu có 1 hoặc 2 kênh:
36 4 SubChunk2ID
40 4 SubChunk2Size
Ví dụ : Đây là 72 bytes của file Wave được hiển thị dưới dạng Hex: 52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 02 00 22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61 00 08 00 00 00 00 00 00 00 24 17 1e f3 3c 13 3c 14 16 f9 18 f9 34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d
Và phần diễn dịch được thể hiện như trong Hình 3.5:
Hình 3.5: Phần diễn dịch