File định dạng MIDI (*.mid)

Một phần của tài liệu Nhận dạng bản nhạc dựa trên việc phân tích ký âm (Trang 33 - 39)

4. Phạm vi luận án Error! Bookmark not defined.

3.2.File định dạng MIDI (*.mid)

Mặc dù có thể lưu trữ một bài hát như dạng thu thanh Wave hay Au, nhưng có 2 lý do chính cho việc phải có các khuôn dạng âm nhạc riêng biệt. Trước hết đó là kích thước.

trình thu thanh toàn bộ bài hát. Lý do thứ hai là rất dễ dàng trong việc thay đổi. Nếu ta có một quá trình thu thanh buổi hoà âm, rất khó khăn trong việc tách biệt và thay đổi một nhạc cụ đơn, nhưng nếu được lưu trữ dưới dạng một dãy các nốt nhạc thì ta sẽ dễ dàng soạn thảo nó.

3.2.1. Cu trúc chung ca file MIDI chun

Một file MIDI là một chuỗi các khúc. Các khúc này có cùng một khuôn dạng chung giống như các khúc được sử dụng trong file Wave. Mỗi khúc có 4 ký tự phân loại, một mã độ dài kích thước 4-byte (trong khuôn dạng MSB), và một vài dữ liệu. Tuy nhiên, khác với các khuôn dạng khác, các khúc MIDI không xếp chồng.

Hiện nay, chỉ có 2 loại khúc. Khúc MThd chứa thông tin về header nói chung; và khúc MTrk chứa một track (rãnh) đơn. Khúc MThd xuất hiện tại phần đầu của mọi file MIDI, và đây là dấu hiệu để định danh một file MIDI chuẩn, tiếp theo sau là số khúc MTrk được định nghĩa trong khúc MThd.

3.2.2. Đc file MIDI

Khúc MIDI Header (Header Chunk)

Nội dung khúc Header chứa các thông tin của bài hát gồm: định dạng file midi, số track (số khúc MTrk), và khuôn dạng thời gian. Sau đây là nội dung của khúc MIDI MThd:

Bytes Mô tả

2 Định dạng file midi

2 Số các Track

2 Khuôn dạng thời gian

Bảng 3.3: Cấu trúc khúc MThd của file MIDI

Có 3 loại file MIDI, chúng được phân loại tuỳ theo cách xử lý các Track :

 File dạng 0 chỉ chứa duy nhất một track. Một cách rõ ràng, đây là file dễ nhất để có thể phát, nên đây là dạng thông dụng cho các file quảng cáo.

 File dạng 1 chứa rất nhiều Track mà chúng được phát một cách đồng thời. Một chương trình dùng để phát các file dạng 1 phải bằng cách nào đó san phẳng dữ liệu

thành các dòng sự kiện đơn trước khi phát.

 File dạng 2 chứa nhiều Track nhưng không thừa nhận bất cứ sự liên hệ nào giữa các Track. Nói chung, các file dạng 2 là không phổ biến.

Các Track MIDI

Chú ý rằng một Track là khác so với một kênh MIDI. Mặc dù đây là dạng chung cho các file multi-track để có thể phát mỗi Track trên một kênh khác nhau, và trong quá trình tổ hợp một bản nhạc có thể sử dụng số các Track tuỳ ý để có thể phát các Track trên các kênh khác nhau theo bất cứ kiểu mẫu nào.

Mỗi Track MIDI là một danh sách các sự kiện (Event), mà mỗi sự kiện có một “delta time” đặt trước. Mỗi khúc trong một file MIDI có một độ dài đã được ấn định, dựa vào đó ta có thể dễ dàng quản lý được khi nào thì một khúc là kết thúc.

Cấu trúc chung của một Track: Offset Độ

dài(bit)

Mô tả Value

0x00 4 Định danh Khúc “MTrk”

0x04 4 Kích thước Khúc Số byte theo sau(n/8)

0x08 n Các Event

Bảng 3.4: Cấu trúc một Track trong file MIDI

Delta times:

Các sự kiện MIDI xuất hiện tại một số thời điểm xác định. Có 2 cách để đánh dấu các thông tin này:

 Lưu trữ thời gian tuyệt đối tại mỗi thời điểm mà sự kiện xuất hiện, hay có thể lưu trữ các quãng thời gian giữa các sự kiện.

 Mỗi sự kiện được đặt trước bởi một số chỉ ra số các ticks để tách biệt nó với sự kiện trước đó. Khoảng tồn tại chính xác của một tick phụ thuộc vào khuôn dạng thời gian đã được ấn định trong header, và cũng có thể được thay đổi bởi các sự kiện riêng biệt trong file.

Trong file định dạng midi, giá trị delta time được lưu trữ theo một khuôn dạng đặc biệt, người ta có thể giành riêng 4 byte cho phần mô tả deltal time nhưng vì để giảm kích cỡ tập tin MIDI nên delta time được lưu trữ với kích cỡ thay đổi, có chiều dài từ 1 đến 4 byte. Cách lưu trữ này được gọi là: variable-length format.

Variable-length format.

Định dạng biến có độ dài thay đổi được lưu trữ như sau: Mỗi byte chỉ sử dụng 7 bit thấp để chứa số liệu. Bit cao còn lại được thiết lập là 1, trừ byte cuối.

Một ví dụ để thấy rõ hơn:

Value Variable-length

Hex Bin Hex Bin

00 00000000 00 00000000

C8 11001000 8148 10000001 01001000

100000 00010000 00000000 00000000 C08000 11000000 10000000 00000000 Ví dụ 3.1: cách lưu trữ theo định dạng Variable-length.

Các Event MIDI (Sự kiện MIDI)

Một Event MIDI là một gói các dữ liệu mà nó chỉ rõ một số các sự kiện âm nhạc, như việc nhấn và nhả phím. Byte đầu tiên của gói là byte trạng thái, mà nó định rõ dạng của sự kiện, và đôi khi, là kênh truyền. Các bytes trạng thái thường xuyên có thiết lập bit cao. Còn lại là các byte dữ liệu, mà chúng không bao giờ có thiết lập bit cao. Sự phân biệt này là rất quan trọng.

Theo cách chung, các kênh truyền MIDI được đánh số từ 1 tới 16, và các nhạc cụ MIDI là từ 1 tới 128. Tuy nhiên, các số mã hoá xếp hàng từ 0 tới 15 và 0 tới 127 một cách tương ứng.

Các Event MIDI được chia thành 3 loại: MIDI Control Events (Event điều khiển), System Exclusive Events (Event hệ thống) and Meta Events.

MIDI Control Events: bao gồm các sự kiện điều khiển để phát lại một bản nhạc mà file midi định nghĩa, ví dụ như việc bật hay tắt một nốt nhạc (not on, not off),… cấu trúc được định nghĩa như bảng sau:

Delta Time Event Type Value MIDI Channel Đối số 1 Đối số 2 Variable-

length

4 bits 4 bits 1 byte 1 byte

Bảng 3.5 : Định dạng MIDI Control Events.

Event Type Value Đối số 1 Đối số 2

Note Off 0x8 Số hiệu note Tốc độ nhấn phím

Note On 0x9 Số hiệu note Tốc độ nhấn phím

Note Aftertouch 0xA Số hiệu note Aftertouch value

Controller 0xB Controller number Controller value

Program Change 0xC Program number Không sử dụng

Channel Aftertouch 0xD Aftertouch value Không sử dụng

Pitch Bend 0xE Pitch value (LSB) Pitch value (MSB)

Bảng 3.6 : Chi tiết các kiểu Event.

Meta Events: là các chỉ thị hay thông tin gửi đến phần mềm xử lý tập tin MIDI, Meta-event luôn bắt đầu bằng 1 byte FFh. Byte thứ nhì cho biết loại meta-event, byte thứ ba cho biết chiều dài của dữ liệu liên quan. Cấu trúc chung được mô tả như sau:

Delta time Meta Event Type Length Data

Variable-

length 255 (0xFF) 0-255

Variable-

length type specific

Bảng 3.7 : cấu trúc Meta Event.

System Exclusive Events: loại event này chỉ dành riêng của từng nhà sản xuất và chỉ được xử lý trong các thiết bị của nhà sản xuất đó. Các tín hiệu này bắt đầu bằng một số hiệu riêng (ID Number) khác nhau đối với các nhà sản xuất khác nhau. Đối với các thiết bị nhận không nhận biết được thì event này sẽ được bỏ qua.

Bảng 3.8 : Cấu trúc System Exclusive Events. Variable- length 240 (0xFx) variable- length data bytes

PHẦN III : GIẢI PHÁP XỬ LÝ

Chương 4. XÂY DỰNG CƠ SỞ DỮ LIỆU

Một phần của tài liệu Nhận dạng bản nhạc dựa trên việc phân tích ký âm (Trang 33 - 39)