Do đặc tớnh của tệp Voc là gồm cỏc khối nờn cần phải đọc lần lượt cho tới khi hết tệp hay gặp khối dữ liệu. Ngoại trừ khối dạng 0 chỉ chứa một byte đơn giỏ trị 0 đỏnh dấu cuối tệp, khuụn dạng cỏc khối khỏc đều gồm một header kớch thước 4 bytes và tiếp theo là dữ liệu. Do đú, ta cú cấu trỳc chung:
Khuụn dạng khối
VocBlockFormat = record
header: VocBlockHeader; data: VocData;
End;
Trong đú, dạng VocBlockHeader là cấu trỳc chung cho mọi khối.
VocBlockHeader = record
blockType:byte; {1 byte định danh dạng khối }
dataLen: longint; {3 byte xỏc định độ dài dữ liệu }
End;
Riờng phần VocData là khỏc nhau. Tuy nhiờn ta chỉ cần xột cỏc khối dạng 1, dạng 8 và dạng 9. Bởi vỡ đõy là cỏc khối chứa thụng tin về khuụn dạng lưu trữ dữ liệu.
Khối dạng 1:
VocData1 = record
SamRateCode :byte; {1 byte mó tần số lấy mẫu}
DataCompresCode :byte; {1 byte mó phương thức nộn dữ liệu} End;
Trong đú, tần số lấy mẫu được tớnh theo cụng thức: Fs = 1000000/(256 - SamRateCode);
Và mó phương thức nộn trong bảng thuộc phần khuụn dạng tệp Voc. Tuy nhiờn, 2 dạng thường dựng là: 0 - PCM 8bits; 4 - PCM 16bits.
Khối dạng 8:
VocData8 = record
SamRateCode :word; {2 byte mó tần số lấy mẫu}
DataCompresCode :byte; {1 byte mó phương thức nộn dữ liệu}
Mode :byte; {0: mono; 1: stereo}
End;
Trong đú, tần số lấy mẫu được tớnh theo cụng thức: Fs = 256*1000000/(65536 - SamRateCode); Fs = Fs *2;
Khối dạng 9:
VocData9 = record
SamRate :longint; {4 byte tần số lấy mẫu}
NumBitsPerSam :byte; {Số bits cho mỗi mẫu}
NumChannel :byte; {Số kờnh truyền: 1-mono; 2-stereo}
DataCompresCode :word; {2 byte mó phương thức nộn dữ liệu}
Exten :longint; {Phần mở rộng}
End;