Định dạng Intel PCM (LSB, MSB) và Motorola PCM (MSB, LSB)
LSB
1
MSB
1
PCM
1
White

motaro viết ngày 13/02/2017

Sự khác biệt giữa hai định dạng file pcm Intel PCM (LSB, MSB) và Motorola PCM (MSB, LSB)

Mã hóa âm thanh PCM

Đôi chút về mã hóa âm thanh PCM

PCM (Pulse-code modulation) là phương thức thông dụng nhất dùng để số hóa tín hiệu âm thanh ở dạng analog.
Hiểu nôm na phương thức này là: cứ sau một khoảng thời gian nhất định thì đo lấy cường độ âm thanh, con số cường độ âm thanh tại thời điểm đo này chính là dữ liệu âm thanh dạng số. Việc đo đạc lấy số này người ta gọi là lấy mẫu (sampling).
Lưu ý là không phải cứ đo được cường độ1dB là người ta dùng số 1 để số hóa cường độ này, hay đo được 1.234dB thì dùng số float 1.234 để thể hiện, việc số hóa cường độ trong bài viết này không đề cập đến. Chúng ta cứ hiểu nôm na là sau khi đo được cường độ thì người ta dùng một thuật toán nào đó để chuyển từ 123.456dB thành số nguyên để lưu trong máy tính. Tất nhiên số dB càng to thì số nguyên này càng lớn.
alt text

Các con số lấy được sẽ được lưu vào file theo một định dạng nào đó. Trong bài viết này mình chỉ định nói về định dạng file raw, tức là lấy được số đo nào thì ghi vào file như thế. Thông thường file raw như vậy sẽ lưu với đuôi mở rộng là .pcm
Một số đại lượng dùng khi số hóa tín hiệu âm thanh:

  1. Tốc độ lấy mẫu (sample rate)
    Ví dụ tốc độ lấy mẫu là 16000Hz, tức là trong một giây người ta đo cường độ âm thanh 16000 lần (16000 cái sample), tương ứng với 16000 dữ liệu số (16000 cái sample trong một giây).
    Ví dụ như trong hình trên, giả sử đây là đoạn âm thanh trong 1 giây thì ta sẽ có tốc độ lấy mẫu là 26Hz tương ứng với 26 thời điểm lấy mẫu.

  2. Resolution
    Mỗi phần tử dữ liệu số vừa đo được (1 mẫu - 1 sample) sẽ dùng bao nhiêu bit để thể hiện.
    Càng dùng nhiều bit để thể hiện thì khoảng cường độ sẽ càng lớn.
    Ví dụ dùng 8bit thì sẽ chỉ chia ra được 256 mức cường độ khác nhau, 16bit thì sẽ chia được thành 65536 mức cường độ khác nhau như thế thì âm thanh khi số hóa sẽ chi tiết hơn.

  3. LSB/MSB (least significant bit /most significant bit)
    Thứ tự byte khi lưu vào file là lưu từ cuối lên đầu hay lưu từ đầu xuống cuối. Lưu ý đây là thứ tự byte trong một sample chứ không phải thứ tự sample trong một file .pcm

Định dạng Intel PCM (LSB, MSB) và Motorola PCM (MSB, LSB)

Sự khác biệt giữa hai định dạng

LSB - Least Significant Bit
MSB - Most Significant Bit
Giả sử sau khi lấy mẫu đoạn âm thanh như hình trên ta được dãy dữ liệu sample như sau:
8 - 9 - 11 - 13 - 14 - 15 - 15 - 15 - 14 - 13 - 12 ...
Nếu chọn resolution là 16bit (2 byte) thì mỗi sample sẽ mất 2 byte để thể hiện:

0x0008 - 0x0009 - 0x000B - 0x000D - 0x000E - 0x000E - 0x000F - 0x000F - 0x000F - 0x000E - 0x000D - 0x000C ... (chỗ này mình viết dạng cơ số 16 cho dễ nhìn)

Định dạng Intel PCM (LSB, MSB)

Định dạng file PCM intel (LSB, MSB) là định dạng file mà lưu dữ liệu sample trực tiếp không nén không chỉnh sửa xuống file. Tức là dữ liệu sample thế nào thì ghi xuống file như thế, không có header hay metadata nào cả.
Chính vì không có header, metadata các thứ mà khi dùng phầm mềm đọc file âm thanh pcm này (ví dụ dùng cooledit96), bạn phải chỉ ra cho chương trình đấy biết file pcm này có các thông số thế nào ( PCM LSB-MSB hay PCM MSB-LSB, resoution là bao nhiêu bit, số chanel là 1 hay 2) thì nó mới đọc đúng được.
Tuy nhiên thứ tự byte trong một sample sẽ bị đảo lộn trước khi lưu xuống file.
Tức là ví dụ với dãy sample nói trên

0x0008 - 0x0009 - 0x000B - 0x000D - 0x000E - 0x000E - 0x000F - 0x000F - 0x000F - 0x000E - 0x000D - 0x000C ...

khi lưu xuống file với định dạng Intel PCM (LSB, MSB) thì dãy sample nó sẽ là thế này

0x0800 - 0x0900 - 0x0B00 - 0x0D00 - 0x0E00 - 0x0E00 - 0x0F00  - 0x0F00 - 0x0F00 - 0x0E00 - 0x0D00 - 0x0C00 ...

đúng như trong dấu ngoặc là Least sẽ đứng trước còn Most sẽ đứng sau.
Định dạng file kiểu này người ta cũng thường gọi là PCM (LSB)

Định dạng Motorola PCM (MSB, LSB)

Tương tự định dạng Intel PCM cũng là lưu trực tiếp dữ liệu sample không nén không chỉnh sửa không header không metadata. Điểm khác biệt là thứ tự byte trong một sample không bị đảo lộn, tức là với đoạn sample mẫu trên thì ta sẽ ghi xuống file là

0x0008 - 0x0009 - 0x000B - 0x000D - 0x000E - 0x000E - 0x000F - 0x000F - 0x000F - 0x000E - 0x000D - 0x000C ...

y như trong tên là: Most sẽ đứng trước còn Least sẽ đứng sau.
Định dạng file kiểu này người ta cũng hay gọi là PCM (MSB)

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

motaro

1 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
1 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!