Truy nhập tệp Voc

Một phần của tài liệu Xây dựng chương trình xử lý âm thanh số (Trang 55 - 56)

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} (adsbygoogle = window.adsbygoogle || []).push({});

End;

Một phần của tài liệu Xây dựng chương trình xử lý âm thanh số (Trang 55 - 56)