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 1Giớ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 3Từ đó 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 4và 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 5Kế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 6So 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 7quá 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 82.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 10Chơ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 11củ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 12củ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 14Tí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 15cá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 16tin (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 17có 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 18Phầ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 191.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 20Sau đâ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 21nó đị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 22Sau đâ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 24thanh; 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 25trì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 26container 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 27dụ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 28Dạ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 30Sau đâ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 31LIST 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 32củ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 33thanh đợ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 34phẳ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 35chú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 36Header 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 37Mod 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 38khuô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 40Frame 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 :