Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Giới thiệu chung
1. Giới thiệu chung
Cùng với sự phát triển của cuộc cách mạng khoa học và công nghệ đang
diễn ra một cách sôi động, chúng ta đang tiến dần tới thế giới của sự số hoá.
Với các u điểm của xử lý số, nhanh gọn, chính xác với chất lợng cao, mọi lĩnh
vực hoạt động của xã hội loài ngời, nhất là các ngành trong các lĩnh vực thông
tin liên lạc, phát thanh truyền hình ... đều tiến tới việc áp dụng một cách đồng
bộ và có hiệu quả các công cụ cũng nh các phép xử lý số. Trong đó, âm thanh
là một lĩnh vực đặc biệt quan trọng, đây là một phơng thức dùng để trao đổi
cũng nh cảm nhận tin, không chỉ là tiếng nói, bản nhạc mà đó là tất cả các âm
mà ta cảm nhận đợc trong cuộc sống hàng ngày, do đó, lĩnh vực về âm thanh
không thể nằm ngoài xu hớng phát triển chung mà còn cần sự nghiên cứu sâu
hơn nữa.
2. Đặt vấn đề
Với âm thanh số, bằng việc lu trữ âm thanh dới dạng các dãy số, chúng
ta đạt đợc yêu cầu về tốc độ truyền cũng nh về khối lợng lu trữ và độ trung
thực trong các phép xử lý nh khử nhiễu, soạn thảo hay các hiệu quả tạo độ
vang, trễ ... Do vậy, ngoài các phơng tiện sử dụng kỹ thuật số, nh camera số,
thiết bị ghi số, điện thoại số... với chất lợng cao, thì những âm thanh tơng tự đ-
ợc ghi từ micro với các nhạc cụ truyền thống đều đợc chuyển đổi sang dạng số
hoá.
Hơn nữa, với âm thanh, chúng ta không chỉ quan tâm tới khả năng cảm
nhận một cách trung thực nhất âm thanh tự nhiên, mà ta còn hớng tới việc tạo
ra (hay tổng hợp) đợc những âm thanh mà ta mong muốn. Do đó, khi nói đến
âm thanh số thì cần thiết phải xét tới 3 khía cạnh:
Các khuôn dạng lu trữ âm thanh với các đặc tính riêng biệt. Đây là yêu
cầu trớc tiên của bất kỳ quá trình thu thanh hay khi cần đọc dữ liệu để
phân tích. Cần phải hiểu rõ các đặc tính cả từng khuôn dạng thì mới có
thể lu trữ một cách hiệu quả nhất.
Thao tác với các tệp âm thanh qua một trình soạn thảo âm thanh với các
phép sao chép, cắt, dán, lọc, trộn âm hay chuyển đổi khuôn dạng tệp lu
trữ cũng nh phơng thức lu trữ dữ liệu. Đây là cách để chúng ta có thể
cảm nhận đợc âm thanh một cách rõ nét.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
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 đó.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Chơng 1
lý thuyết xử lý tín hiệu số
1. Tín hiệu số
Tín hiệu là biểu hiện vật lý của thông tin. Về mặt toán học, tín hiệu đợc
coi là một hàm của một hay vài biến độc lập. Để phân loại tín hiệu, ta có thể
xét đến tính chất của biến độc lập thời gian hay phân loại theo biên độ tín hiệu
(liên tục hay rời rạc).
Từ đó ta có định nghĩa: Tín hiệu số (Digital Signal) là tín hiệu rời rạc (theo
biến độc lập thời gian) đồng thời có biên độ cũng rời rạc hoá (lợng tử hoá).
t
x
3
2
-1
0
1
-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,
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
và xử lý âm thanh là một trong số đó. Trong quá trình xử lý, các phép xử lý
DSP chuẩn cơ bản là: FFT, lọc, thiết kế các bộ lọc thời gian, decimation,
interpolation (nội suy), tích chập (convolution), ...
Các chức năng DSP (Digital Signal Processing) đợc thực hiện bởi
soundcard tơng đơng với một tập các khả năng của phần cứng tổng hợp âm
nhạc điện tử analog: trộn, lọc, điều chế tần số, biên độ... và nén. Tất cả các
hiệu quả đợc tạo ra bằng cách dùng bộ trễ tín hiệu nh: vang, lặp.... đều có thể
sử lý bằng DSP. Sự khác nhau là DSP (cả phần cứng và phần mềm) có thể thực
hiện các chức năng trên dạng sóng số hóa. Nhiều soundcard có tích hợp DSP
để tăng tốc độ xử lý.
Việc phân tích và thiết kế của các hệ thống tuyến tính đã đợc thực sự
đơn giản hoá bởi các phép biểu diễn trong miền tần số của cả tín hiệu và hệ
thống. Trong đó biến đổi Fourier và biến đổi Z đóng vai trò quan trọng trong
việc biểu diễn các tín hiệu và hệ thống rời rạc theo thời gian.
2.1. Phép biến đổi Z
Nói chung, phép biến đổi Fourier là một công cụ mạnh để nghiên cứu
tín hiệu số và tơng tự về cả mặt lý thuyết và thực hành. Nhng đối với tín hiệu
rời rạc, phép biến đổi Z đợc sử dụng rộng rãi hơn bởi đây là phép biến đổi
mạnh về phơng diện lý thuyết.
Định nghĩa
Phép biến đổi z của tín hiệu x(n) là: X(z) =
=n
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:
X(z) =
=
0
)(
n
n
znx
(1.2)
Phép biến đổi z một phía dùng để nghiên cứu chế độ quá độ của hệ thống.
Phép biến đổi z ngợc
Về mặt lý thuyết, phép biến đổi z ngợc có thể thiết lập sau khi dùng định lý
Côsi (Cauchy) về tích phân trên đờng cong khép kín trên mặt phẳng phức:
I =
dzz
j
l
1
2
1
(1.3)
trong đó là đờng cong khép kín bao quanh gốc toạ độ trên mặt phẳng z.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Kết quả là: I =
00
01
=
lv
lv
ới
ới
Bằng cách nhân hai vế của biến đổi z với z
l-1
/2j, 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) =
dzzzX
j
l
1
)(
2
1
(1.4)
Biểu thức thoả mãn với mọi l, đờng cong là đờng cong khép kín, nằm trong
miền hội tụ và chạy theo chiều dơng (ngợc chiều kim đồng hồ).
Phép biến đổi z đợc áp dụng trong quá trình giải các phơng trình sai
phân tuyến tính hệ số hằng. Và các tính chất của biến đổi z tạo nhiều thuận lợi
trong các vấn đề xử lý tín hiệu số. Nh tính tuyến tính cho ta cách tính biến đổi
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=e
j
, tức là biểu diễn trong
toạ độ cực, và với = 2f.
X(z) =
=n
x(n).r
-n
.e
-j2
fn
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) =
=n
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ự X
a
(t), phép biến đổi Laplace của tín hiệu này là:
X
a
(t) =
x
a
(t).e
-st
dt
Nếu tín hiệu X
a
(t) đợc lấy mẫu đều với chu kỳ T
s
và (t) là hàm xung
Dirac, thì phép biến đổi Laplace của tín hiệu lấy mẫu là:
X
e
(s) =
=
n
x
a
(t).
(t-n.T
s
).e
-st
dt
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
X
e
(s) =
=
n
sTn
sa
s
eTnx
..
)..(
(1.6)
So sánh biểu thức này với biến đổi z của tín hiệu x(n) = x
a
(nT
s
), 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.T
s
). Có nghĩa là: X(z) = X
e
(s) với z =
s
Ts
e
.
.
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 x
p
(n) tuần hoàn với chu kỳ N bằng cách xếp chồng tuần hoàn x(n):
X
p
(n) =
=
+
i
iNnx )(
(1.7)
Khi xếp chồng tuần hoàn, nếu M N (với M = N
2
- N
1
+1, trong đó N
1
và N
2
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 x
p
(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: x
p
(n) = x((n))
N
.
Ta có các công thức biến đổi Fourier nh sau:
X(k) =
=
lại còn k với0
10).(
1
0
N
n
nk
N
NkWnx
(1.8)
x(n) =
=
lại còn nvới0
10).(
1
1
0
N
k
nk
N
NnWkX
N
(1.9)
Trong đó X(k) là một chu kỳ của X
p
(k), với X
p
(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 x
p
(n), hay biến đổi Fourier X(f) của
một chu kỳ của x
p
(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,
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
quá trình lọc có thể là gỡ bỏ nhiễu ra khỏi quá trình thu thanh hay tách biệt
một âm, giọng nào đó bằng cách chỉ cho các tần số xác định nào đó đi qua.
Chính vì vậy, lọc số là một ứng dụng quan trọng nhất của xử lý tín hiệu.
Các bộ lọc số đã dần dần thay thế các bộ lọc tơng tự. Việc thiết kế các bộ lọc
số thực tế đều đi từ lý thuyết các bộ lọc số lý tởng.
Các bộ lọc số tiêu biểu là:
Bộ lọc số thông thấp (Low pass filter)
Bộ lọc số thông cao (High pass filter)
Bộ lọc số thông dải (Band pass filter)
Bộ lọc số chắn dải (Band stop filter)
Trong đó, các bộ lọc đợc sử dụng để lọc tần số chính, nên tất cả các đặc trng
của lọc tần số đều đợc cho theo đáp ứng biên độ.
2.4. Hàm cửa sổ
Nh ta đã biết, phép biến đổi Fourier rời rạc DFT tác động trên tín hiệu
có độ dài hữu hạn, nên cần thiết phải hạn chế độ dài đối với các tín hiệu có độ
dài vô cùng hoặc quá lớn để có thể nghiên cứu phổ của chúng. Để làm điều
này ta thờng dùng hàm cửa sổ, tức là nhân tín hiệu x(n) với cửa sổ w(n-n
0
) để
nhận đợc một đoạn x
N
(n) trong khoảng n
0
tới n
0
+N-1 để phân tích.
x
N
(n) = x(n). w(n- n
0
) =
+
lại còn nvới0
1)(
00
Nnnnnx
(1.10)
Việc nhân tín hiệu với hàm cửa sổ theo thời gian tơng đơng với việc nhân chập
phổ của tín hiệu x(n) với phổ của cửa sổ:
X
N
(f) =
+ 1
0
0
f
f
X(g)W(f-g)dg = X(f)*W(f) (1.11)
Trong đó X
N
(f), X(f), và W(f) là biến đổi Fourier tơng ứng của x
N
(n), x(n), và
w(n).
Kết quả nhận đợc từ tín hiệu sau khi đã cho qua cửa sổ không những
phụ thuộc vào dạng cửa sổ mà còn phụ thuộc vào số điểm tín hiệu phân tích N,
cũng nh vị trí cửa sổ đợc đặt ở đâu, tức là tìm n
0
phù hợp. Ta phải chọn vị trí
cửa sổ sao cho cửa sổ bao trùm lên phần quan trọng của tín hiệu và bỏ qua
những chỗ có biên độ nhỏ, và phải chọn N sao cho một chu kỳ x
p
(n) là xấp xỉ
của x(n) với sai số cho phép và không để xảy ra hiện tợng trùm thời gian. Nh
vậy, với những tín hiệu bất kỳ, do không có đủ thông tin để có thể chọn n
0
và
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.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
2.5. Phép biến đổi nhanh Fourier (FFT - Fast Fourier Transform)
Đây thực chất là DFT nhng với một thuật toán nhanh, gọn và hiệu quả.
FFT đã tạo ra một bớc ngoặt mới và thực sự đóng vai trò hết sức quan trọng
trong việc phân tích, thiết kế và thực hiện các thuật toán xử lý tín hiệu số cũng
nh tín hiệu tơng tự. Tuy có nhiều thuật toán tính FFT khác nhau, nhng nguyên
tắc chung của tất cả các thuật toán này là dựa trên việc phân tích cách tính
DFT cuả một dãy N số (gọi tắt là DFT N điểm) thành các phép tính DFT của
các dãy nhỏ hơn, trong đó số phép tính tỷ lệ với N.log(N).
Trong các cách tính này, FFT có 2 lớp cơ bản: thuật toán FFT đợc phân
chia theo thời gian và phân chia theo tần số. Cả hai thuật toán đều sử dụng
phép tính toán tại chỗ (in place), và số phép nhân phức trong cả hai thuật giải
là nh nhau. Sự khác nhau cơ bản giữa hai cách tính là thứ tự xắp xếp dữ liệu
đầu vào và đầu ra.
Thông thờng, ta xét tới 2 cách tính FFT: tính FFT thuận và FFT ngợc.
Bắt đầu từ cặp công thức biến đổi Fourier rời rạc thuận và ngợc:
X(k) =
=
1
0
N
k
x(n).W
N
kn
với k = 0, 1, .., N-1
x(n) =
N
1
=
1
0
N
k
X(k).W
N
-kn
với n = 0, 1, .., N-1
Cặp công thức trên là tơng tự nhau, chỉ khác ở hệ số tỷ lệ
N
1
và dấu của
mũ của hệ số W. Nh vậy, ta có thể dùng công thức tính FFT thuận để tính FFT
ngợc bằng cách lấy liên hợp phức của cả hai vế công thức * và chuyển hệ số tỷ
lệ N sang trái:
N.x
(n) =
=
1
0
N
k
X
(k).W
kn
N
(1.12)
Vế phải chính là DFT của dẫy X
*
(k) nên có thể tính đợc bằng bất kỳ chơng
trình tính FFT nào. Còn dãy x(n) có thể tính bằng cách lấy liên hợp phức hai vế
công thức * và chia cho n:
x(n) =
N
1
=
1
0
).(
N
k
kn
N
WkX
(1.13)
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
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
để 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ống
homomorphic
A F A
x(n) y(n)
x(n) y(n)
-1
Hình 2.2: Hệ thống xử lý Homomorphic
Ưu điểm của hệ thống xử lý này là thuật toán có thể đợc tách thành các
thuật toán mắc dây chuyền nh trên. Trong đó, các khối A và A
-1
là các khối
nghịch đảo của nhau. Còn khối F là hệ thống tuyến tính, bất biến, hay nói
chung đó là một bộ lọc tuyến tính đơn giản.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Chơng 2
giới thiệu chung về âm thanh số
1. Âm thanh và đặc tính của âm thanh
1.1. Sóng âm và cảm giác âm
Khi một vật dao động về một phía nào đó, nó làm cho các lớp không khí
liền trớc bị nén lại, và lớp không liền sau dãn ra. Sự nén và dãn không khí nh
vậy lặp đi lặp lại một cách tuần hoàn nên đã tạo ra trong không khí một sóng
đàn hồi. Sóng này truyền tới tai, nén vào màng nhĩ khiến cho màng nhĩ cũng
dao động với cùng tần số. Khi màng nhĩ dao động, các vị trí phân biệt của
màng nhĩ trên bề mặt giống nh nó chuyển động về trớc hay sau đáp ứng với
các sóng âm vào. Khi cùng một thời điểm, ta nghe thấy nhiều âm, thì mọi âm
thanh phân biệt này đợc trộn với nhau một cách tự nhiên trong tai giống nh
một hình mẫu đơn của áp suất không khí thay đổi. Tai và óc làm việc cùng
nhau để phân tích tín hiệu này ngợc lại thành những cảm giác về âm riêng biệt.
1.2. Độ cao của âm
Độ cao của âm là một đặc tính sinh lý của âm và nó phụ thuộc vào một
đặc tính của âm là tần số. Những âm có tần số khác nhau, tạo nên cảm giác về
các âm khác nhau: âm có tần số lớn gọi là âm cao hay âm thanh; âm có tần số
nhỏ gọi là âm thấp hay âm trầm. Sự cảm nhận về mức độ to nhỏ của âm thanh
đợc gọi là cờng độ (pitch). Và cờng độ có liên quan rất gần với một thuộc tính
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/
m
2
).
Tuy nhiên, để cảm nhận một âm, ta không đánh giá qua giá trị tuyệt đối
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
của cờng độ âm I, mà xét theo mức cờng độ âm L.
Tức là: L(B) = lg(I/I
0
) , với I
0
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 I
0
) 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/
m
2
. 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ố f
1
, thì đồng thời
cũng phát ra các âm có tần số f
2
=2* f
1
, f
3
=3* f
1
...
Âm có tần số f
1
gọi là âm cơ bản hay hoạ âm thứ nhất. Các âm có tần số
f
2
, f
3
, ... 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ố f
1
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 đó
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
của thời gian, và mỗi khối có một độ rộng xác định; thứ hai là các số số hoá là
rời rạc. Chỉ có một số xác định các độ cao có thể cho mỗi khối. Theo hình vẽ,
ta thấy độ cao các khối không ăn khớp với đờng tín hiệu gốc.
Tín hiệu tương tự Tín hiệu số
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ể.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
3. Định dạng dữ liệu
Quá trình chuyển đổi âm thanh tơng tự sang dạng âm thanh số cũng nh
việc lu trữ âm thanh số liên quan tới 2 vấn đề:
Lấy mẫu (sampling): Quá trình lấy mẫu liên quan tới việc tính toán một
cách tuần hoàn tín hiệu tơng tự, và sử dụng các mẫu này thay cho tín
hiệu gốc trong quá trình xử lý.
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 đó.
Tín hiệu tương tự Xung PAM
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.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Tín hiệu tương tự
Xung PWM
Hình 2.5: PWM
3.3. PCM (Pulse Code Modulation)
Đây là dạng biểu diễn mỗi mẫu nh một chuỗi các xung, mà các xung đó
biểu diễn mã nhị phân (code binary) của nó. Nhng biểu diễn dạng này rất khó
xác định đâu là điểm bắt đầu và kết thúc của mỗi mã. Tuy nhiên, không khó
khăn để có thể khắc phục điều này, ví dụ nh ta có thể xây dựng các mã theo
một dạng riêng để không có mã nào chứa 3 số 1 liên tiếp (111) và sau đó chèn
111 vào tín hiệu tại điểm bắt đầu của mỗi mã. Trong bộ nhớ máy tính, các mã
nhị phân liên tiếp đợc lu trữ nh các số. Thông thờng, dữ liệu âm thanh dạng
PCM đợc lu trữ với 8 hay 16 bits (1 hay 2 bytes) mỗi mẫu.
Tín hiệu tương tự Xung PCM
Hình 2.6: PCM
3.4. Tần số lấy mẫu
Nói chung, các hệ thống lấy mẫu âm thanh đều đợc đặc trng bởi tần số
lấy mẫu (đơn vị: mẫu/giây hay Hz) (sampling rate), đây là số các mẫu đợc sử
dụng để biểu diễn một giây của âm thanh. Và Harry Nyquist (1889-1976) đã
khám phá ra rằng, một tín hiệu âm thanh đã đợc lấy mẫu có thể tạo lại một
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
cách chính xác bất cứ âm thanh nào mà tần số của nó nhỏ hơn một nửa tần số
lấy mẫu. Do đó, một nửa tần số lấy mẫu thờng xuyên đợc tham chiếu nh một
giới hạn Nyquist (Nyquist limit).
Khi xét tới âm thanh số, ta phải xét tới hiệu ứng aliasing bởi có thể có
nhiều sóng hình sin có thể phát sinh ra các mẫu nh nhau nên có khả năng chọn
nhầm tín hiệu. Đối với quá trình thu thanh thì điều đó không quan trọng bởi
một bộ lọc thông thấp đợc kèm vào quá trình chuyển đổi số-tơng tự sẽ gỡ bỏ
các thành phần tần số cao. Tuy nhiên, đó thực sự là một vấn đề trong quá trình
tổng hợp âm thanh số.
Thông thờng, nên làm việc trên các tệp âm thanh với dạng dữ liệu
không nén. Một khi đã nén, chơng trình xử lý sẽ phải giải nén mỗi khi sử dụng,
và với bất cứ lu đồ (giải thuật) nén nào cũng đều gây nguy hiểm tới chất lợng
âm thanh, không kể đến thời gian dùng để giải nén. Vì thế các tệp âm thanh số
dùng để phát lại (playback) không nên sử dụng dạng nén.
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
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
tin (header).
MID: là các tệp có đuôi .mid (Musical Instrument Data Interchange).
Hỗ trợ dữ liệu Standar MIDI File (SMF) trên hệ thống trang bị MIDI playback
(với một số khuôn dạng âm thanh tổng hợp).
Không có yêu cầu thiết lập đặc biệt nào đối với các bộ duyệt (browser)
các tệp âm thanh đợc lu trữ trong một khuôn dạng đặc biệt với tần số lấy mẫu
và độ phân giải riêng biệt. Phần đuôi (phần mở rộng của tệp) và header của tệp
đợc chèn vào một cách tự động khi thực hiện lu tệp, ngoài ra còn có các thông
tin bộ duyệt cần thiết để khởi đầu khi phát lại.
4.2. Chuyển đổi khuôn dạng
Có nhiều trình ứng dụng có thể chuyển đổi các tệp âm thanh số từ kiểu
này sang kiểu khác. Hầu hết các chơng trình xác định khuôn dạng tệp âm
thanh qua phần mở rộng của tệp. Tuy nhiên, nên xác định qua các khuôn dạng
tệp. Các công cụ chuyển đổi có AWave và SoX.
AWave
Với một máy PC chạy Windows 95, AWave là một bộ chuyển đổi tệp
âm thanh. Nó không chạy trên Win 3.1 thậm chí với mã mở rộng win32. Nếu
chỉ có một máy tính cũ và bộ soạn thảo dạng sóng âm thanh không cho phép lu
tệp âm thanh trong một khuôn dạng đặc biệt, tốt nhất nên dùng SoX.
SoX
SoX là viết tắt của Sound Exchange, bộ dịch tệp tổng hợp chấp nhận
nhiều khuôn dạng tệp khác nhau, bao gồm .au, .hcom, .raw, .st, .voc, .auto,
.cdr, .dat, .wav, .aif, .snd và các dạng khác. Các phiên bản của SoX tơng thích
trên Unix và Dos. Nó xác định khuôn dạng tệp từ đuôi tệp song nó cũng tự
động xác định các đặc điểm. SoX cũng có thể chuyển đổi tần số lấy mẫu và
các phép xử lý hiệu ứng âm thanh. Ví dụ nh chuyển tệp .au thành .wav với
dòng lệnh sau:
sox filename.au filename.wav
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Chơ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:
Độ 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
4 Dạng âm thanh
4 Tốc độ mẫu (mẫu/giây)
4 Số các kênh truyền
N Mô tả văn bản tuỳ chọn (ít nhất 4 bytes)
N Dữ liệu âm thanh
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Phần lớn các tệp Au chứa header nh minh hoạ trên. Đặc biệt 4 bytes đầu
là .snd. Có nhiều tệp cũ hơn mà bản thân chúng định danh nh dạng Au
(chúng sử dụng phần mở rộng .au), nhng chúng không có phần header này.
Sau đây là một vài mã hoá dạng âm thanh đợc dùng cho các tệp Au.
Mã hoá Mô tả
1
8-bit à-Law G.711
2 8-bit linear
3 16-bit linear
4 24-bit linear
5 32-bit linear
6 Floating-point sampled
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
23 ADPCM G.721
24 ADPCM G.722
25 ADPCM G.723.3
26 ADPCM G.723.5
27 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.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
1.2. Voc
Dạng của Sound Blaster và Sound Blaster Pro. Đây là dạng chỉ đáp ứng
các âm 8-bit; dạng đơn (mono) cho 44.1 kHz, và các âm nổi (stereo) cho 22
kHz. Các tệp .Voc có thể chứa thông tin cho sự lặp lại và tính trầm (silence).
Tệp Voc bao gồm một header với các khối dữ liệu theo sau. Một vài
khối dữ liệu chứa dữ liệu âm thanh hiện thời; những khối khác chứa các thông
tin về định dạng hay dữ liệu trợ giúp khác. Khởi đầu tệp Voc đợc thiết kế cho
các bộ xử lý họ Intel, mọi số dạng multi-byte đợc lu trữ khởi đầu với byte
thể hiện ít nhất.
Định danh tệp Voc
Mọi tệp Voc bắt đầu với một ký hiệu dài 20-byte, chứa các từ Creative
Voice File và đặc tính Control-Z. Đặc tính Control-Z là dấu hiệu cuối tệp
(end-of-file) cho MS-DOS; sự hiển diện của nó đảm bảo rằng toàn bộ tệp
không thể đợc in hay soạn thảo một cách ngẫu nhiên trên hệ thống đó.
Voc Header
Header chứa một giá trị ký hiệu (signature value) và một phiên bản tệp.
Chú ý rằng giá trị 26 (hex 1A), là một dấu hiệu kết thúc tệp trong các hệ thống
MS-DOS. Thông thờng, mã hoá phiên bản tệp là 266 (phiên bản 1.10) hay 267
(phiên bản 1.20).
Sau đây là Voc Header:
Độ dài Mô tả
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.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Sau đây là khuôn dạng của một khối dữ liệu của tệp Voc:
Độ dài Mô tả
1 Dạng khối
3 Độ dài dữ liệu: n
n 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-bit
1 Nén, 4 bits/mẫu
2 Nén, 2.6 bits/mẫu
3 Nén, 2 bits/mẫu
4 Dữ liệu dạng PCM signed 16-bit
6 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à
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
nó định rõ khối âm thanh. Nên cần thận trọng để không viết đè lên bất cứ tham
số nào mà có thể nó đã đợc thiết lập bởi một khối trớc đó.
Khối âm thanh liên tiếp (dạng 2) (Sound Continuation Block)
Một tệp Voc có thể chỉ có một khối dữ liệu âm thanh dạng 1. Tuy
nhiên, dữ liệu âm thanh có thể cần phải đợc làm vỡ ra qua các khối multiple.
Điều này thờng xuyên xuất hiện bởi ta muốn chèn thêm vài dạng khối khác
(nh một dấu hiệu vòng lặp) trong phần giữa của dữ liệu âm thanh. Dữ liệu âm
thanh tiếp theo đợc lu trữ trong các khối âm thanh liên tiếp dạng 2. Khối âm
thanh liên tiếp chỉ chứa dữ liệu về mẫu âm thanh. Nó không lặp lại bất cứ
thông tin định dạng nào từ khối dạng 1 trớc đó.
Khối trầm (dạng 3) (Silence Block)
Với mục đích để giảm kích thớc tổng của dữ liệu, một vài phân đoạn có
thể đợc thay thế bởi các khối trầm (silence blocks), biểu thị một quãng trầm.
Dữ liệu của khối này chứa một số kích thớc 2-byte biểu thị số các mẫu của
quãng trầm để sử dụng và 1 byte chứa mã tần số lấy mẫu. Theo lý thuyết, điều
này cho phép quãng trầm sử dụng một tần số lấy mẫu khác so với âm thanh.
Nhng trong thực tế, tần số lấy mẫu đợc sử dụng ở đây nên đồng nhất với tần số
lấy mẫu của âm thanh trớc đó.
Khối đánh dấu (dạng 4) (Marker Block)
Dữ liệu cho khối đánh dấu là một số kích thớc 2-byte. Số này có thể đợc
sử dụng bởi các ứng dụng multimedia cho việc đồng bộ các sự kiện. Ví dụ,
một ứng dụng về sự trợt có thể thay đổi sự hiển thị mỗi lần nó thấy khối đánh
dấu để quá trình trợt ăn khớp với quá trình biểu diễn âm thanh. Các giá trị
trong khoảng 0 tới 65,536 đợc bảo lu và không nên đợc sử dụng.
Khối văn bản (dạng 5) (Text Block)
Dữ liệu là một xâu ký tự dạng null-terminated của dữ liệu dạng ASCII.
Dạng này có thể đợc sử dụng để lu trữ thông tin về quyền tác giả hay các dữ
liệu dạng văn bản khác.
Vòng lặp (dạng 6 và 7) (Repeat Loops)
Các khối dạng 6 và 7 đợc sử dụng để cài đặt vòng lặp trong một tệp
Voc. Khối dạng 6 đợc đặt tại phần đầu của phân đoạn đợc lặp, và khối dạng 7
đánh dấu sự kết thúc của vòng lặp. Dữ liệu cho dấu hiệu bắt đầu bao gồm một
số kích thớc 2-byte chỉ định lợng thời gian thêm vào mà phân đoạn này nên đ-
ợc lặp (một số đếm 0 có nghĩa là dữ liệu nên chỉ đợc phát một lần). Khối kết
thúc không có dữ liệu.
Khối mở rộng (dạng 8) (Extension Block)
Khối mở rộng dạng 8 không có trong các phiên bản trớc đây của tệp
Voc. Nó đã đợc thêm vào để đáp ứng cho các tệp âm thanh dạng stereo. Khi
xuất hiện, nó luôn ở trớc khối dữ liệu âm thanh dạng 1, và nó ghi đè lên tần số
lấy mẫu và thông tin nén trong khối dữ liệu âm thanh.
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Sau đây là cấu trúc dữ liệu khối mở rộng dạng 8:
Độ dài Mô tả
2 Mã tần số lấy mẫu
1 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:
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
Độ 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
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
thanh; và tệp AVI lu trữ các hình ảnh video.
Đặc tính chung của các tệp Riff và Iff
Do tệp Wave là một dạng đặc biệt của tệp Riff, nên trớc hết ta nói về
những đặc trng cơ bản cơ bản của dạng RIFF. Trong đó ta chú tâm tới các biến
thể IFF khác, bao gồm Aiff và IFF/8SVX.
Một tệp Riff bao gồm một tập hợp các khúc xếp chồng. Mỗi khúc chứa
một mã độ dài 4 ký tự (nh RIFF, fmt, hay LIST; các mã ngắn hơn đợc chèn
thêm các khoảng trống). Mã này chỉ định khuôn dạng của khúc. Ví dụ, một
khúc fmt chứa các thông tin về khuôn dạng âm thanh. Tiếp theo đó là dạng
khúc với một giá trị kích thớc 4-byte, chỉ ra kích thớc của dữ liệu đợc khúc đó
mang theo. Trờng kích thớc trong khúc RIFF ít hơn kích thớc tệp tổng thể 8-
bytes do không tính đến dạng khúc và kích thớc.
Một vài dạng khúc, nh các khúc RIFF và LIST, đợc gọi là các
container chunks mà chúng chứa đựng các khúc khác. Dữ liệu của
"container chunk" bắt đầu với một mã độ dài 4 ký tự chỉ ra dạng của dữ liệu
chứa trong khúc đó. Ví dụ, khúc RIFF trong minh hoạ trên có mã là WAVE,
chỉ ra rằng nó chứa các dữ liệu về âm thanh. Các tên khúc bên trong có thể có
nghĩa khác nhau, phụ thuộc vào các container xung quanh. Do khúc fmt đợc
chứa trong RIFF Wave container, nên nó chỉ định khuôn dạng của dữ liệu âm
thanh. Trong một dạng container khác, nó có thể chứa các thông tin khác.
Cấu trúc tổng quát của một tệp Wave
Đây là khuôn dạng phổ biến nhất để lu trữ âm thanh số trong thế giới
PC. Nó đợc thiết kế cho các ứng dụng multimedia chạy dới Microsft Windows.
Tệp Wav lu giữ các mẫu dạng sóng của một hoặc nhiều kênh theo các tần số
lấy mẫu. Tệp Wav tự mã hoá và mô tả dữ liệu của nó trong phần mềm mà ta sử
dụng. Nó không giới hạn độ dài tệp, có thể lên tới 4GB.
Một tệp Wave là một dạng đặc biệt của tệp Riff, và mọi tệp Riff đều bắt
đầu với các ký tự RIFF. Tiếp theo đó là 4-byte độ dài và mã định dạng. Tệp
Wav theo cấu trúc RIFF (Microsofts 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:
R I F F Kích thước
W A V E Khúc fmt Khúc data
Các bytes kích thước
Hình 3.1: Khuôn dạng tệp Wave
Do có rất nhiều tệp Wave có cùng cấu trúc cơ sở này, nên nhiều chơng
Đồ án tốt nghiệp Xây dựng chơng trình xử lý âm thanh số
trình xử lý các tệp Wave giống nh chúng có một header ấn định. Điều này tạo
thuận lợi cho việc viết các tệp Wave dài nh khi chỉ viết các dữ liệu PCM và
thiết lập một cách thích đáng các trờng kích thớc. Sau đây là mô tả dạng tệp
Wave cơ bản:
Kích thớc Mô tả
4 Dạng khúc: RIFF
4 Kích thớc tệp tổng thể trừ 8
4 Dạng RIFF container: WAVE
4 Dạng khúc: fmt
4 Độ dài dữ liệu khúc định dạng: thông thờng là 16
16 Dữ liệu khúc định dạng
4 Dạng khúc: data
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ứ