1. Trang chủ
  2. » Luận Văn - Báo Cáo

xây dựng chương trình xử lý âm thanh số

84 1,7K 14
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây dựng chương trình xử lý âm thanh số
Trường học Trường Đại Học Khoa Học Tự Nhiên
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ án tốt nghiệp
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 84
Dung lượng 778 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu tham khảo đồ án tốt nghiệp chuyên ngành viễn thông xây dựng chương trình xử lý âm thanh số

Trang 1

Giới thiệu chung

1 Giới thiệu chung

Cùng với sự phát triển của cuộc cách mạng khoa học và công nghệ đang diễn ra một cách sôi động, chúng ta đang tiến dần tới thế giới của sự số hoá Với các u điểm của xử lý số, nhanh gọn, chính xác với chất lợng cao, mọi lĩnh vực hoạt động của xã hội loài ngời, nhất là các ngành trong các lĩnh vực thông tin liên lạc, phát thanh truyền hình đều tiến tới việc áp dụng một cách đồng

bộ và có hiệu quả các công cụ cũng nh các phép xử lý số Trong đó, âm thanh

là một lĩnh vực đặc biệt quan trọng, đây là một phơng thức dùng để trao đổi cũng nh cảm nhận tin, không chỉ là tiếng nói, bản nhạc mà đó là tất cả các âm

mà ta cảm nhận đợc trong cuộc sống hàng ngày, do đó, lĩnh vực về âm thanh không thể nằm ngoài xu hớng phát triển chung mà còn cần sự nghiên cứu sâu hơn nữa

2 Đặt vấn đề

Với âm thanh số, bằng việc lu trữ âm thanh dới dạng các dãy số, chúng

ta đạt đợc yêu cầu về tốc độ truyền cũng nh về khối lợng lu trữ và độ trung thực trong các phép xử lý nh khử nhiễu, soạn thảo hay các hiệu quả tạo độ vang, trễ Do vậy, ngoài các phơng tiện sử dụng kỹ thuật số, nh camera số, thiết bị ghi số, điện thoại số với chất lợng cao, thì những âm thanh tơng tự đ-

ợc ghi từ micro với các nhạc cụ truyền thống đều đợc chuyển đổi sang dạng số hoá

Hơn nữa, với âm thanh, chúng ta không chỉ quan tâm tới khả năng cảm nhận một cách trung thực nhất âm thanh tự nhiên, mà ta còn hớng tới việc tạo

ra (hay tổng hợp) đợc những âm thanh mà ta mong muốn Do đó, khi nói đến

âm thanh số thì cần thiết phải xét tới 3 khía cạnh:

• Các khuôn dạng lu trữ âm thanh với các đặc tính riêng biệt Đây là yêu cầu trớc tiên của bất kỳ quá trình thu thanh hay khi cần đọc dữ liệu để phân tích Cần phải hiểu rõ các đặc tính cả từng khuôn dạng thì mới có thể lu trữ một cách hiệu quả nhất

• Thao tác với các tệp âm thanh qua một trình soạn thảo âm thanh với các phép sao chép, cắt, dán, lọc, trộn âm hay chuyển đổi khuôn dạng tệp lu trữ cũng nh phơng thức lu trữ dữ liệu Đây là cách để chúng ta có thể cảm nhận đợc âm thanh một cách rõ nét

Trang 2

• Phân tích tín hiệu của âm thanh bằng cách biểu diễn dữ liệu âm thanh

d-ới dạng tín hiệu tuỳ theo mục đích phân tích Dữ liệu đọc từ tệp, sau đó qua các phép xử lý tín hiệu số nh lọc, hàm cửa sổ, biến đổi FFT, Cepstrum để có thể rút ra các tham số đặc trng, các thông tin cần thiết cho các quá trình nhận dạng hay tổng hợp âm sau đó

3 Chủ đề của luận án

Chính vì vậy, với đề tài “Xây dựng ch ơng trình xử lý âm thanh số” thì nhiệm vụ trớc tiên sẽ phải nghiên cứu, tìm hiểu các khuôn dạng lu trữ dữ liệu, sau đó xây dựng một chơng trình (xử dụng ngôn ngữ lập trình Delphi) để thao tác với các tệp âm thanh và phân tích tín hiệu của các âm thanh đó

Trang 3

Từ đó ta có định nghĩa: Tín hiệu số (Digital Signal) là tín hiệu rời rạc (theo biến độc lập thời gian) đồng thời có biên độ cũng rời rạc hoá (lợng tử hoá).

t

x32

-101

-2-3

Hình 2.1: Tín hiệu số

Theo định nghĩa trên, tín hiệu có vai trò là vật mang thông tin Nên tín hiệu cần phải đợc xử lý sao cho có thể dễ dàng rút ra các thông tin mong muốn hay lu trữ thông tin một cách tối u Cho nên việc phát triển các kỹ thuật cũng

nh các hệ thống xử lý tín hiệu đóng vai trò hết sức quan trọng Thông thờng các phép xử lý tín hiệu là các phép biến đổi tín hiệu thành dạng khác mong muốn, tuỳ theo yêu cầu thu nhận thông tin từ tín hiệu đó Ví dụ nh việc lọc bỏ nhiễu ra khỏi tín hiệu có ích, hay xác định thông số mang tin nào đó

2 Xử lý tín hiệu số (DSP - Digital Signal Processing)

Xử lý tín hiệu đợc sử dụng trong rất nhiều lĩnh vực khoa học khác nhau,

Trang 4

và xử lý âm thanh là một trong số đó Trong quá trình xử lý, các phép xử lý DSP chuẩn cơ bản là: FFT, lọc, thiết kế các bộ lọc thời gian, decimation, interpolation (nội suy), tích chập (convolution),

Các chức năng DSP (Digital Signal Processing) đợc thực hiện bởi soundcard tơng đơng với một tập các khả năng của phần cứng tổng hợp âm nhạc điện tử analog: trộn, lọc, điều chế tần số, biên độ và nén Tất cả các hiệu quả đợc tạo ra bằng cách dùng bộ trễ tín hiệu nh: vang, lặp đều có thể

sử lý bằng DSP Sự khác nhau là DSP (cả phần cứng và phần mềm) có thể thực hiện các chức năng trên dạng sóng số hóa Nhiều soundcard có tích hợp DSP

để tăng tốc độ xử lý

Việc phân tích và thiết kế của các hệ thống tuyến tính đã đợc thực sự

đơn giản hoá bởi các phép biểu diễn trong miền tần số của cả tín hiệu và hệ thống Trong đó biến đổi Fourier và biến đổi Z đóng vai trò quan trọng trong việc biểu diễn các tín hiệu và hệ thống rời rạc theo thời gian

2.1 Phép biến đổi Z

Nói chung, phép biến đổi Fourier là một công cụ mạnh để nghiên cứu tín hiệu số và tơng tự về cả mặt lý thuyết và thực hành Nhng đối với tín hiệu rời rạc, phép biến đổi Z đợc sử dụng rộng rãi hơn bởi đây là phép biến đổi mạnh về phơng diện lý thuyết

n

n

z n

Trang 5

Kết quả là: I =

00

01

=

l v

l v

ới

ới

Bằng cách nhân hai vế của biến đổi z với zl-1/2πj, lấy tích phân quanh gốc toạ độ và nằm trong vùng hội tụ, và sau đó can thiệp tích phân và tổng, ta

có biểu thức biến đổi z ngợc nh sau:

z ngợc thông qua việc phân tích một hàm phức tạp thành các hàm đơn giản

Quan hệ của phép biến đổi Z với phép biến đổi Fourier

Từ công thức định nghĩa phép biến đổi z (1.1), thay z=ej θ, tức là biểu diễn trong toạ độ cực, và với θ = 2πf

đơn vị Hay nói cách khác, trên đờng tròn đơn vị phép biến đổi z và Fourier là

So với phép biến đổi Laplace

Xét tín hiệu tơng tự Xa(t), phép biến đổi Laplace của tín hiệu này là:

Trang 6

So sánh biểu thức này với biến đổi z của tín hiệu x(n) = xa(nTs), ta thấy biến đổi Laplace của tín hiệu lấy mẫu là biến đổi z của tín hiệu số tơng ứng và

đợc tính với z = exp(s.Ts) Có nghĩa là: X(z) = Xe(s) với z = e s.T s

2.2 Biến đổi Fourier rời rạc (DFT - Discrete Fourier Transform)

DFT đợc sử dụng rộng rãi trong quá trình tính toán sự đánh giá phổ, các hàm tự tơng quan và việc cài đặt các bộ lọc số Đây là phép biến đổi Fourier rời rạc của tín hiệu x(n) có độ dài hữu hạn và có trục tần số cũng đợc rời rạc hoá Trong đó, tín hiệu x(n) có độ dài hữu hạn là tín hiệu có giá trị khác 0 trong một khoảng hữu hạn thời gian nào đó và chúng bằng 0 trong khoảng còn lại

Với x(n) đợc dùng nh là một chu trình của tín hiệu, ta có thể xây dựng tín hiệu xp(n) tuần hoàn với chu kỳ N bằng cách xếp chồng tuần hoàn x(n):

Khi xếp chồng tuần hoàn, nếu M ≤ N (với M = N2 - N1 +1, trong đó N1

và N2 là thời điểm mà trong đó tín hiệu tồn tại), thì hiện tợng trùm thời gian giữa các phần của xp(n) sẽ không xảy ra, nghĩa là có thể dễ dàng lấy ra x(n) ban đầu Lúc này tín hiệu x(n) có độ dài là N với các mẫu từ M tới N-1 có giá trị bằng 0

k với0

10

)

(

1 0

N n

nk

W n x

10

)

(

1 1 0

N k

nk

W k X

Trong đó X(k) là một chu kỳ của Xp(k), với Xp(k) là các mẫu trên đờng tròn đơn vị của biến đổi z một chu kỳ của xp(n), hay biến đổi Fourier X(f) của một chu kỳ của xp(n)

2.3 Lọc tín hiệu

Các bộ lọc đợc sử dụng để thay đổi giá trị tần số của âm thanh Đây là khâu xử lý cơ bản cho một chuỗi các bớc xử lý âm thanh tiếp theo Ví dụ nh,

Trang 7

quá trình lọc có thể là gỡ bỏ nhiễu ra khỏi quá trình thu thanh hay tách biệt một âm, giọng nào đó bằng cách chỉ cho các tần số xác định nào đó đi qua.

Chính vì vậy, lọc số là một ứng dụng quan trọng nhất của xử lý tín hiệu Các bộ lọc số đã dần dần thay thế các bộ lọc tơng tự Việc thiết kế các bộ lọc

số thực tế đều đi từ lý thuyết các bộ lọc số lý tởng

Các bộ lọc số tiêu biểu là:

• Bộ lọc số thông thấp (Low pass filter)

• Bộ lọc số thông cao (High pass filter)

• Bộ lọc số thông dải (Band pass filter)

• Bộ lọc số chắn dải (Band stop filter)

Trong đó, các bộ lọc đợc sử dụng để lọc tần số chính, nên tất cả các đặc trng của lọc tần số đều đợc cho theo đáp ứng biên độ

2.4 Hàm cửa sổ

Nh ta đã biết, phép biến đổi Fourier rời rạc DFT tác động trên tín hiệu

có độ dài hữu hạn, nên cần thiết phải hạn chế độ dài đối với các tín hiệu có độ dài vô cùng hoặc quá lớn để có thể nghiên cứu phổ của chúng Để làm điều này ta thờng dùng hàm cửa sổ, tức là nhân tín hiệu x(n) với cửa sổ w(n-n0) để nhận đợc một đoạn xN(n) trong khoảng n0 tới n0+N-1 để phân tích

x N (n) = x(n) w(n- n 0 ) =

lạicòn nvới0

1)

(n n0 n n0 N x

N một cách hợp lý thì sẽ không thể nhận đợc một kết quả phân tích tối u Khi

đó tốt nhất ta nên xem xét ở khía cạnh tần số để xác định N

Trang 8

2.5 Phép biến đổi nhanh Fourier (FFT - Fast Fourier Transform)

Đây thực chất là DFT nhng với một thuật toán nhanh, gọn và hiệu quả FFT đã tạo ra một bớc ngoặt mới và thực sự đóng vai trò hết sức quan trọng trong việc phân tích, thiết kế và thực hiện các thuật toán xử lý tín hiệu số cũng

nh tín hiệu tơng tự Tuy có nhiều thuật toán tính FFT khác nhau, nhng nguyên tắc chung của tất cả các thuật toán này là dựa trên việc phân tích cách tính DFT cuả một dãy N số (gọi tắt là DFT N điểm) thành các phép tính DFT của các dãy nhỏ hơn, trong đó số phép tính tỷ lệ với N.log(N)

Trong các cách tính này, FFT có 2 lớp cơ bản: thuật toán FFT đợc phân chia theo thời gian và phân chia theo tần số Cả hai thuật toán đều sử dụng phép tính toán tại chỗ (in place), và số phép nhân phức trong cả hai thuật giải

là nh nhau Sự khác nhau cơ bản giữa hai cách tính là thứ tự xắp xếp dữ liệu

đầu vào và đầu ra

Thông thờng, ta xét tới 2 cách tính FFT: tính FFT thuận và FFT ngợc Bắt đầu từ cặp công thức biến đổi Fourier rời rạc thuận và ngợc:

X(k) = ∑−

=

1 0

N k

N k

kn N

W k

Tóm lại, để tính FFT ngợc từ chơng trình tính FFT thuận ta thực hiện các bớc sau:

• Lấy liên hợp phức của X(k) bằng cách đổi dấu phần ảo của X(k)

• Tính FFT của dãy X(k) đã đổi dấu

• Đổi dấu phần ảo của kết quả thu đợc, sau đó chia dãy cho hệ số tỷ lệ N

Trang 9

để có kết quả cuối cùng.

2.6 Cepstrum

Phép biến đổi tín hiệu sang dạng Cepstrum tơng ứng là một phép biến

đổi homomorphic, phép giải các bài toán không tuyến tính bằng các công cụ toán tuyến tính đã biết Cepstrum là từ đảo của từ Spectrum (phổ) có nghĩa là chúng ta đang tiếp tục thực hiện việc phân tích phổ nào đó trên một phổ tần số Khái niệm về Cepstrum là một phần cơ bản của lý thuyết trong các hệ thống homomorphic cho quá trình xử lý tín hiệu

Ngoài ra, ta có khái niệm: Cepstrum phức có nghĩa là biến đổi ngợc Fourier (hay Z) của logarit tự nhiên phức của phổ phức; và Cepstrum thực là phép biến đổi của Fourier ngợc của logarit thực của biến đổi Fourier của hàm

đó

Hệ thốnghomomorphic

Trang 10

Chơng 2

giới thiệu chung về âm thanh số

1 Âm thanh và đặc tính của âm thanh

1.1 Sóng âm và cảm giác âm

Khi một vật dao động về một phía nào đó, nó làm cho các lớp không khí liền trớc bị nén lại, và lớp không liền sau dãn ra Sự nén và dãn không khí nh vậy lặp đi lặp lại một cách tuần hoàn nên đã tạo ra trong không khí một sóng

đàn hồi Sóng này truyền tới tai, nén vào màng nhĩ khiến cho màng nhĩ cũng dao động với cùng tần số Khi màng nhĩ dao động, các vị trí phân biệt của màng nhĩ trên bề mặt giống nh nó chuyển động về trớc hay sau đáp ứng với các sóng âm vào Khi cùng một thời điểm, ta nghe thấy nhiều âm, thì mọi âm thanh phân biệt này đợc trộn với nhau một cách tự nhiên trong tai giống nh một hình mẫu đơn của áp suất không khí thay đổi Tai và óc làm việc cùng nhau để phân tích tín hiệu này ngợc lại thành những cảm giác về âm riêng biệt

1.2 Độ cao của âm

Độ cao của âm là một đặc tính sinh lý của âm và nó phụ thuộc vào một

đặc tính của âm là tần số Những âm có tần số khác nhau, tạo nên cảm giác về các âm khác nhau: âm có tần số lớn gọi là âm cao hay âm thanh; âm có tần số nhỏ gọi là âm thấp hay âm trầm Sự cảm nhận về mức độ to nhỏ của âm thanh

đợc gọi là cờng độ (pitch) Và cờng độ có liên quan rất gần với một thuộc tính

Trang 11

của cờng độ âm I, mà xét theo mức cờng độ âm L.

Tức là: L(B) = lg(I/I0) , với I0 là một giá trị chuẩn nào đó

Thông thờng, L lấy đơn vị là deciben (ký hiệu là dB) Với L=1dB (I lớn gấp 1,26 lần I0) là mức cờng độ nhỏ nhất mà tai ta có thể phân biệt đợc

Âm lợng của âm

Để có thể tạo ra cảm giác âm, cờng độ âm phải lớn hơn một ngỡng nào

đó Với các tần số trong khoảng 1000-5000Hz, ngỡng nghe khoảng 10-12W/

m2 Với tần số 50Hz thì ngỡng nghe lớn gấp 105 lần Và mức âm lợng của âm phụ thuộc vào cả cờng độ âm và tần số

1.4 Âm sắc của âm

Âm sắc là một đặc tính sinh lý của âm và nó đợc cấu thành trên cơ sở các đặc tính vật lý của âm là tần số và biên độ Đây là một đặc trng riêng của từng nguồn phát âm Khi một nguồn phát ra một âm có tần số f1, thì đồng thời cũng phát ra các âm có tần số f2=2* f1, f3=3* f1

Âm có tần số f1 gọi là âm cơ bản hay hoạ âm thứ nhất Các âm có tần số

f2, f3, gọi là các hoạ âm thứ hai, thứ ba Tuỳ theo đặc tính của từng nguồn phát âm mà tạo ra các hoạ âm khác nhau với biên độ hay khoảng kéo dài khác nhau Do đó âm do một nguồn âm phát ra là sự tổng hợp âm cơ bản và các hoạ

âm Nên, mặc dù có cùng tần số f1 của âm cơ bản nhng đờng biểu diễn không còn là một đờng hình sin đơn thuần mà là một đờng phức tạp có chu kỳ

2 Âm thanh số

Dạng chung nhất của các quá trình thu âm thanh số là dạng điều biến mã xung (PCM - Pulse Code Modulation) Đây là dạng mà phần lớn các đĩa compact và các tệp Wave sử dụng Trong phần cứng thu thanh dạng PCM, một microphone chuyển dạng biến đổi áp suất không khí (các sóng âm thanh) thành dạng biến đổi điện áp Sau đó một bộ chuyển đổi tơng tự-số đo (mẫu hoá) dòng điện áp tại các quãng thời gian đều nhau Ví dụ nh, trong một đĩa compact có tới 44,100 mẫu đợc lấy mỗi giây Mỗi điện áp mẫu hoá nhận đợc

sẽ đợc chuyển đổi sang dạng số nguyên 16-bit Một đĩa CD chứa 2 kênh dữ liệu: một cho tai trái, và một cho tai phải (đối với âm thanh dạng stereo) Hai kênh đợc thu thanh độc lập, đợc đặt theo cạnh (side) trên đĩa compact (dữ liệu cho các kênh trái và phải luân phiên nhau trái, phải, trái, phải, ) Dữ liệu nhận đợc từ quá trình thu thanh PCM là một hàm theo thời gian

2.1 Nguyên lý

Về cơ bản, âm thanh tơng tự và số là khác nhau, nên ta luôn bị mất thông tin khi làm phép chuyển đổi giữa chúng Khi đợc số hoá, sóng âm thanh

đợc biểu diễn nh là một chuỗi các số (đợc gọi là các mẫu), mà chúng biểu diễn

áp suất không khí hay tín hiệu điện tại các thời điểm kế tiếp nhau theo thời gian Khi mẫu hoá một tín hiệu tơng tự, ta luôn gặp phải 2 vấn đề: thứ nhất, mỗi giá trị kế tiếp trong dạng biểu diễn dạng số là một quãng xác định nào đó

Trang 12

của thời gian, và mỗi khối có một độ rộng xác định; thứ hai là các số số hoá là rời rạc Chỉ có một số xác định các độ cao có thể cho mỗi khối Theo hình vẽ,

ta thấy độ cao các khối không ăn khớp với đờng tín hiệu gốc

Hình 2.3: Chuyển đổi tín hiệu sang dạng các mẫu số

Đây là hai lỗi cơ bản trong tín hiệu âm thanh số Lỗi này có thể đợc kiểm soát bằng cách thay đổi khuôn dạng chi tiết của dạng biểu diễn âm thanh, nhng không thể loại bỏ đợc hoàn toàn Chính vì vậy, tuỳ theo ứng dụng ta sẽ phải chấp nhận một số lỗi nhất định Và các hệ số khác nh kích thớc dữ liệu hay tần số xử lý yêu cầu ta phải chấp nhận một sai số lớn hơn từ một số nguồn

để có thể giảm hơn nữa các sai số khác

2.2 Tần số và cờng độ

Tần số của một sóng hình sin là khoảng thời gian mà nó dùng cho một chu kỳ hoàn chỉnh Tần số đợc tính theo hertz (Hz), là số các chu kỳ hoàn chỉnh mà chúng xuất hiện trong một giây Tai ngời có thể nghe thấy các sóng hình sin có tần số dao động trong khoảng 30 Hz tới 20.000 Hz Những dao

động trong miền tần số này gọi là dao động âm hay âm thanh

Chu kỳ (periodic) là nghịch đảo của tần số, là khoảng thời gian mà tín hiệu lặp lại một cách chính xác Mặc dù rất nhiều hàm toán học đợc sử dụng

để làm việc với âm thanh dựa trên các tín hiệu lặp một cách lý tởng, đặc biệt là phép biến đổi Fourier, nhng lại có rất ít các âm thanh thực là thực sự tuần hoàn Trong thực tế, tần số chỉ có ý nghĩa trực tiếp cho các sóng hình sin

Tuy nhiên, mọi âm thanh đều có thể làm vỡ thành một tập các sóng hình sin Ta có thể tạo bất cứ âm thanh nào bằng cách thêm vào một tập các sóng hình sin phù hợp, cũng nh có thể chia các âm thanh phức tạp thành các sóng hình sin riêng biệt, đơn giản

Ngoài ra, trong quá trình thu thanh số hoá, cần chú ý tới biên độ đỉnh để

có thể tránh sự méo cắt (mà nó xuất hiện khi biên độ đỉnh vợt quá khuôn dạng

lu trữ) trong khi giữ tỷ lệ tín hiệu/nhiễu ở mức cao nhất có thể

Trang 13

• Lợng tử hoá (quantization): Quá trình xử lý các mẫu tơng tự với độ chính xác không xác định và làm tròn chúng.

3.1 PAM (Pulse Amplitude Modulation)

Trong thực tế, các bộ chuyển đổi DAC và ADC thờng xuyên sử dụng dạng PAM (Pulse Amplitude Modulation) nh một khuôn dạng trung gian, trong đó âm thanh đợc coi nh một chuỗi các xung, và biên độ của mỗi xung (độ cao) biểu diễn độ mạnh của âm thanh tại điểm đó

Hình 2.4: PAM

3.2 PWM (Pulse Width Modulation)

Ngoài ra, ta còn dạng biểu diễn khác là PWM (Pulse Width Modulation), cũng giống nh PAM, đây là dạng biểu diễn mỗi mẫu nh một xung, nhng nó sử dụng độ rộng hay khoảng kéo dài của xung (thay cho biên

độ) để biểu diễn độ mạnh của âm thanh

Trang 14

Tín hiệu tương tự Xung PWM

Hình 2.5: PWM

3.3 PCM (Pulse Code Modulation)

Đây là dạng biểu diễn mỗi mẫu nh một chuỗi các xung, mà các xung đó biểu diễn mã nhị phân (code binary) của nó Nhng biểu diễn dạng này rất khó xác định đâu là điểm bắt đầu và kết thúc của mỗi mã Tuy nhiên, không khó khăn để có thể khắc phục điều này, ví dụ nh ta có thể xây dựng các mã theo một dạng riêng để không có mã nào chứa 3 số 1 liên tiếp (111) và sau đó chèn

111 vào tín hiệu tại điểm bắt đầu của mỗi mã Trong bộ nhớ máy tính, các mã nhị phân liên tiếp đợc lu trữ nh các số Thông thờng, dữ liệu âm thanh dạng PCM đợc lu trữ với 8 hay 16 bits (1 hay 2 bytes) mỗi mẫu

Trang 15

cách chính xác bất cứ âm thanh nào mà tần số của nó nhỏ hơn một nửa tần số lấy mẫu Do đó, một nửa tần số lấy mẫu thờng xuyên đợc tham chiếu nh một giới hạn Nyquist (Nyquist limit).

Khi xét tới âm thanh số, ta phải xét tới hiệu ứng “aliasing” bởi có thể có nhiều sóng hình sin có thể phát sinh ra các mẫu nh nhau nên có khả năng chọn nhầm tín hiệu Đối với quá trình thu thanh thì điều đó không quan trọng bởi một bộ lọc thông thấp đợc kèm vào quá trình chuyển đổi số-tơng tự sẽ gỡ bỏ các thành phần tần số cao Tuy nhiên, đó thực sự là một vấn đề trong quá trình tổng hợp âm thanh số

Thông thờng, nên làm việc trên các tệp âm thanh với dạng dữ liệu không nén Một khi đã nén, chơng trình xử lý sẽ phải giải nén mỗi khi sử dụng,

và với bất cứ lu đồ (giải thuật) nén nào cũng đều gây nguy hiểm tới chất lợng

âm thanh, không kể đến thời gian dùng để giải nén Vì thế các tệp âm thanh số dùng để phát lại (playback) không nên sử dụng dạng nén

• Dạng MIDI: khuôn dạng đơn giản, kích thớc nhỏ, thuận lợi trong việc soạn thảo âm thanh, nhng chất lợng phụ thuộc vào thiết bị

Nói chung, các tệp âm thanh số đợc lu trữ trong một khuôn dạng tơng ứng với header của loại đó Một số khuôn dạng nh sau:

AU: là các tệp có đuôi au Hỗ trợ các tệp dạng mono và stereo với độ phân giải từ 8bit tới 16bit, tần số lấy mẫu trong khoảng 8KHz tới 48KHz Nguyên gốc trên nền UNIX, song cũng hỗ trợ bởi các ứng dụng PC và MAC

AIFF: là các tệp có đuôi aif (Audio Interchange File Format) Hỗ trợ tệp âm thanh không nén dạng mono, stereo hoặc khuôn dạng đa kênh (multichannel) Độ phân giải và tần số lấy mẫu trong phạm vi rất rộng, đạt tới chất lợng CD (16bit, lấy mẫu 44KHz) Nguyên gốc trên nền Macintosh nhng cũng hỗ trợ trên PC và UNIX

WAV: là các tệp có đuôi wav (Waveform Audio) Hỗ trợ dạng mono, stereo, hoặc khuôn dạng đa kênh với tần số lấy mẫu 44KHz, 16bit mẫu Khuôn dạng WAV nguyên gốc trên nền Windows, hiện nay đây là dạng tệp âm thanh phổ biến trên Internet WAV tơng tự cấu trúc aif nhng khác phần đầu thông

Trang 16

tin (header).

MID: là các tệp có đuôi mid (Musical Instrument Data Interchange)

Hỗ trợ dữ liệu Standar MIDI File (SMF) trên hệ thống trang bị MIDI playback (với một số khuôn dạng âm thanh tổng hợp)

Không có yêu cầu thiết lập đặc biệt nào đối với các bộ duyệt (browser) các tệp âm thanh đợc lu trữ trong một khuôn dạng đặc biệt với tần số lấy mẫu

và độ phân giải riêng biệt Phần đuôi (phần mở rộng của tệp) và header của tệp

đợc chèn vào một cách tự động khi thực hiện lu tệp, ngoài ra còn có các thông tin bộ duyệt cần thiết để khởi đầu khi phát lại

4.2 Chuyển đổi khuôn dạng

Có nhiều trình ứng dụng có thể chuyển đổi các tệp âm thanh số từ kiểu này sang kiểu khác Hầu hết các chơng trình xác định khuôn dạng tệp âm thanh qua phần mở rộng của tệp Tuy nhiên, nên xác định qua các khuôn dạng tệp Các công cụ chuyển đổi có AWave và SoX

AWave

Với một máy PC chạy Windows 95, AWave là một bộ chuyển đổi tệp

âm thanh Nó không chạy trên Win 3.1 thậm chí với mã mở rộng win32 Nếu chỉ có một máy tính cũ và bộ soạn thảo dạng sóng âm thanh không cho phép lu tệp âm thanh trong một khuôn dạng đặc biệt, tốt nhất nên dùng SoX

SoX

SoX là viết tắt của Sound Exchange, bộ dịch tệp tổng hợp chấp nhận nhiều khuôn dạng tệp khác nhau, bao gồm au, hcom, raw, st, voc, auto, cdr, dat, wav, aif, snd và các dạng khác Các phiên bản của SoX tơng thích trên Unix và Dos Nó xác định khuôn dạng tệp từ đuôi tệp song nó cũng tự

động xác định các đặc điểm SoX cũng có thể chuyển đổi tần số lấy mẫu và các phép xử lý hiệu ứng âm thanh Ví dụ nh chuyển tệp au thành wav với dòng lệnh sau:

sox filename.au filename.wav

Trang 17

có rất nhiều kiểu dữ liệu Nó tổ chức trên các máy tính Sun giống nh sự kết xuất (dump) của dữ liệu âm thanh à-Law Sau đó các header cơ sở đợc thêm vào để làm cho việc định danh các tệp này đợc dễ dàng hơn và để cho việc chỉ

định dạng âm thanh một cách rõ ràng Dạng đợc biết đến nh SND trên các máy tính NeXT

Thuận lợi cơ bản của Au là tính đơn giản Header định danh mọi tham

số quan trọng, và dữ liệu âm đợc lu giữ nh một khúc đơn Nên việc viết mã lệnh để đọc header của tệp Au là đơn giản Bất lợi duy nhất là header kèm vào

độ dài tổng thể của dữ liệu âm thanh, mà độ dài dữ liệu này thờng không đợc biết trớc Để giải quyết vấn đề này, trong chơng trình đọc dữ liệu tệp Au, ta thiết lập một độ dài giả tạo ở mức cao, và thêm một biến kiểm tra để dừng ch-

ơng trình khi đã đọc đến cuối tệp hay khi vừa đọc hết độ dài giành riêng Thông thờng, không nên thiết lập độ dài dữ liệu âm thanh về 0

Sau đây là khuôn dạng của Au header:

Độ dài Mô tả

4 Magic string: snd

4 Định vị của dữ liệu âm thanh từ đầu tệp (ít nhất là 28)

4 Số bytes của dữ liệu âm thanh

Trang 18

Phần lớn các tệp Au chứa header nh minh hoạ trên Đặc biệt 4 bytes đầu

là “.snd” Có nhiều tệp cũ hơn mà bản thân chúng định danh nh dạng Au (chúng sử dụng phần mở rộng au), nhng chúng không có phần header này Sau đây là một vài mã hoá dạng âm thanh đợc dùng cho các tệp Au

7 Double-precision float sampled

8 Fragmented sampled data

10 DSP program

11 8-bit fixed-point samples

12 16-bit fixed-point samples

13 24-bit fixed-point samples

14 32-bit fixed-point samples

18 16-bit linear with emphasis

19 16-bit linear compressed

20 16-bit linear with emphasis and compression

21 Music kit DSP commands

Nói chung, dạng Au là dạng tệp lu trữ rất đơn giản nên ta thờng chuyển

đổi các tệp âm thanh sang dạng Au và sau đó sử dụng nó nh một dạng cơ sở cho các quá trình xử lý tiếp theo

Trang 19

1.2 Voc

Dạng của Sound Blaster và Sound Blaster Pro Đây là dạng chỉ đáp ứng các âm 8-bit; dạng đơn (mono) cho 44.1 kHz, và các âm nổi (stereo) cho 22 kHz Các tệp Voc có thể chứa thông tin cho sự lặp lại và tính trầm (silence)

Tệp Voc bao gồm một header với các khối dữ liệu theo sau Một vài khối dữ liệu chứa dữ liệu âm thanh hiện thời; những khối khác chứa các thông tin về định dạng hay dữ liệu trợ giúp khác Khởi đầu tệp Voc đợc thiết kế cho các bộ xử lý họ Intel, mọi số dạng “multi-byte” đợc lu trữ khởi đầu với byte thể hiện ít nhất

Định danh tệp Voc

Mọi tệp Voc bắt đầu với một ký hiệu dài 20-byte, chứa các từ “Creative Voice File” và đặc tính Control-Z Đặc tính Control-Z là dấu hiệu cuối tệp (end-of-file) cho MS-DOS; sự hiển diện của nó đảm bảo rằng toàn bộ tệp không thể đợc in hay soạn thảo một cách ngẫu nhiên trên hệ thống đó

Voc Header

Header chứa một giá trị ký hiệu (signature value) và một phiên bản tệp Chú ý rằng giá trị 26 (hex 1A), là một dấu hiệu kết thúc tệp trong các hệ thống MS-DOS Thông thờng, mã hoá phiên bản tệp là 266 (phiên bản 1.10) hay 267 (phiên bản 1.20)

Sau đây là Voc Header:

19 Xâu ký tự định danh: Creative Voice File

1 Byte value 26 (MS-DOS end-of-file)

2 Kích thớc tổng của header, thờng là 26

2 Mã hoá phiên bản tệp: phần chính*256+phần phụ

2 Check value: 4,659 - phiên bản tệp

Khi cài đặt, do header có thể đợc mở rộng nên cần thiết bỏ qua bất cứ dữ liệu nào mà nó có thể theo sau các thông tin chuẩn

Các khối dữ liệu

Để xử lý một tệp Voc, cần phải đọc và xử lý các khối dữ liệu theo trình

tự mà chúng xuất hiện trong tệp Có một vài trờng hợp mà trong đó các khối khác nhau có thể chỉ định cùng một dữ liệu; sự chỉ định đầu tiên thờng gối lên các phần tiếp theo

Trang 20

Sau đây là khuôn dạng của một khối dữ liệu của tệp Voc:

Khối dữ liệu âm thanh (dạng 1)

Khối dữ liệu âm thanh bắt đầu với 2 bytes chỉ định tần số lấy mẫu và phơng thức nén Tiếp theo đó là dữ liệu âm thanh thực sự Mã hoá tần số lấy mẫu đợc tính toán từ tần số lấy mẫu với công thức: 256 - (1,000,000/tần số lấy mẫu)

Sau đây là các mã hoá phơng thức nén:

512 Creative Labs 16-bit to 4-bit ADPCM

Chú ý rằng, các giá trị trên 3 là chỉ sử dụng cho các khối mở rộng dạng

9 Và, một tệp Voc có thể chỉ chứa duy nhất một khối dữ liệu âm thanh Dữ liệu âm thanh thêm vào có thể đợc lu trữ trong một khối âm liên tiếp

Khi đọc dữ liệu, cần quan tâm tới dữ liệu âm thanh gốc (âm thanh cha

đợc xử lý) từ tệp, cần phải biết số bytes dữ liệu gốc dữ lại trong khối hiện thời Dạng Voc đã đợc phát triển thêm bằng cách thêm vào các dạng khối mới mà

Trang 21

nó định rõ khối âm thanh Nên cần thận trọng để không viết đè lên bất cứ tham

số nào mà có thể nó đã đợc thiết lập bởi một khối trớc đó

Khối âm thanh liên tiếp (dạng 2) (Sound Continuation Block)

Một tệp Voc có thể chỉ có một khối dữ liệu âm thanh dạng 1 Tuy nhiên, dữ liệu âm thanh có thể cần phải đợc làm vỡ ra qua các khối multiple

Điều này thờng xuyên xuất hiện bởi ta muốn chèn thêm vài dạng khối khác (nh một dấu hiệu vòng lặp) trong phần giữa của dữ liệu âm thanh Dữ liệu âm thanh tiếp theo đợc lu trữ trong các khối âm thanh liên tiếp dạng 2 Khối âm thanh liên tiếp chỉ chứa dữ liệu về mẫu âm thanh Nó không lặp lại bất cứ thông tin định dạng nào từ khối dạng 1 trớc đó

Khối trầm (dạng 3) (Silence Block)

Với mục đích để giảm kích thớc tổng của dữ liệu, một vài phân đoạn có thể đợc thay thế bởi các khối trầm (silence blocks), biểu thị một quãng trầm Dữ liệu của khối này chứa một số kích thớc 2-byte biểu thị số các mẫu của quãng trầm để sử dụng và 1 byte chứa mã tần số lấy mẫu Theo lý thuyết, điều này cho phép quãng trầm sử dụng một tần số lấy mẫu khác so với âm thanh Nhng trong thực tế, tần số lấy mẫu đợc sử dụng ở đây nên đồng nhất với tần số lấy mẫu của âm thanh trớc đó

Khối đánh dấu (dạng 4) (Marker Block)

Dữ liệu cho khối đánh dấu là một số kích thớc 2-byte Số này có thể đợc

sử dụng bởi các ứng dụng multimedia cho việc đồng bộ các sự kiện Ví dụ, một ứng dụng về sự trợt có thể thay đổi sự hiển thị mỗi lần nó thấy khối đánh dấu để quá trình trợt ăn khớp với quá trình biểu diễn âm thanh Các giá trị trong khoảng 0 tới 65,536 đợc bảo lu và không nên đợc sử dụng

Khối văn bản (dạng 5) (Text Block)

Dữ liệu là một xâu ký tự dạng null-terminated của dữ liệu dạng ASCII Dạng này có thể đợc sử dụng để lu trữ thông tin về quyền tác giả hay các dữ liệu dạng văn bản khác

Vòng lặp (dạng 6 và 7) (Repeat Loops)

Các khối dạng 6 và 7 đợc sử dụng để cài đặt vòng lặp trong một tệp Voc Khối dạng 6 đợc đặt tại phần đầu của phân đoạn đợc lặp, và khối dạng 7

đánh dấu sự kết thúc của vòng lặp Dữ liệu cho dấu hiệu bắt đầu bao gồm một

số kích thớc 2-byte chỉ định lợng thời gian thêm vào mà phân đoạn này nên

đ-ợc lặp (một số đếm 0 có nghĩa là dữ liệu nên chỉ đđ-ợc phát một lần) Khối kết thúc không có dữ liệu

Khối mở rộng (dạng 8) (Extension Block)

Khối mở rộng dạng 8 không có trong các phiên bản trớc đây của tệp Voc Nó đã đợc thêm vào để đáp ứng cho các tệp âm thanh dạng stereo Khi xuất hiện, nó luôn ở trớc khối dữ liệu âm thanh dạng 1, và nó ghi đè lên tần số lấy mẫu và thông tin nén trong khối dữ liệu âm thanh

Trang 22

Sau đây là cấu trúc dữ liệu khối mở rộng dạng 8:

là nh nhau Thông tin duy nhất thực sự mới là số các kênh truyền Với dữ liệu

âm thanh dạng stereo, dữ liệu âm thanh trong các khối dạng 1 và 2 sẽ luân phiên các mẫu trái và phải

Thông thờng 2-byte mã hoá tần số lấy mẫu đợc tính toán theo công thức 65,536 - 256(1,000,000/tần số lấy mẫu) Tuy nhiên, cho các âm thanh dạng stereo, nên gấp đôi tần số lấy mẫu trớc khi sử dụng dạng này Sự thay đổi này dẫn đến chơng trình không hiểu đợc phần cuối mở rộng này trong khi phát các mẫu đợc chèn vào tại tần số chủ yếu giành cho âm thanh Cho sự tơng thích về sau, mã hoá tần số lấy mẫu trong khối dữ liệu âm thanh dạng 1 nên thờng xuyên đợc thiết lập cho byte bậc cao của mã hoá tần số lấy mẫu này

Khối mở rộng (dạng 9) (Extension Block)

Giống nh khối mở rộng dạng 8, khối dạng 9 đã đợc giới thiệu để thêm vào các khả năng mới Đặc biệt, khối dạng 9 đáp ứng các phơng thức nén phụ

và lu trữ thông tin về dạng âm thanh theo kiểu trực tiếp hơn Khi xuất hiện, nó

ở trớc khối dạng 1 hay 8 và thông tin trong nó chèn lên thông tin trong các khối này

Khối dạng 9 lu trữ thông tin âm thanh theo kiểu mà nó khác xa so với các khối dạng 1 hay 8 Đặc biệt, tần số lấy mẫu đợc lu trữ một cách trực tiếp hơn so với quá trình đợc mã hoá Hơn nữa, tần số lấy mẫu không đợc điều chỉnh cho số các kênh truyền Trờng số bits cho mỗi mẫu (bits-per-sample) sẽ xắp xếp từ 2 (cho dữ liệu đã đợc nén) tới 16 (cho dữ liệu PCM dạng 16-bit) Còn lại 4 bytes cuối cùng đợc dành cho sự mở rộng sau đó

Cho sự tơng thích về sau, nếu có thể, nên tạo một khối dạng 8 theo sau các khối dạng 9 Tuy nhiên, do khối dạng 9 đa vào một loạt các mã hoá phơng thức nén mới nên điều này không phải thờng xuyên có thể thực hiện đợc

Sau đây là cấu trúc dữ liệu của khối mở rộng dạng 9:

Trang 23

Độ dài Mô tả

4 Tần số lấy mẫu

1 Số bits dùng cho mỗi mẫu

1 Số kênh truyền: 1- mono; 2 - stereo

2 Mã phơng thức nén

4 Phần mở rộng

Đọc tệp Voc

Hiện nay, chỉ khối có giá trị trong khoảng từ 0 tới 9 là đợc định danh

Do đó, nên bỏ qua bất cứ khối không đợc nhận dạng nào

Khi đọc các khối, cần thiết phải quét qua các khối dữ liệu đầu tiên để nhận đợc các tham số cần thiết về định dạng dữ liệu Điều này chỉ có nghĩa là quá trình đọc các khối kế tiếp cho tới khi tìm thấy một khối dữ liệu âm thanh hay khối kết thúc Và do có một chuỗi các dạng khối mà chúng có thể định rõ các tham số về âm thanh, nên cần lu lại các giá trị này để thiết lập

Nói chung, việc đọc phần lớn các tệp Voc mà chúng chỉ chứa dữ liệu PCM trở nên đơn giản hơn so với các tệp khác chèn thêm các khối trầm (silence blocks), các khối không bị nén, và dữ liệu âm thanh thông thờng cần

đợc giải mã Để thực hiện việc đọc này, có thể quan sát dạng khối hiện thời và quyết định, hoặc bỏ qua nó (nếu không chứa dữ liệu âm thanh), điền đầy vào

bộ nhớ đệm các mẫu 0 (đối với các khối trầm), hay yêu cầu dữ liệu từ bộ giải nén

1.3 Wave/ Riff

Đây là dạng của Microsoft Windows Các tệp Wave của Windows ứng dụng cho cả 2 dạng tệp âm thanh nổi (stereo) và dạng đơn (mono) với một tập các độ phân giải và tần số lấy mẫu Kiểu tệp này cho phép sự định rõ RIFF (Resource Information File Format), và cho phép thông tin phụ của ngời sử dụng đợc nhúng vào và đợc ghi cùng với tệp âm thanh Dạng âm thanh PCM dùng cho Windows chuẩn chứa dữ liệu đã đợc mã hoá, dữ liệu đã đợc định dạng theo kiểu điều biến mã xung dạng không bị nén

Do dạng tệp Wave là một dạng âm thanh tự nhiên đợc Microsoft Windows sử dụng, nên nó trở thành một trong các dạng âm thanh phổ biến nhất Nói chung, cấu trúc của nó đợc phát triển dựa trên dạng khởi đầu Interchange File Format (IFF) đợc Electronic Arts phát triển cho việc sử dụng trên Amiga IFF cũng định hình khuôn dạng cơ sở của dạng âm thanh Aiff của Apple

Tiếp theo IFF, Microsoft định nghĩa một dạng tệp chung đợc gọi là Resource Interchange File Format (RIFF) Tệp Riff đợc tổ chức nh một tập các khúc gài vào nhau Và hai biến dạng chung là: tệp Wave (hay Wav) lu trữ âm

Trang 24

thanh; và tệp AVI lu trữ các hình ảnh video.

Đặc tính chung của các tệp Riff và Iff

Do tệp Wave là một dạng đặc biệt của tệp Riff, nên trớc hết ta nói về những đặc trng cơ bản cơ bản của dạng RIFF Trong đó ta chú tâm tới các biến thể IFF khác, bao gồm Aiff và IFF/8SVX

Một tệp Riff bao gồm một tập hợp các khúc xếp chồng Mỗi khúc chứa một mã độ dài 4 ký tự (nh RIFF, fmt, hay LIST; các mã ngắn hơn đợc chèn thêm các khoảng trống) Mã này chỉ định khuôn dạng của khúc Ví dụ, một khúc fmt chứa các thông tin về khuôn dạng âm thanh Tiếp theo đó là dạng khúc với một giá trị kích thớc 4-byte, chỉ ra kích thớc của dữ liệu đợc khúc đó mang theo Trờng kích thớc trong khúc RIFF ít hơn kích thớc tệp tổng thể 8-bytes do không tính đến dạng khúc và kích thớc

Một vài dạng khúc, nh các khúc RIFF và LIST, đợc gọi là các

“container chunks” mà chúng chứa đựng các khúc khác Dữ liệu của

"container chunk" bắt đầu với một mã độ dài 4 ký tự chỉ ra dạng của dữ liệu chứa trong khúc đó Ví dụ, khúc RIFF trong minh hoạ trên có mã là WAVE, chỉ ra rằng nó chứa các dữ liệu về âm thanh Các tên khúc bên trong có thể có nghĩa khác nhau, phụ thuộc vào các container xung quanh Do khúc fmt đợc chứa trong RIFF Wave container, nên nó chỉ định khuôn dạng của dữ liệu âm thanh Trong một dạng container khác, nó có thể chứa các thông tin khác

Cấu trúc tổng quát của một tệp Wave

Đây là khuôn dạng phổ biến nhất để lu 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 Microsft Windows Tệp Wav lu giữ các mẫu dạng sóng của một hoặc nhiều kênh theo các tần số lấy mẫu Tệp Wav tự mã hoá 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 4GB

Một tệp Wave là một dạng đặc biệt của tệp Riff, 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 (Microsoft’s Resouce Interchange File Format), nên cấu trúc gồm các phần nhỏ gọi là khúc (chunk) Có hai loại khúc đợc dùng trong tệp Wav: 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 sau:

Trang 25

trình xử lý các tệp Wave giống nh chúng có 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 Sau đây là mô tả dạng tệp Wave cơ bản:

4 Độ dài dữ liệu âm thanh

n Các mẫu âm thanh hiện thời

Tệp Wave có thể có các khúc khác trong chúng Đặc biệt, khúc dữ liệu

đơn đôi khi đợc thay thế bằng bởi một LIST container mà nó chứa các khúc slnt (chỉ ra các quãng trầm) và các khúc dữ liệu với các dữ liệu âm thanh

Đọc tệp Wave

Trong dạng IFF gốc, cần thấy rõ rằng các khúc khác nhau có thể xuất hiện theo bất cứ thứ tự nào Vì vậy, rất có thể một vài dạng tệp Wave có thể có khúc dữ liệu âm thanh trớc khúc định dạng Và, sự thể hiện của bất kỳ khúc nào đều phụ thuộc vào cả dạng của khúc và dạng của container kèm theo Nguyên tắc chung của RIFF và các dạng tơng tự là nên bỏ qua bất cứ khúc nào

mà ta không thể nhận dạng đợc

Một cách để truy cập những tệp nh vậy là đọc lớt toàn bộ tệp và tạo ra một sự ánh xạ trong bộ nhớ với sự định vị và dạng của mỗi khúc Sau đó, có thể định vị các khúc một cách riêng biệt tuỳ theo yêu cầu Tuy nhiên, sự tiếp cận này, mặc dù chi tiết, nhng lại có một trở ngại lớn: nó yêu cầu phải có sự hiệu lực toàn bộ tệp ngay lập tức Đặc biệt, nếu ta quan tâm tới quá trình truyền một tệp Wave qua mạng và quá trình phát nó giống nh dữ liệu đợc nhận, ta có thể bỏ qua toàn bộ tệp và định vị các khúc trớc khi ta bắt đầu phát

Ngoài ra, có một cách tiếp cận khác, thay vào việc ánh xạ sự định vị cho mỗi khúc, ta có thể đọc tệp từ phần đầu cho tới cuối và xử lý các khối ngay trong quá trình đọc

Và, trong các tệp Riff (nh trong mọi dạng IFF-derived file), mỗi khúc chiếm giữ một số bytes trong tệp Nếu kích thớc của khúc hiện thời là lẻ, thì sẽ

có một byte phụ của phần thêm vào cần đợc bỏ qua Và có thể, khúc mà chúng

ta vừa xoá lại là khúc cuối cùng của container của nó Do đó, nếu bất cứ

Trang 26

container còn lại ít hơn 8-bytes thì cần phải đợc kết thúc bởi vì một header của khúc yêu cầu ít nhất 8 bytes

Khúc fmt

Khúc fmt chứa thông tin định dạng âm thanh hiện thời Những nội dung chính xác của sự thay đổi khúc fmt phụ thuộc vào phơng thức nén Bảng sau chỉ ra khuôn dạng khúc fmt sử dụng cho dữ liệu PCM

Kích thớc Mô tả

2 Mã phơng thức nén

2 Số kênh truyền

4 Số mẫu trong mỗi giây

4 Số bytes trung bình trong mỗi giây

2 Block alignement

2 Số bits cho mỗi mẫu

2 Số bytes của thông tin thêm vào

n Thông tin về bộ nén phụ

M hoá dữ liệu ã

Gần 100 bộ mã về phơng thức nén đã đợc đăng ký với Microsoft cho việc sử dụng trong các tệp Wave Tệp Wave có thể sử dụng các phơng thức nén à-Law hay A-Law Sau đây là một vài khuôn dạng:

Trang 27

dụng (ví dụ nh phơng thức nén MS ADPCM).

đợc dùng cho việc lu trữ thông tin

1.4 Aiff/ Aiff-C/ Aif/ Snd

Đây là dạng tệp âm thanh chuẩn của Apple Giống nh các dạng tệp Aiff

và Wave của Windows ứng dụng các âm thanh nổi và đơn, 16-bit hoặc 8-bit,

và phạm vi rộng của tần số mẫu Và dạng tệp này (giống nh dạng Wave của Windows) có thể chứa bất cứ một trong các dạng dữ liệu Dạng Aiff là một sự lựa chọn tốt cho sự tơng thích với PC/Mac Khi truyền sang Mac, ta có thể thêm 4 mã ký tự “AIFF” vào trong phần gốc của tệp để thừa nhận nó (Macintosh định danh tệp qua các tài nguyên của nó, mà nó đợc gỡ ra khi tệp

đợc mở trên máy PC) Tuy nhiên, rất nhiều các ứng dụng của Mac mà chúng

đáp ứng Aiff có thể thừa nhận các dữ liệu PCM mà không cần các định danh này

Apple chấp nhận dạng IFF của Electronic Arts cho việc sử dụng trên các máy Macintosh nhng làm một chút thay đổi bằng cách tạo ra một dạng tệp tơng tự với tên Audio Interchange File Format (AIFF) Dạng gốc Aiff không

đáp ứng cho các âm thanh đã đợc nén, nên một dạng biến thể khác - Audio Interchange File Format Extension for Compression (AIFF-C hay AIFC) - đã

đợc phát triển Các tệp Aiff và Aiff-C nói chung là đồng nhất

Cấu trúc của một tệp Aiff cũng giống nh tệp Riff Tuy nhiên, các tệp Aiff lu trữ một số nhiều bytes trong dạng MSB và sử dụng các tên khúc khác nhau Mọi tệp Aiff đều bao gồm một khúc FORM đơn và tại vị trí ngoài cùng nhất Các dạng Aiff hay AIFC có thể chứa một số hay tất cả các khúc Trong

đó các khúc quan trọng nhất là COMM và SSND, mà chúng đợc thể hiện trong mọi tệp Aiff hay AIFF-C, và khúc FVER có trong mọi tệp AIFF-C

Sau đây là bảng các khúc trong AIFF:

Trang 28

Dạng khúc Mô tả

FVER Phiên bản của tệp AIFF-C

COMM Thông tin về khuôn dạng lu trữ thông tin

SSND Dữ liệu âm thanh

COMT Chú thích

MIDI Dữ liệu MIDI

AESD Thông tin quá trình thu thanh

APPL Khúc ứng dụng riêng biệt

Để tránh điều này, Apple đã đa ra một dạng "container" mới, FORM/AIFC Từ khi có dạng "container" khác này, các bộ phát cũ hơn mà chúng quan tâm tới FORM/AIFC sẽ không thể phát đợc tệp Có ít các bộ phát hơn mà chúng có thể hiểu đợc cả hai dạng "container" sẽ biết tìm kiếm cho mã phơng thức nén đợc thêm vào cho khúc COMM, và kết quả là có thể xử lý cả 2 dạng "container" hầu nh là tơng tự nhau

Để khắc phục điều này, ngời ta đã thêm vào một khúc FVER để tạo sự

rõ ràng Khúc này chứa bộ mã dựa trên ngày của sự chỉ định có liên quan Nếu

bộ đọc tệp không nhận dạng đợc bộ mã này, thì nó không nên phát tệp đó bởi vì dữ liệu mới phải đợc hiểu rõ để phát tệp này Tốt nhất nên thay đổi bộ mã FVER một cách ngẫu nhiên

Trang 29

định dạng mà nó chỉ định rõ cách dữ liệu đợc lu trữ Do đó, cũng giống nh tệp Wave, ta có thể đọc lớt toàn bộ tệp để tạo một ánh xạ các định vị hoặc xử lý các khúc ngay trong quá trình đọc.

FORM Aiff Container

Một tệp Aiff chứa một FORM container đơn, mà container đó chứa mọi khúc khác trong tệp Hơn nữa, rất dễ để có thể điều khiển khúc FORM Chỉ cần đánh dấu nó nh một container và đọc theo dạng container

Khúc COMM

Khúc COMM lu trữ thông tin về khuôn dạng âm thanh Phần lớn các khuôn dạng âm thanh lu trữ các giá trị nh tần số lấy mẫu nh các số nguyên Nên để tăng độ chính xác, Apple sử dụng dạng dấu phẩy động Điều này tạo cảm giác cho các ứng dụng có độ chính xác cao nh sản phẩm về phim ảnh hay video, nhng nó cũng làm tăng độ phức tạp khi đọc và viết định dạng Apple sử dụng khuôn dạng chính xác là dạng dấu phẩy động 80-bit Trong đó, 16-bit

đầu tiên đợc sử dụng cho một bit ký hiệu (sign bit) và một thành phần cơ số 2 kích thớc 15-bit (15-bit base-2 exponent) Vì vậy, ta có thể hoàn toàn yên tâm khi bỏ qua ít nhất 32 bits thể hiện và chỉ sử dụng sự chuyển đổi số nguyên nhanh chóng này

Những nội dung chính xác của sự biến đổi khúc COMM phụ thuộc vào phơng thức nén Sau đây là khuôn dạng đợc sử dụng cho dữ liệu PCM hoàn chỉnh Các kỹ thuật nén khác mở rộng dạng này với các thông tin phụ Các tệp Aiff-C đáp ứng phơng thức nén à-Law

Nội dung của khúc COMM:

Kích thớc Mô tả

2 Số kênh truyền

4 Tổng số các khung mẫu

2 Số bits trên mỗi mẫu

10 Số khung mẫu trong 1 giây (số dấu phẩy động 80-bit

ra, tên phơng thức nén có thể đợc thay đổi tuỳ theo các quá trình viết chơng trình

Trang 30

Sau đây là một số bộ mã hoá khuôn dạng AIFF-C:

ulaw ITU G.711 à-Law

ima4 IMA ADPCM

Dữ liệu PCM

Một tệp đợc viết với dữ liệu âm thanh PCM nên đợc viết nh một tệp Aiff (chứ không phải dạng AIFC) cho sự tơng thích về sau Phần lớn các tệp AIFF/AIFC đợc lu trữ theo cách này Các mẫu PCM đợc lu trữ theo khuôn dạng

"signed"; các mẫu multi-byte đợc lu trữ MSB đầu tiên

Khúc SSND

Khúc SSND lu trữ dữ liệu âm thanh đợc nén hiện thời Nó bắt đầu với byte thông tin mà chúng thờng xuyên không đợc sử dụng Chính vì vậy, phơng thức đọc các bytes là rất quan trọng

8-1.5 IFF/8 SVX

Dạng Amiga 8SVX là một dạng đơn 8-bit từ các máy tính Commodore Amiga, mà nó có thể đợc nén theo dạng mã hoá 4-bit Fibonacci delta, và có nhiều tần số lấy mẫu khác nhau

ý tởng cơ bản của các dạng tệp xen kẽ đã đợc Electronic Arts phát triển cho việc sử dụng trên Commodore Amiga Họ phát triển một dạng tệp phức tạp gọi là IFF (Interchange File Format) cho việc lu trữ một chuỗi các dạng dữ liệu Các tệp IFF có thể chứa một hình ảnh đơn giản, văn bản đã định dạng, hoạt ảnh, hay bất cứ tổ hợp nào của các dạng dữ liệu Những nhà phát triển rất

tự do trong việc tạo ra các loại khúc mới để lu trữ các dạng dữ liệu riêng của

họ

Cấu trúc của một tệp IFF cũng giống nh các tệp Riff hay Aiff Tuy nhiên các tệp IFF lu trữ một số nhiều bytes trong dạng MSB, và có các tên khúc khác nhau Mặc dù, ngày nay, IFF không đợc sử dụng thờng xuyên, nhng

nó là dạng gốc của dạng RIFF và AIFF Rất nhiều trong số các tài liệu về IFF gốc vẫn còn có thể ứng dụng đợc cho 3 khuôn dạng này

Thông thờng, một tệp IFF bao gồm một khúc FORM đơn giản, khúc chỉ

ra khuôn dạng của dữ liệu trong tệp Khúc ngoài cùng nhất là khúc CAT hay

Trang 31

LIST với một chuỗi các khúc FORM lồng vào nhau

Định danh các tệp IFF/8SVX

Chỉ xét tới các tệp có một FORM container ngoài cùng đơn giản với dạng 8SVX (viết tắt của “8-bit sampled voice”) Có nhiều cách khác trong việc cấu trúc các tệp IFF, tuy nhiên, hiếm khi chúng đợc sử dụng

IFF là khuôn dạng âm thanh chung nhất của Amiga gồm có một FORM container với dạng 8SVX Điều này thờng xuyên đợc tham chiếu tới nh IFF/8SVX Dạng 8SVX đã đợc thiết kế cho việc điều khiển các nhạc cụ âm nhạc đã đợc số hoá Dạng 8SVX có thể chứa một chuỗi các khúc Sau đây là một vài trong số đó:

RLSE Release

Đọc tệp IFF

Theo lý thuyết, các khúc trong một container đợc đa đến có thể xuất hiện theo hầu hết bất cứ thứ tự nào Điều này tạo nên sự phức tạp khi đọc một tệp IFF tuỳ ý Nói chung, ta cần đọc các thông tin về định dạng dữ liệu (khúc VHDR) trớc khi đọc các dữ liệu âm thanh (khúc BODY)

Tuy nhiên, trong thực tế ta thờng viết thông tin về định dạng dữ liệu (khúc VHDR) trớc dữ liệu âm thanh (khúc BODY) Do đó, chỉ cần đọc trực tiếp tệp và xử lý các khúc ngay trong quá trình đọc

Khúc FORM

Một tệp IFF chứa một FORM container đơn, mà nó chứa mọi khúc khác trong tệp, và khúc ngoài cùng nhất luôn là khúc FORM Và để xử lý khúc FORM chỉ cần đánh dấu nó nh một container và sau đó xử lý theo dạng container

Khúc VHDR

Khúc VHDR chứa các thông tin cơ bản về khuôn dạng của dữ liệu âm thanh Thông thờng, IFF/8SVX đợc thiết kế nh một khuôn dạng về nhạc cụ cho bản nhạc trong quá trình phát Một tệp IFF/8SVX đơn chứa quá trình thu thanh

Trang 32

của một nhạc cụ đơn

Khuôn dạng của khúc VHDR:

Kích thớc Mô tả

4 Các mẫu "one-shot" cho nốt nhạc cao nhất

4 Lặp lại các mẫu cho nốt nhạc cao nhất

4 Các mẫu trong mỗi chu kỳ cho nốt nhạc cao nhất

2 Các mẫu trong mỗi giây

1 Octaves trong khúc BODY

1 Phơng thức mã hoá (0: PCM, 1: mã hoá dạng

Fibonacci, 2: mã hoá dạng Exponential)

4 Âm lợng (65,536= mức âm lợng cao nhất)

Một âm thanh IFF/8SVX bao gồm một phân đoạn "one-shot" khởi đầu

và tiếp theo là phân đoạn "repeat" Khi đợc phát nh một nhạc cụ, phân đoạn lặp

có thể đợc lặp cho tới cuối nốt nhạc Khi IFF/8SVX đợc sử dụng cho một quá trình thu thanh đơn giản, thậm chí nh một nhạc cụ, độ dài phân đoạn lặp đợc thiết lập về 0

Quá trình phát một nhạc cụ số yêu cầu biến đổi âm thanh để tạo ra các nốt nhạc khác nhau Với IFF/8SVX, có 2 kỹ thuật đợc sử dụng Công cụ cơ bản là phát âm thanh theo các tần số (speed) khác nhau Nếu ta biết cờng độ (pitch) của nốt nhạc đã thu thanh và cờng độ của nốt nhạc mà ta mong muốn,

ta có thể điều chỉnh tần số phát lại để có thể đạt đợc bất cứ cờng độ mong muốn nào Các tệp IFF/8SVX cho phép lu trữ một chuỗi các quá trình thu thanh của cùng một nhạc cụ tại các cờng độ khác nhau nên ta có thể chọn quá trình thu thanh gần nhất với cờng độ mong muốn, giảm tối đa sai số Trờng thứ

3 trong bảng trên là cờng độ của nốt nhạc thu thanh cao nhất Khúc BODY lu trữ các nốt nhạc đã đợc thu thanh theo kiểu kế tiếp (nốt này tiếp theo nốt khác)

mà bắt đầu là nốt có cờng độ cao nhất Mỗi nốt kế tiếp là một quãng 8 (octave) thấp hơn về cờng độ so với nốt kế trớc và đợc thu thanh tại tần số lấy mẫu khác Ngoài ra, trờng thứ 4 (số mẫu trong mỗi giây) đợc bỏ qua đối với các quá trình thu thanh nhạc cụ bởi vì thông tin về cờng độ đợc lấy ra

Với các âm thanh thu thanh đơn giản, thông tin trong VHDR là không cần hay không đợc sử dụng Trong trờng hợp này, số vòng lặp các mẫu, các mẫu trong mỗi chu kỳ, và các trờng octave đợc thiết lập về 0

Các tệp IFF/8SVX luôn là dạng mono Để lựa chọn bộ giải mã, cần đảm bảo rằng khúc VHDR đã đợc đọc, sau đó sử dụng mã dạng này Hơn nữa, phần lớn các tệp IFF/8SVX sử dụng dữ liệu âm thanh dạng PCM 8-bit

Khúc BODY

Khúc BODY lu trữ dữ liệu âm thanh đã đợc nén hiện thời Các dữ liệu âm

Trang 33

thanh đợc đọc từ khúc này

Các khúc văn bản

Một loạt các khúc cần tới các phần chú thích dạng văn bản Các khúc này có thể xuất hiện trong bất cứ dạng tệp IFF nào (bao gồm cả Aiff và Aiff-C) Mọi khúc này có cùng một khuôn dạng cơ bản; chúng chứa một chuỗi ký

tự ASCII

1.6 MIDI

Mặc dù có thể lu trữ một bài hát nh dạng thu thanh Wave hay Au, nhng

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 Việc lu trữ một dẫy các nốt nhạc sẽ tiện lợi hơn cho quá trình phát so với việc lu trữ quá 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, nhng nếu đợc lu 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ó

Các tệp MIDI chuẩn

Một tệp 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 các tệp Aiff, Iff, và 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 rãnh đơn Khúc MThd xuất hiện tại phần đầu của mọi tệp MIDI, và đây là dấu hiệu để định danh một tệp MIDI chuẩn

Khúc MIDI Header

Khúc MThd chứa một chút các sự kiện cơ sở về tệp MIDI Mọi giá trị này đợc lu trữ trong khuôn dạng MSB Sau đây là nội dung của khúc MIDI MThd:

Bytes Mô tả

2 Dạng tệp

2 Số các rãnh

2 Khuôn dạng thời gian

Có 3 loại tệp MIDI, chúng đợc phân loại tuỳ theo cách xử lý các rãnh:

• Tệp dạng 0 chỉ chứa duy nhất một rãnh Một cách rõ ràng, đây là tệp dễ nhất để có thể phát, nên đây là dạng thông dụng cho các tệp quảng cáo

• Tệp dạng 1 chứa rất nhiều rãnh 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 tệp dạng 1 phải bằng cách nào đó san

Trang 34

phẳng dữ liệu thành các dòng sự kiện đơn trớc khi phát

• Tệp dạng 2 chứa nhiều rãnh nhng không thừa nhận bất cứ sự liên hệ nào giữa các rãnh Nói chung, các tệp dạng 2 là không phổ biến

Các r nh MIDI ã

Chú ý rằng một rãnh là khác so với một kênh MIDI Mặc dù đây là dạng chung cho các tệp multi-track để có thể phát mỗi rãnh 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 rãnh tuỳ ý để có thể phát các rãnh trên các kênh khác nhau theo bất cứ kiểu mẫu nào

Mỗi rãnh MIDI là một danh sách các sự kiện, mà mỗi sự kiện có một

“delta time” đặt trớc Mỗi khúc trong một tệp MIDI có một độ dài đã đợc ấn

định, nên cần thận trọng khi rãnh hoá số các bytes đợc đọc để ta có thể biết khi nào dữ liệu rãnh kết thúc Nếu đây không phải rãnh đầu tiên, thì cần phải đảm bảo rằng các sự kiện mới đã hoàn toàn đợc chèn vào trong bộ nhớ danh sách các sự kiện

Giống nh bất kỳ danh sách mã chèn nào, quá trình chèn một sự kiện MIDI yêu cầu hai trờng hợp sau: một, nếu sự kiện vào phần đầu của danh sách (trong trờng hợp này cần phải cập nhật đầu đọc danh sách); hai, nếu sự kiện vào giữa danh sách (trong trờng hợp này một container trỏ khác nhận sự cập nhật)

Điều này làm tăng sự phức tạp bởi sự cần thiết chèn nó vào tại vị trí tạm thời chính xác và điều chỉnh các độ trễ một cách thích hợp Ngoài ra, để duy trì không gian, các tệp MIDI sử dụng các số nguyên biến độ dài để lu trữ các

“delta times” và các giá trị tới hạn khác Điều này cho phép các giá trị nhỏ (nh giá trị 0) có thể đợc lu trữ trong một byte đơn đồng thời cho phép các giá trị đạt tới 32 bits

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:

• Lu 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ể lu 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 tệp

Các sự kiện MIDI

Một sự kiện 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à

Trang 35

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 mã hoá số xắp hàng từ 0 tới 15 và

0 tới 127 một cách tơng ứng Ta sẽ thêm hay bớt 1 khi chuyển đổi giữa các mã

số hoá và ngôn ngữ MIDI

Running Status

Để tạo "wire protocol" thêm hiệu quả, MIDI sử dụng một kỹ thuật gọi

là “running status”, kỹ thuật này bỏ qua các bytes trạng thái lặp Khi đọc một tệp MIDI, nếu gặp một byte dữ liệu, trong khi ta đang cần một byte trạng thái, thì ta dùng lại trạng thái trớc đó Để tạo cho kỹ thuật này thêm hữu hiệu, có một quy ớc rằng một “note-on event” với một vận tốc (velocity) thiết lập về 0 cũng giống nh một “note-off event” với một vận tốc ngầm định là 64 Nh vậy, một dẫy dài các notes trên một kênh truyền đơn có thể đợc kiểm soát với chỉ 2 bytes cho mỗi sự kiện

Quản lý các sự kiện MIDI

Các tệp MIDI thờng đợc lu trữ nh các rãnh đơn Mặc dù các sự kiện trong mỗi rãnh đợc lu trữ theo thứ tự tạm thời, luồng sự kiện mà nó nhận đợc

để phát là một tổ hợp của các rãnh này Hơn nữa, các sự kiện trong mỗi rãnh (nh những sự thay đổi về nhịp độ) tác động lên quá trình phát lại của các sự kiện trong các rãnh khác

Cho các tệp dạng 1, cần phải đọc mọi sự kiện vào bộ nhớ trớc khi phát chúng Để đạt đợc điều này, cần lu trữ một danh sách liên kết đơn của các sự kiện MIDI

Phần lớn các sự kiện gồm một byte trạng thái và một cặp byte dữ liệu

Và cũng cần phải lu trữ giá trị độ trễ và số rãnh mà sự kiện này xuất hiện Vài

sự kiện MIDI riêng biệt có thể chứa một lợng tuỳ ý các dữ liệu, nên cần thêm một cấu trúc phụ để nắm giữ dữ liệu đó khi cần đến Phần lớn các sự kiện MIDI có độ dài cố định Ví dụ nh một “note-on event” có 2 bytes dữ liệu tiếp theo các bytes trạng thái

Mỗi khúc có 4 byte để nhận dạng Các dấu hiệu theo sau 4 byte xác

định độ dài dữ liệu trong khúc (không kể 8 byte dữ liệu mô tả), cho phép một khúc dài 4GB

Trang 36

Header chunk

Bắt đầu bằng các ký tự “MThd” trong dạng mã ASCII, header chunk ờng có độ dài 16byte, mã hoá nh 06 00 00 00 theo khuôn dạng "little-endian" (Intel) trong tệp MIDI 8byte đầu của header chunk theo dạng word biểu diễn phạm vi dữ liệu trong tệp

th-• 0, (trên đĩa 00 00): tệp định nghĩa một rãnh đa kênh đơn

• 1, (trên đĩa 01 00): tệp giữ một hoặc nhiều rãnh đợc chơi cùng một lúc

• 2, (trên đĩa 02 00): tệp nén một hoặc nhiều mẫu rãnh đơn mà chúng độc lập với quá trình chơi liên tiếp

Vị trí từ tiếp theo (byte thứ 11 và 12) biểu thị số track chunk riêng biệt

đợc chứa trong tệp Khuôn dạng này cho phép tới 65.535 chunk dữ liệu trong một tệp Từ cuối cùng trong header chunk (byte thứ 13 và 14) xác định gía trị trung bình của delta-time trong một track chunk

Dữ liệu trong các byte đó lấy một trong hai dạng Khi bit MSB = 0 thì

15 bit thấp hơn biểu thị số tick trong một phần t nốt nhạc Khi bit MSB = 1 nó biểu diễn thời gian trong một time code và byte thấp hơn biểu thị số tick trong một khung SMPTE

Track chunk

Bắt đầu với “MTrk” trong dạng mã ASCII, một track chunk bắt đầu với 8byte nhận dạng (4byte nh “MTrk”, 4byte sau biểu diễn độ dài) theo sau là một track event

Mỗi track event có hai phần, một biến độ dài delta time (1 tới 4 byte) mô tả thời gian trớc sự kiện và bản thân sự kiện Sự kiện có thể là một trong số các dạng sau: một sự kiện MIDI (đơn giản là một bản tin về kênh truyền MIDI), một bản tin dành riêng của hệ thống (gọi là sysex event), hoặc một Meta event, không phải thông tin cho bộ tuần tự

Một bản tin dành riêng của hệ thống là một chuỗi dữ liệu có dạng ba phần: một byte nhận dạng, thờng là F0(Hex) hoặc F7(Hex), theo sau là một tới

ba byte biểu diễn độ dài chuỗi dữ liệu và bản thân chuỗi dữ liệu

Một Meta event gồm bốn phần: byte đầu tiên thờng là FF(Hex), tiếp theo là mã kiểu 1byte Tiếp theo là một biến biểu diễn độ dài của dữ liệu trong Meta event Phần cuối cùng là dữ liệu Meta event

1.7 Mod/ Sam

Mặc dù MIDI là một dạng lu trữ nhạc tốt, nhng nó cũng có một vài vấn

đề Khởi đầu, MIDI đã đợc phát triển cho việc kết nối với nhiều loại phần cứng

về nhạc Một bộ tổng hợp sẽ chỉ đáp ứng cho một tập ấn định các âm thanh nhạc cụ, và mỗi bộ tổng hợp là khác nhau Thậm chí, mỗi nhạc cụ với cùng một tên nhng lại nghe có vẻ khác nhau, nên nhiều tệp MIDI chỉ nghe chuẩn trên một vài bộ tổng hợp nào đó Chính vì vậy, ngời ta sử dụng thêm dạng tệp

Trang 37

Mod Bằng cách bao gồm các âm thanh nhạc cụ đã đợc thu thanh, các tệp Mod

độc lập với các tính năng của bất cứ bộ tổng hợp hay card âm thanh nào Chính vì vậy, các tệp Mod nghe có vẻ nh giống nhau trên mọi hệ thống

Khác với MIDI, các tệp Mod đợc cấu trúc dựa quanh các beat Mỗi beat tơng ứng với một quãng thời gian và nó hoàn toàn mô tả những gì xẩy ra trong quãng đó Một kết quả khác là các tệp Mod có thể chỉ phát một số giới hạn các nốt nhạc đồng thời Mặc dù điều này có thể là một trở ngại cho các nhà soạn nhạc, nhng nó lại là một u điểm cho những ngời lập trình, những ngời khai thác giới hạn này để cung cấp quá trình phát lại thêm xác thực

Các tệp Mod không thể đợc định danh một cách xác thực giống nh một vài dạng khác Dạng biến thể phổ biến Pro Tracker chứa 4-byte ký hiệu, nhng lại không định vị tại phần đầu của tệp Các dạng biến thể Mod khác không những sử dụng các dấu hiệu khác nhau, mà lại định vị chúng tại các vị trí khác nhau trong tệp

Khuôn dạng chung của Mod

Khuôn dạng tệp Mod có thể đợc coi nh một dạng nén mới Nó định danh một chuỗi các mẫu hình lặp trong phần nhạc nên việc lu trữ trở nên rất gọn nhẹ Ví dụ, nó lu trữ nốt nhạc đã thu thanh cho mỗi nhạc cụ, mà nó sẽ đợc

mở rộng thành một chuỗi các âm thanh trong quá trình phát lại Nó cũng lu trữ các mẫu hình, các phân đoạn ngắn của bản nhạc mà chúng có thể đợc lặp hay phát lại theo bất cứ trình tự nào để tạo sự thuận lợi cho các chuỗi lặp nốt nhạc

Các tệp Mod chung nhất cho phép tới 31 âm thanh nhạc cụ khác nhau Mỗi âm thanh đợc đặc trng bởi các mẫu đã đợc số hoá với một phân đoạn lặp tuỳ chọn, cùng với một âm lợng ngầm định và tham số “finetune” Tham số này cho phép tần số phát lại chính xác (và cờng độ) có thể đợc điều chỉnh trên mỗi nhạc cụ cơ bản

Timing

Đơn vị thời gian chuẩn đợc sử dụng trong một tệp Mod là “tick”, thờng

là 1/50 giây (Tốc độ này tơng ứng với tần số vẽ lại theo chiều dọc trong phiên bản European/PAL của Amiga Một vài tệp Mod không chuẩn có thể lấy giá trị 1/60 giây, tơng ứng với phiên bản US/NTSC của Amiga Rất nhiều trình phát các tệp Mod cho phép điều chỉnh tần số tick) Tệp Mod cho phép một chuỗi các thay đổi về âm thanh xuất hiện trong mỗi tick Ví dụ nh, một nốt nhạc đợc phát với sự rung sẽ có âm lợng của nó đợc điều chỉnh trên mỗi tick

Tuy nhiên, những sự thay đôỉ về nốt nhạc có thể chỉ xuất hiện tại phần

đầu của mỗi beat mới Thông thờng, một beat là 6 ticks, mặc dù giá trị này cho phép đợc điều chỉnh tuỳ ý Các beats cũng đợc quy chiếu tới nh các hàng, bởi vì rất nhiều trình soạn thảo tệp Mod hiển thị mỗi beat trên một hàng của phần hiển thị văn bản

Notes

Mỗi beat là một tập hoàn chỉnh các nốt nhạc(notes) Mỗi nốt nhạc bao gồm một số nhạc cụ, một thời đoạn (period), và một mã tác động (Một vài

Trang 38

khuôn dạng biến thể khác cũng lu trữ trong mỗi nốt nhạc mức âm lợng) Số nhạc cụ và thời đoạn tơng ứng một cách trực tiếp với phần cứng về âm thanh của Amiga Nếu cả số nhạc cụ và thời đoạn là 0, thì nốt nhạc trớc đó nên tiếp tục đợc phát Nếu chỉ một trong hai số này bằng 0, thì một nốt nhạc mới sẽ bắt

đầu nhng giá trị 0 sẽ đợc thay thế bởi giá trị trớc đó

có thể có tới 64 mẫu hình Một vài dạng Mod khác không lu trữ các mẫu hình,

mà chúng lu trữ một danh sách liên tiếp các beats

Playlist

Playlist là một danh sách chứa tới 128 số mẫu hình Nói chung, một trình phát một tệp Mod phức tạp hơn so với trình phát các khuôn dạng Wave và AIFF, mặc dù không phức tạp nh trình phát MIDI Cấu trúc chung của một tệp Mod nh sau:

30 cho mỗi nhạc cụ Dữ liệu về nhạc cụ

1 Độ dài của playlist

1 Số các mẫu hình (chỉ trong các tệp cũ)

1024 cho mỗi mẫu hình Các mẫu hình

Tiếp theo là dữ liệu về mẫu hình nhạc cụ

Phần "Signature" đợc sử dụng để chỉ ra khuôn dạng chính xác của tệp Nhng phần này không xuất hiện tại cùng một định vị trong mọi khuôn dạng Mod

Sau đây là một vài trong số các ký hiệu chung nhất:

Kí hiệu Mô tả

Trang 39

(Moving Pictures Expert Group)

Đây là một chuẩn mà ISO đã phát triển (5/1988) cho việc nén một chuỗi các hình ảnh video Mặc dù các chuẩn MPEG là rất nổi tiếng cho việc nén các hình ảnh video, nhng chúng cũng đáp ứng cho việc nén các âm với chất lợng cao Hiện nay, có 3 dạng chuẩn MPEG chính: MPEG-1, MPEG-2, MPEG-3

Sự phân biệt giữa các tệp MPEG âm thanh và hình ảnh video là rất quan trọng Các chuẩn MPEG xác định 3 khuôn dạng lu trữ Một tệp có thể chứa một dòng hình ảnh (video stream), một dòng âm thanh (audio stream), hay một dòng hệ thống (system stream) là dòng mà nó đợc chèn vào xen kẽ một vài tổ hợp của các dòng âm thanh và hình ảnh Cả 3 dạng tệp này đều đợc sử dụng rộng rãi

Nói chung chuẩn MPEG khác so với vài chuẩn khác ở đây, ta chỉ xét tới khuôn dạng của một dòng bit (bitstream) MPEG, và cách mã hoá dòng bit

đó chứ không chỉ ra kỹ thuật nén Một cách chủ yếu, một dòng bit âm MPEG

định rõ giá trị tần số của âm thanh và cách giá trị đó thay đổi theo thời gian Theo cách để lu trữ khoảng trống, bộ nén sẽ loại bỏ thông tin một cách có lựa chọn Chuẩn chỉ rõ cách thông tin giữ lại đợc mã hoá và bộ giải mã có thể cấu trúc các mẫu âm PCM từ dòng bit MPEG Bằng cách đặt lại quá trình xử lý mã hóa không xác định, các bộ cài đặt có thể tự do sử dụng một chuỗi các kỹ thuật

để quyết định xem thông tin nào là quan trọng Những kỹ thuật này có thể bao gồm các bộ mã hoá đơn giản cho các ứng dụng chất lợng thấp hơn, và các bộ mã hoá đợc chi tiết hoá cho các dạng âm thanh riêng biệt (ví dụ nh quá trình nén chất lợng cao cho dàn nhạc có thể khác với quá trình nén chất lợng cao cho tiếng nói)

Cấu trúc chung

Giống nh nhiều kỹ thuật nén định hớng phần cứng, dữ liệu đã đợc nén MPEG đợc định nghĩa nh một dòng các bit Một dòng bit MPEG bao gồm các khung (frame) dữ liệu nén Mỗi khung chứa một "frame header" mà nó xác

định khuôn dạng dữ liệu đó Để giải mã dữ liệu, cần phải rãnh hoá các bytes vào, định danh và phân tích các "frame header", và sử dụng thông tin trong các header để giải nén các khung riêng biệt

Trang 40

Frame Header của MPEG

Một frame header luôn là 32 bits và đợc xắp hàng trên một byte đờng biên 12 bits đầu tiên đều là 1, cho sự đồng bộ hoá; các bits còn lại đợc chỉ ra trong bảng sau 12 bits giá trị 1 là "syncword" Nếu bộ giải mã mất rãnh nơi

mà nó đang định vị, thì nó có thể tìm về phía trớc cho "syncword" tiếp theo và

định vị lại từ đó

MPEG frame Header:

Byte Bits Mô tả

0 8 Cho sự đồng bộ, mọi giá trị đều bằng 1

1 4 Cho sự đồng bộ, mọi giá trị đều bằng 1

1 ID: 0 chỉ ra rằng các phần mở rông MPEG-2 đang

Các syncword giả có thể gây khó khăn cho bộ giải mã trong việc đồng

bộ lại một cách đáng tin cậy Mặc dù chuẩn này đảm bảo rằng syncword giả sẽ không xuất hiện trong một dòng âm thích hợp, chúng có thể xuất hiện nếu dữ liệu mã hoá bị các lỗi gây h hại Nếu bộ giải mã biết thông tin phụ về dòng bit vào (ví dụ nh nó có thể đã biết để trông chờ một dòng bit MPEG-1 Layer 1),

nó có thể sử dụng các bits header phụ này nh một syncword mở rộng Chuẩn này cũng cung cấp một dạng mã hoá vòng CRC để đợc lu trữ theo sau header CRC cung cấp một dạng kiểm tra lỗi cho header và phần lớn các dữ liệu âm thanh nhạy cảm đã đợc mã hoá Nếu quá trình kiểm tra CRC bị trợt, thì bộ giải mã có thể bỏ qua khung này (làm trầm đầu vào, hay tạo bản sao của khung tr-

ớc đó để che dữ liệu đã mất), đồng bộ lại, và tiếp tục với khung thích hợp tiếp theo

Các mã hoá về tần số lấy mẫu của MPEG :

Ngày đăng: 21/11/2012, 09:03

HÌNH ẢNH LIÊN QUAN

Hình 4.2: Cơ chế hoạt động của chơng trình - xây dựng chương trình xử lý âm thanh số
Hình 4.2 Cơ chế hoạt động của chơng trình (Trang 50)
Hình 4.3: Cấu hình dữ liệu - xây dựng chương trình xử lý âm thanh số
Hình 4.3 Cấu hình dữ liệu (Trang 53)
Hình 4.4: Biểu diễn dữ liệu gốc theo thời gian - xây dựng chương trình xử lý âm thanh số
Hình 4.4 Biểu diễn dữ liệu gốc theo thời gian (Trang 54)
Hình 4.7: Màn hình soạn thảo - xây dựng chương trình xử lý âm thanh số
Hình 4.7 Màn hình soạn thảo (Trang 56)
Hình 4.8: Sóng âm tệp gốc và của tệp sao chép với một số mẫu đầu bị xoá - xây dựng chương trình xử lý âm thanh số
Hình 4.8 Sóng âm tệp gốc và của tệp sao chép với một số mẫu đầu bị xoá (Trang 57)
Hình 4.10: Sóng âm của tệp đợc cắt ghép từ một số phân đoạn - xây dựng chương trình xử lý âm thanh số
Hình 4.10 Sóng âm của tệp đợc cắt ghép từ một số phân đoạn (Trang 59)
Hình 4.12: Phổ của tín hiệu gốc - xây dựng chương trình xử lý âm thanh số
Hình 4.12 Phổ của tín hiệu gốc (Trang 63)
Hình 14: Phổ tơng ứng số chu kỳ không nguyên - xây dựng chương trình xử lý âm thanh số
Hình 14 Phổ tơng ứng số chu kỳ không nguyên (Trang 64)
Hình 4.16: Phổ biên độ với cửa sổ Hanning - xây dựng chương trình xử lý âm thanh số
Hình 4.16 Phổ biên độ với cửa sổ Hanning (Trang 66)
Hình 4.25: Phổ tơng ứng với Cepstrum sau khi lọc - xây dựng chương trình xử lý âm thanh số
Hình 4.25 Phổ tơng ứng với Cepstrum sau khi lọc (Trang 72)
Hình 4.26: Phổ của tín hiệu không tuần hoàn - xây dựng chương trình xử lý âm thanh số
Hình 4.26 Phổ của tín hiệu không tuần hoàn (Trang 73)
Hình 4.28: Tần số vùng biên độ đỉnh - xây dựng chương trình xử lý âm thanh số
Hình 4.28 Tần số vùng biên độ đỉnh (Trang 74)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w