ĐỒ Á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 lưu 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 lưu 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 lưu 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ể lưu trữ một cách hiệu quả nhất.
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 lưu 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
ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
nhau, 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ệ
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
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)
n
x
a
(t).
σ
(t-n.T
s
).e
-st
dt
X
e
(s) =
∑
∞
−∞=
−
n
sTn
sa
s
eTnx
..
)..(
(1.6)
ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
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
−∞=
+
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) =
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ư,
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.
ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
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à:
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
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
∑
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
để có kết quả cuối cùng.
ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
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â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.
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 nhưng đườ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,
ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
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 đó
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
Quá trình chuyển đổi âm thanh tương tự sang dạng âm thanh số cũng như
việc lưu 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, nhưng 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ó. Nhưng 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
• 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ỏ, nhưng 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, nhưng chất lượng phụ thuộc vào thiết bị.
Nói chung, các tệp âm thanh số được lưu 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 nhưng
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
ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
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 nhưng khác phần đầu thông
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 lưu 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ó 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 lưu 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), nhưng 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ả
Nói chung, dạng Au là dạng tệp lưu 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
ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
cơ sở cho các quá trình xử lý tiếp theo.
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 lưu 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 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
ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
âm thanh thêm vào có thể được lưu 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 chưa
đượ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ó đị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 lưu 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
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à lưu 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 lưu 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 lưu 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
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 TỐT NGHIỆP XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ÂM
THANH SỐ
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) lưu trữ
âm thanh; và tệp AVI lưu 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 trưng 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
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, nhưng 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