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 ớ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 đó.
d-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á).
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.
Định nghĩa
Phép biến đổi z của tín hiệu x(n) là: X(z) = ∑∞
x(n).z-n (1.1)
Trong đó X(z) là hàm biến phức của biến phức z Chuỗi X(z) còn đợc gọi là chuỗi Laurent X(z) và các đạo hàm của nó đều là liên tục trong miền hội tụ Đây là phép biến đổi z hai bên (n chạy từ -∞ tới ∞), đợc dùng để nghiên cứu hệ thống xác lập của hệ thống Với tín hiệu nhân quả, ta dùng phép biến đổi z một phía:
trong đó Γ là đờng cong khép kín bao quanh gốc toạ độ trên mặt phẳng z
Trang 5Kết quả là: I =
ớ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:
x(l) = Xzzdzj
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.
X(z) = ∑∞
Qua công thức trên, ta thấy phép biến đổi z là phép biến đổi Fourier của tích tín hiệu này với một tín hiệu hàm số mũ r-n Hơn nữa, phép biến đổi Fourier của tín hiệu rời rạc là phép biến đổi z tính trên đờng tròn đơn vị (|z| = 1 hay r = 1), với điều kiện miền hội tụ của phép biến đổi z phải chứa đờng tròn đơ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à đồng nhất.
X(f) = X(z) = ∑∞
x(n).e-2jπfn với |z| = 1 (1.5)
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à:
Xa(t) = ∞∫
∞− n
xa(t).σ(t-n.Ts).e-stdt
Trang 6Xe(s) = ∑∞
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 = es.Ts
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):
Xp(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
Và ta quy ớc: xp(n) = x((n))N.
Ta có các công thức biến đổi Fourier nh sau:
X(k) =
lạicòn k với0
x(n) =
).(1 1
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.
xN(n) = x(n) w(n- n0) =
lạicòn nvới0
(nn0 nn0 Nx
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) = ∑−
x(n).WNknvới k = 0, 1, , N-1x(n) =
N.x∗(n) = ∑−
x(n) =
Wk
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 thanh1.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 về mặt vật lý gọi là tần số (frequency).
1.3 Âm lợng của âm (độ to của âm)Năng lợng của âm
Giống nh các sóng cơ học, sóng âm cũng mang năng lợng sóng tỷ lệ với bình phơng biên độ sóng.
Và cờng độ âm chính là năng lợng đợc sóng âm truyền trong một đơn vị thời gian qua một đơn vị diện tích đặt vuông góc với phơng truyền (đơn vị W/m2).
Tuy nhiên, để cảm nhận một âm, ta không đánh giá qua giá trị tuyệt đối
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.
4 Khuôn dạng lu trữ4.1 Khuôn dạng chung
Khi ghi âm, âm thanh có thể đợc lu dới dạng tệp Có nhiều khuôn dạng tệp âm thanh khác nhau Và 3 dạng chính là:
• Dạng tự nhiên: nh các tệp có đuôi WAV, AIF các tệp này cho âm thanh tốt song thời gian truyền lâu.
• Dạng nén: các tệp Shock wave, Quick Time, MPEG để phát lại cần có phần mềm đặc biệt Ưu điểm là kích thớc nhỏ, nhng mất thời gian giải nén, và chất lợng giảm.
• 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 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 17Chơng 3
khuôn dạng tệp âm thanh
1 Khuôn dạng lu trữ1.1 Au/ Snd
Dạng tệp Au là đơn giản và hiện nay đợc sử dụng khá rộng rãi cho sự phân tán trên mạng Internet, và cho sự tích hợp vào các ứng dụng Java và Apples Đây là dạng chuẩn đợc sử dụng trong các máy tính NeXT và Sun, và 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:
N Mô tả văn bản tuỳ chọn (ít nhất 4 bytes)N 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.
Mã hoáMô tả
1 8-bit à-Law G.7112 8-bit linear
3 16-bit linear4 24-bit linear5 32-bit linear
6 Floating-point sampled
7 Double-precision float sampled8 Fragmented sampled data10 DSP program
11 8-bit fixed-point samples12 16-bit fixed-point samples13 24-bit fixed-point samples14 32-bit fixed-point samples18 16-bit linear with emphasis19 16-bit linear compressed
20 16-bit linear with emphasis and compression21 Music kit DSP commands
25 ADPCM G.723.326 ADPCM G.723.527 8-bit A-Law G.711
Trong đó 3 dạng đợc sử dụng rộng rãi là: 8-bit à-Law (thờng đợc lấy mẫu tại tần số 8,000Hz), 8-bit linear, và 16-bit linear Các dạng còn lại thờng đợc sử dụng trên các hệ thống NeXT và Sun Đặc biệt, các dạng DSP là các dạng NeXT riêng, và các phiên bản dạng dấu phẩy động (floating-point) nói chung nên đợc tránh, bởi chúng rất hiếm khi có thể cài đặt đợc giữa các hệ thống (dĩ nhiên dạng à-Law G.711 là rất gọn nhẹ, chủ yếu chúng là dạng 8-bit dấu phẩy động)
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:
Độ dàiMô tả
1 Dạng khối3 Độ dài dữ liệu: nn Dữ liệu
Các dạng khối quan trọng nhất là khối kết thúc (dạng 0), các khối mở rộng (dạng 8 và 9), và khối dữ liệu âm thanh (dạng 1).
Khối kết thúc (dạng 0)
Khối kết thúc là một sự ngoại lệ cho khuôn dạng khối Nó gồm một byte 0 đơn, không gắn thêm trờng độ dài Khối này đánh dấu sự kết thúc 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:
Mã hoáMô tả
0 Dữ liệu dạng PMC unsigned 8-bit1 Nén, 4 bits/mẫu
2 Nén, 2.6 bits/mẫu3 Nén, 2 bits/mẫu
4 Dữ liệu dạng PCM signed 16-bit6 CCITT A-Law
7 CCITT à-Law
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:
Độ dàiMô tả
2 Mã tần số lấy mẫu1 Mã phơng thức nén
1 Chế độ: 0 - mono; 1 - stereo
Dữ liệu trong khối này sao chép ở mức độ lớn thông tin trong khối dữ liệu âm thanh Đặc biệt, mã tần số lấy mẫu là một dạng có độ chính xác cao hơn so với mã hoá đợc sử dụng trong khối dữ liệu, ngoài ra mã phơng thức nén 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àiMô 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 - stereo2 Mã phơng thức nén
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:
Kích thớcMô tả
4 Dạng khúc: RIFF
4 Kích thớc tệp tổng thể trừ 84 Dạng RIFF container: WAVE4 Dạng khúc: fmt
4 Độ dài dữ liệu khúc định dạng: thông thờng là 1616 Dữ liệu khúc định dạng
Đọ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ớcMô tả
2 Mã phơng thức nén2 Số kênh truyền
4 Số mẫu trong mỗi giây
4 Số bytes trung bình trong mỗi giây2 Block alignement
2 Số bits cho mỗi mẫu
2 Số bytes của thông tin thêm vàon 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:
Mã hoáMô tả
0 Không nhận dạng đợc
2 Microsoft ADPCM6 ITU G.711 A-Law7 ITU G.711 à-Law
Trang 27dụng (ví dụ nh phơng thức nén MS ADPCM).
Khúc dữ liệu
Khúc dữ liệu (Data chunk) của dạng Wav theo chuẩn mẫu RIFF Bốn byte đầu xác định khúc dữ liệu với các ký tự “data” trong mã ASCII Theo sau là bốn byte biểu diễn độ dài dữ liệu Cuối cùng là các dữ liệu đợc mã hoá trong một số byte cho trớc.
Các khúc văn bản
Sự thay đổi của các khúc tạo ra sự sinh động 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 Riff nào, chứ không phải chỉ trong các tệp Wave Tên của chúng đều bắt đầu với một chữ "I" để chỉ ra rằng chúng đợ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úcMô 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 tinSSND Dữ liệu âm thanh
COMT Chú thíchMIDI Dữ liệu MIDI
AESD Thông tin quá trình thu thanhAPPL 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ớcMô tả
2 Số kênh truyền
4 Tổng số các khung mẫu2 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 IEEE)
4 Mã phơng thức nénn Tên phơng thức nén
Qua phần mềm hệ thống của Apple, các bộ mã mã hoá 4-byte đợc sử dụng để định danh các dạng dữ liệu và các thông tin quan trọng khác Trong tr-ờng hợp AIFF-C, các bộ mã này định danh phơng thức nén Phần mềm Multimedia của Macintosh có thể dò tìm một mã âm thanh (sound codec) dựa trên 4-byte mã này, cho phép "codecs" đợc cài đặt một cách chủ động Ngoài 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:
Mã hoáMô tả
ACE2 Phơng thức nén ACE 2:1ACE8 Phơng thức nén ACE 8:3MAC3 Phơng thức nén MACE 3:1MAC6 Phơng thức nén MACE 6:1
ulaw ITU G.711 à-Lawima4 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 324 Â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:
BytesMô tả
2 Dạng tệp2 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.
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
Khuôn dạng MIDI
Khuôn dạng MID là các tệp điều khiển âm thanh trong multimedia MIDI là một hệ thống hoàn chỉnh không chỉ có khuôn dạng xác định mà còn có các tín hiệu và hệ thống phần cứng.
Các tệp MIDI lu giữ một dòng các lệnh cho các hệ thống tổng hợp (synthesizer) MIDI Các tệp đợc xây dựng từ các khúc (chunks) Có hai loại khúc: header chunk và track chunk Mỗi tệp MIDI gồm một header chunk và một hoặc nhiều track chunk.
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.
Đơ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.
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 đó
Một beat bao gồm một sự định rõ nốt nhạc riêng cho mỗi kênh Thông thờng có 4 kênh, nhng các dạng biến thể khác có thể có 6 hay 8 kênh Ngoài ra, mỗi beat còn có một khoảng xác định, thờng là 6 ticks, mặc dù khoảng này có thể đợc thiết lập lại.
Các tệp Mod đợc thiết kế cho quá trình lu trữ âm nhạc, mà chúng có các phân đoạn lặp Một mẫu hình (pattern) lu trữ tới 64 beats Tại mỗi tần số lấy mẫu phát lại bình thờng, nó chỉ phát nhạc trong vòng hơn 7 giây Một tệp Mod 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 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:
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ệuMô tả
Trang 39M.K Chữ ký chung nhất
M!K! Giống nh dạng trên, nhng có nhiều hơn 64 mẫu hình.FLT4 Tơng tự nh M!K!
FLT8 Mỗi beat có 8 kênh6CHN Mỗi beat có 6 kênh8CHN Mỗi beat có 8 kênh
1.8 MPEG
(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:
2 4 Chỉ số tần số bit2 Chỉ số tần số mẫu
1 Chèn thêm: 1 nếu có một khe phụ1 Private
3 2 Chế độ: 00=stereo, 01=joint stereo, 10=dual channel, 11=mono
2 Sự mở rộng chế độ: dải tần thấp nhất cho âm thanh dạng stereo về cờng độ
Các mã hoá về tần số lấy mẫu của MPEG :