Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 1
Mục lục ..................................................................................................................... 1
Lời nói đầu ............................................................................................................... 3
PHẦN I . LÝ THUYẾT ......................................................................................... 4
CHƯƠNG 1. CÁC KIẾN THỨC CƠ BẢN VỀ ÂM THANH ............................ 5
I. NHỮNG KHÁI NIỆM CƠ BẢN - SÓNG CƠ ................................................... 6
1.1. Sự hình thành sóng trong môi trường đàn hồi ................................. 6
1.2. Các đặc trưng của sóng. ...................................................................... 7
1.3. Phương trình sóng. ............................................................................... 8
II. SÓNG ÂM VÀ ĐẶC TÍNH ÂM THANH. ...................................................... 8
2.1 Dao động âm và sự truyền dao động. ................................................. 8
2.2 Đơn vò vật lý của âm thanh. ................................................................. 9
2.3. Đặc tính sinh lý về sự cảm thụ âm. .................................................... 12
CHƯƠNG 2. WAVE FILE...................................................................................... 16
I. MULTIMEDIA WINDOWS. ............................................................................. 16
II. CẤU TRÚC WAVE FILE. ................................................................................ 17
2.1 RIFF file. ................................................................................................ 17
2.2 Cấu trúc File Wave. .............................................................................. 17
III. ĐỌC RIFF FILES ............................................................................................. 21
CHƯƠNG 3. LÝ THUYẾT XỬ LÝ TÍN HIỆU SỐ ............................................. 25
I. TÍN HIỆU VÀ HỆ THỐNG RỜI RẠC ............................................................. 25
1. Giới thiệu .................................................................................................... 25
2. Đáp ứng xung trong hệ TTBB ................................................................. 25
3. Tính chất của tổng chập của hệ TTBB .................................................. 26
4. Hệ nhân quả ............................................................................................... 27
5. Tính ổn đònh ............................................................................................... 27
6. Phương trình sai phân tuyến tính hệ số hằng ........................................ 28
7. Biểu diễn các hệ rời rạc trong miền tần số ........................................... 28
8. Đònh lý lấy mẫu Shannon ......................................................................... 30
II. PHÉP BIẾN ĐỔI FOURIER RỜI RẠC ........................................................ 30
1. Chuỗi Fourier rời rạc của tín hiệu rời rạc tuần hoàn ......................... 30
2. Biến đổi Fourier rời rạc của tín hiệu có độ dài hữu hạn ............................... 31
3. Phép biến đổi nhanh Fourier (FFT) ................................................................. 32
CHƯƠNG 4. GIỚI THIỆU VỀ MPEG. ................................................................ 33
I. GIỚI THIỆU. ...................................................................................................... 33
1. MPEG là gì? .............................................................................................. 33
2. So sánh các chuẩn MPEG ........................................................................ 33
3. m thanh MPEG ...................................................................................... 34
4. Các khái niệm cơ bản ............................................................................... 35
5. Hoạt động ................................................................................................... 38
II. CÁC KHÁI NIỆM TRONG ÂM THANH MPEG ........................................ 40
1. Lược đồ mã hóa Perceptual Sub-band ................................................... 40
2. Giải thích hiệu qủa che (masking efficiency) ........................................ 41
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 2
3. Các lớp của âm thanh MPEG ................................................................... 43
III. CÁC THÔNG SỐ. ............................................................................................. 45
CHƯƠNG 5. CÁC GIẢI THUẬT NÉN ÂM THANH ........................................ 50
I. LÝ THUYẾT THÔNG TIN ............................................................................... 50
II. CÁC GIẢI THUẬT NÉN KHÔNG CÓ TỔN THẤT .................................... 51
1. Mã hóa Huffman ....................................................................................... 51
2. Mã hóa Huffman sửa đổi .......................................................................... 53
3. Mã hóa số học ............................................................................................ 54
4. Giải thuật Lempel-Ziv-Welch (LZW) .................................................... 55
III. CÁC GIẢI THUẬT NÉN CÓ TỔN THẤT .................................................. 57
1. Các phương pháp nén âm thanh đơn giản ............................................. 57
2. Nén âm thanh dùng mô hình âm tâm lý................................................. 57
3. Nén âm thanh theo chuẩn MPEG ........................................................... 58
PHẦN II. THIẾT KẾ CHƯƠNG TRÌNH............................................................. 60
CHƯƠNG 6. LƯU ĐỒ GIẢI THUẬT VÀ CẤU TRÚC DỮ LIỆU ....................61
I. SƠ ĐỒ KHỐI. .......................................................................................................61
II. CẤU TRÚC DỮ LIỆU VÀ ĐỊNH NGHĨA .....................................................62
A. CẤU TRÚC DỮ LIỆU ......................................................................................62
1. Các cấu trúc về file ..................................................................................62
2. Các cấu trúc về dòng bít dữ liệu ............................................................63
3. Các cấu trúc để đònh dạng dòng bít dữ liệu .........................................63
4. Các cấu trúc huffmancodetab. ...............................................................67
5. Các cấu trúc tính MDCT ........................................................................67
6. Các cấu trúc scalefac_struct ..................................................................67
B. CÁC ĐỊNH NGHĨA ...........................................................................................68
1. Các đònh nghóa dùng trong truy xuất dữ liệu .......................................68
2. Các đònh nghóa dùng trong tính toán FFT ............................................68
3. Các đònh nghóa dùng trong đònh dạng dòng dữ liệu ............................68
4. Các đònh nghóa dùng trong bộ mã hoá Huffman .................................68
5. Các đònh nghóa dùng trong phân tích dữ liệu .......................................69
6. Các đònh nghóa dùng trong mô hình âm tâm lý....................................69
7. Các đònh nghóa dùng trong truy xuất nhập dữ liệu .............................69
8. Các đònh nghóa dùng trong cấu trúc file Wave và file Mpeg .............69
III. LƯU ĐỒ .............................................................................................................71
CHƯƠNG 7: GIAO DIỆN VÀ THUYẾT MINH CHƯƠNG TRÌNH ................75
I. GIỚI THIỆU .......................................................................................................75
II. GIAO DIỆN .........................................................................................................75
III.CHƯƠNG TRÌNH ..............................................................................................77
TÀI LIỆU THAM KHẢO ......................................................................................87
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 3
Lời nói đầu
Công nghệ thông tin là ngành công nghiệp mũi nhọn của thế giới nói
chung và của việt nam nói riêng, nó đã phát triển mạnh mẽ không ngừng trong
những năm gần đây. Khi đời sống được nâng lên khoa học kỹ thuật phát triển
nhu cầu về giải trí cũng đa dạng lên, các loại hình giải trí không ngừng gia
tăng và ngày càng phong phú, đa dạng các loại hình giải trí như: trò chơi điện
tử, nghe nhạc xem phim, xem ca nhạc(video), và đặc biệt là những trong chơi
dạng không gian ba chiều. Sự phát triển ồ ạt này đã dẫn tới ngành công nghệ
phần cứng đã không thể đáp ứng được những đòi hỏi về lưu trữ, đồng hành với
sự phát triển này là mạng máy tính đó chính là Internet ngày càng phát triển
số lượng người tham gia truy cập ngày càng lớn và nhu cầu của họ thì ngày
càng phong phú và đa dạng về tất cả các loại hình nói trên. Do đó tốc độ truy
cập, tốc độ truyền tải trên mạng được quan tâm hơn để cho người dùng không
phải sốt ruột ngồi chờ những trang web mà mình truy cập, họ không phải bực
mình khi download những file âm thanh và những bài hát mà họ ưa thích vì
đường truyền quá chậm trong khi công nghệ phần cứng đã phát triển mạnh.
Chính vì vậy các nhà nghiên cứu phần mềm đã chú ý đến việc phát triển phần
mềm để hỗ trợ phần cứng. Họ đã tạo ra những chương trình phần mềm hỗ trợ
tích cực phần cứng, từ đó đã ra đời những phần mềm nén âm thanh, hình ảnh,
nén video, tách âm thanh từ những file video…để tạo ra những dạng âm thanh,
hình ảnh, video như mindi, mpeg, mp3, mp4… những file ảnh dạng gif,
jpeg…với dung lượng lưu trữ vô cùng nhỏ mặc dù chất lượng có giảm đi đôi
chút nhưng không đáng kể so với những gì nó đạt được để truyền tải, truy cập
nhanh hơn.
Sự tồn tại của chuẩn JPEG (Joint Photographic Experts Group) chỉ để
giảm tốc độ bit và chủ yếu phục vụ cho hình ảnh, rõ ràng là không đủ đáp ứng
cho hình ảnh động có kèm âm thanh. Để đáp ứng nhu cầu của thò trường, một
nhóm các chuyên gia về hình ảnh động (Moving Picture Experts Group), gọi
tắt là MPEG, được thành lập để nghiên cứu đưa ra những lược đồ mã hóa phù
hợp cho việc truyền hình ảnh động và ghi lại chúng theo tiêu chuẩn trong các
thiết bò lưu trữ số như CD-ROM, Video CD..
Phần trình bày của luận văn chỉ nằm trong khuôn khổ "m thanh". Do
đó mọi vấn đề liên quan tới hình ảnh sẽ không được đề cập tới, dù chuẩn
MPEG là dùng cho cả âm thanh và hình ảnh.
Mục tiêu của đề tài chủ yếu chỉ để tìm hiểu về các phương pháp mã
hoá và nén âm thanh theo chuẩn Mpeg, từ đó dựa trên một số source code
(viết bằng C) đã có trên mạng Internet viết lại bằng ngôn ngữ Visual C++,
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 4
nhằm hiểu sâu hơn về giải thuật, đồng thời tạo ra một giao diện thân thiện
hơn.
Do trình độ và kiến thức có hạn nên không tránh khỏi những thiếu sót,
em kính mong thầy tham gia và giúp đỡ em để em hoàn thành được tốt hơn.
Em xin chân thành cám ơn thầy đã tạo điều kiện thuân lợi nhất giúp em
hoàn thành báo cáo này.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 5
PHẦN I
LÝ THUYẾT CƠ BẢN
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 6
CHNG 1. CÁC KIẾN THỨC CƠ BẢN VỀ ÂM THANH.
I. NHỮNG KHÁI NIỆM CƠ BẢN - SÓNG CƠ
1.1. Sự hình thành sóng trong môi trường đàn hồi.
a. Đònh nghóa:
Các môi trường chất khí, chất lỏng, chất rắn là môi trường đàn hồi.
Môi trường đàn hồi có thể coi là những môi trường liên tục gồm những
phân tử liên kết chặt chẽ với nhau, lúc bình thường mỗi phân tử có một
vò trí cân bằng bền.
b. Sự hình thành sóng trong môi trường đàn hồi:
• Do tính chất của môi trường đàn hồi, cho nên nếu tác dụng lên phân
tử nào đó của môi trường thì phân tử này rời khỏi vò trí cân bằng bền.
• Do tương tác, các phân tử lân cận một mặt kéo phân tử A về vò trí
cân bằng, mặt khác nhận một phần năng lượng do phân tử A truyền
sang, do đó cũng dao động theo, hiện tượng này xảy ra liên tiếp tạo
thành sóng. Sóng đàn hồi (sóng cơ) là sự lan truyền dao động trong môi
trường đàn hồi. Sóng cơ không thể truyền được trong chân không, vì
chân không không phải là môi trường đàn hồi.
• Cần lưu ý trong khi truyền dao động, các phân tử của môi trường
không di chuyển theo các dao động được lan truyền mà chỉ dao động
quanh vò trí cân bằng của nó.
c. Một số khái niệm về sóng:
• Nguồn sóng: là ngoại vật gây ra kích động sóng.
• Tia sóng: là phương truyền sóng.
• Môi trường sóng: là không gian mà sóng truyền qua.
• Mặt sóng: là mặt chứa những điểm (phân tử) có cùng trạng thái dao
động tại một thời điểm nào đó. Tia sóng luôn vuông góc với mặt sóng.
• Sóng cầu: mặt sóng là những mặt cầu phân bố đều trong không gian,
tâm là nguồn sóng. Trong môi trường đồng chất và đẳng hướng sẽ có
sóng cầu. Đối với sóng cầu tia sóng trùng với bán kính của mặt cầu.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 7
• Sóng phẳng: mặt sóng là những mặt phẳng song song nhau, tia sóng
vuông góc với mặt sóng. Nếu nguồn sóng ở rất xa môi trường đang xét
thì mặt sóng có thể coi là những mặt phẳng song song.
• Sóng dọc: là sóng trong đó các phân tử của môi trường dao động
quanh vò trí cân bằng trên phương trùng với tia sóng. Khi có sóng dọc,
trên phương của tia sóng các phân tử của môi trường khi thì bò nén chặt,
khi thì giãn ra làm cho các phân tử của môi trường có chỗ dày chỗ thưa.
• Sóng ngang: là sóng trong đó các phân tử của môi trường dao động
quanh vò trí cân bằng trên phương vuông góc với tia sóng.
d. Nguyên nhân gây ra sóng ngang và sóng dọc:
• Tùy tính chất của môi trường đàn hồi mà trong đó có thể xuất hiện
sóng ngang hay sóng dọc.
- Khi một lớp của môi trường bò lệch đối với lớp khác làm xuất hiện các
lực đàn hồi có xu hướng kéo lớp bò lệch về vò trí cân bằng thì trong môi
trường đó có thể truyền được sóng ngang. Vậy vật rắn là một môi
trường có tính chất đó.
- Nếu trong môi trường không có các lực đàn hồi khi các lớp song song
bò lệch đối với nhau thì sóng ngang không thể hình thành được. Chất
lỏng và chất khí là những môi trường đó.
- Khi bò biến dạng nén hay căng mà trong môi trường có các lực đàn hồi
xuất hiện thì trong môi trường đó có thể truyền được sóng dọc. Chẳng
hạn khi bò nén, chất lỏng hay chất khí sẽ tăng áp suất, lực nén giữ vai
trò lực đàn hồi.
• Như vậy trong chất lỏng và chất khí chỉ có sóng dọc truyền được,
còn trong chất rắn có thể truyền được cả hai loại sóng.
1.2. Các đặc trưng của sóng.
a. Vận tốc truyền sóng (C) :
Là quãng đường mà sóng truyền được trong một đơn vò thời gian.
b. Bước sóng λ:
Là quãng đường mà sóng truyền được sau một thời gian bằng 1 chu kỳ
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 8
T. Như vậy λ là khoảng cách bé nhất giữa các phân tử dao động cùng
pha. Theo đònh nghóa ta có : λ = CT.
c. Chu kỳ và tần số:
• Chu kỳ T là thời gian cần thiết để sóng truyền được 1 bước sóng λ.
• Tần số f là số chu kỳ thực hiện được trong 1 giây :
F = 1/T (Hz)
1.3. Phương trình sóng.
• Sóng phẳng truyền dọc theo phương OY với vận tốc C thì phương
trình sóng biểu thò mối quan hệ giữa độ chuyển dời X của phân tử dao
động kể từ vò trí cân bằng với thời gian t và khoảng cách y đến các vò trí
cân bằng các phân tử dao động trên phương truyền sóng như sau :
X = asinω(t – y/c)
• Nếu sóng phẳng truyền theo hướng ngược với hướng tính khoảng
cách y thì :
X = asinω(t + y/c)
• Đối với sóng cầu thì biên độ a của dao động sóng tại vò trí cách
nguồn bằng bán kính r, tỉ lệ nghòch với r, phương trình sóng có dạng:
X =
a
/
r
sinω(t – r/c)
II. SÓNG ÂM.
2.1. Dao động âm và sự truyền dao động.
• Sóng âm là một loại sóng cơ có biên độ dao động nhỏ mà thính giác
nhận biết được. Thí dụ dao động phát ra từ dây đàn, mặt trống.. đang
rung động. Sóng âm là một loại sóng cơ nên mọi khái niệm và hiện
tượng về dao động và sóng cơ trên đây đều áp dụng cho sóng âm.
• Trong không khí cũng như trong mọi chất khí khác, những dao động
truyền đi dưới dạng sóng dọc, khi đến tai người những dao động có tần
số từ 16 đến 20000 Hz sẽ gây cảm giác đặc biệt về âm.
• Các dao động đàn hồi có tần số f>20.000 Hz là sóng siêu âm.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang 9
• Các dao động đàn hồi có tần số f<16 Hz là sóng hạ âm
• Mỗi âm có một tần số riêng, đơn vò của tần số là héc (Hz) với đònh
nghóa:”Héc là tần số của một qúa trình dao động âm trong đó mỗi giây
thực hiện được một dao động”.
1 Héc (Hz) = 1 dao động / 1 giây
• Việc phân chia sóng hạ âm, sóng siêu âm và sóng âm (âm thanh)
liên quan tới khả năng sinh lý của thính giác
2.2. Đơn vò vật lý của âm thanh.
• Âm thanh hay tiếng động mà con người nhận biết được do tác động
của sóng âm lên màng nhó tai.
• Các dao động âm phát ra từ nguồn lan truyền trong môi trường đàn
hồi như không khí.. dưới dạng sóng đàn hồi gọi là sóng âm. Sóng âm
đến kích động màng nhó tai gây cảm giác về âm, do đó cần phân biệt
hai loại đại lượng về âm:
- Đại lượng âm khách quan: những đại lượng thuần túy vật lý, không
phụ thuộc vào tai người.
- Đại lượng âm chủ quan: những đại lượng tâm lý vật lý phụ thuộc vào
tai người.
2.2.1. Đơn vò âm khách quan:
a. p suất âm:
Khi sóng âm tới một mặt nào đó, do các phân tử môi trường dao
động tác dụng lên mặt đó một lực gây ra áp suất. p suất ở đây là áp
suất dư do sóng âm gây ra ngoài áp suất khí quyển.
Trong phạm vi nghe được, áp suất âm trong khoảng từ 2.10
-4
đến
2.10
2
µbar, chênh lệch 10
6
lần, đó là một phạm vi rất rộng.
b. Cường độ âm (I):
- Cường độ âm ở một điểm nào đó trên phương đã cho trong trường âm
là số năng lượng âm đi qua đơn vò diện tích của mặt S vuông góc với
phương truyền âm, tại điểm đó trong đơn vò thời gian.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
10
- Một vài cường độ âm đáng chú ý:
Người nói thường I = 2.10
-3
W/m
2
Còi ô-tô I = 5 W/m
2
Còi báo động I = 3.000 W/m
2
- Trong điều kiện chuẩn (t
o
= 20
o
C, áp suất 760mmHg):
Vận tốc âm trong không khí : C = 340 m/s
ρ = 0,00121 gr/cm
3
.
γ = C
p
/C
v
= 1,4
- Trong tính toán người ta quy ước lấy âm đơn tần số f = 1000 Hz làm
chuẩn để so sánh (gọi là âm chuẩn).
- Đối với âm chuẩn, trong phạm vi nghe được
Áp suất âm nhỏ nhất P
min
= 2.10
-4
µbar
Cường độ âm nhỏ nhất I
min
= 10
-16
W/cm
2
.
- p suất âm và cường độ âm lớn nhất mà tai người có thể chòu được là:
P
max
= 2.10
2
µbar
I
max
= 10
-4
W/cm
2
.
- Công suất âm nhỏ nhất có thể nghe thấy được W
min
= 10
-12
Watt.
2.2.2. Đơn vò âm chủ quan:
• Tai người trung bình có thể nhận được những sóng âm có tần số từ
16 đến 20000 Hz, hiệu qủa này có liên quan tới khả năng sinh lý của tai
người.
• Như vậy, âm thanh là một hiện tượng tâm lý vật lý, không phải bất
cứ sóng âm nào tới tai cũng gây ra cảm giác âm thanh như nhau. m có
tần số khác nhau gây ra cảm giác khác nhau.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
11
• Cường độ âm nhỏ nhất của một sóng âm xác đònh mà tai người nghe
thấy được gọi là “Ngưỡng nghe”. m có tần số khác nhau giá trò
ngưỡng nghe cũng khác nhau. Tai người thính nhất với âm có tần số
trong khoảng từ 1000 đến 3000 Hz, trong phạm vi này cường độ âm
ngưỡng nghe nhỏ nhất. Những tần số khác, tai kém thính hơn, ngưỡng
nghe có giá trò lớn hơn.
• Đối với âm chuẩn, cường độ và áp suất ở ngưỡng nghe bằng:
P
o
= 2.10
-5
N/ m
2
.
I
o
= 10
-12
W/m
2
.
• Do cảm giác âm thanh phụ thuộc vào đặc tính sinh lý của tai người,
cho nên phải có một số đại lượng đặc trưng cho cảm giác âm thanh phụ
thuộc vào tai người, những đại lượng như vậy gọi là đại lượng âm chủ
quan.
a. Bel và decibel (db):
Theo đònh lý sinh lý của Vebe-Fécne, cảm giác nghe to đối với một âm
không tỉ lệ thuận với cường độ âm của âm đó. Khi cường độ âm tăng từ
I
o
tới I thì cảm giác nghe to tăng tỉ lệ với lg(I/I
o
). Do đó người ta dùng
thang lô-ga-rít cơ số 10 để đo mức cảm giác so với mức ngưỡng.
Mức ngưỡng gọi là mức zero qui ước :
lg(I/I
o
) = lg(10
-12
/ 10
-12
) = 0 bel.
Đơn vò là Bel hay db. 10db = 1 bel.
b. Mức cường độ âm (L
I
):
Nếu gọi I là cường độ âm của âm đang xét và I
o
là cường độ âm của
mức zero qui ước của âm chuẩn thì mức cường độ âm L
I
bằng :
L
I
= 10lg(I/I
o
) db
I tính bằng W/m
2
.
c. Mức áp suất âm (Lp):
Mức áp suất âm suy dẫn từ mức cường độ âm Lp = 20lg(P/P
o
) db.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
12
Trong đó:
P :áp suất âm có ích của âm đang xét (N/m2)
P
o
:áp suất âm của âm chuẩn ở ngưỡng nghe.
Thực tế áp suất âm là đại lượng cơ bản hơn cường độ âm, nên thường
dùng mức áp suất âm sau đó suy ra mức cường độ âm. Đơn vò chung là
bel hay db. Đơn vò này cũng dùng để đo mức công suất, mức năng lượng
âm.
Vài mức áp suất âm đáng chú ý :
Nói chuyện thường : 30db.
Nói chuyện to : 70db.
2.2.3. Quãng độ cao (quãng tần số):
• Quãng tần số của hai âm là khoảng cách tần số của hai âm đó. Nếu
một âm tần số là f
1
, một âm khác tần số là f
2
(f
2
> f
1
) thì f
2
/ f
1
= 2
x
.
Khi x=1 tức f
2
/ f
1
= 2 gọi là 1 quãng tần số (hay 1 ốc-ta).
Khi x=1/2 tức f
2
/ f
1
= 1.41 gọi là nửa ốc-ta.
Khi x=1/3 tức f
2
/ f
1
= 1.26 gọi là 1/3 ốc-ta.
- Mức áp suất âm của 1 ốc-ta bằng mức áp suất âm của 1/2 ốc-ta cộng
thêm 3db.
- Mức áp suất âm của 1 ốc-ta bằng mức áp suất âm của 1/3 ốc-ta cộng
thêm 5db.
• Vì quãng tần số của một âm qui đònh độ cao của âm đó nên còn gọi
là quãng độ cao. Theo tập quán âm nhạc thì quãng độ cao gọi là quãng
8 (bát độ).
• Chẳng hạn âm LA, tần số f=440 Hz tăng 1 bát độ là tăng gấp đôi tần
số, tức là 880 Hz.
• Trong thực tế thường gặp những âm phức tạp bao gồm nhiều tần số.
Tập hợp tất cả những tần số cấu tạo trong một âm thanh gọi là “tần
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
13
phổ” của âm đó, tần phổ có thể gián đoạn hay liên tục. Một âm có tần
phổ liên tục được đặc trưng bằng “Mức tần phổ B” với đònh nghóa:
- Mức tần phổ là mức áp suất âm trong chiều rộng của dải tần số bằng
1.
- Một âm có mức tần phổ B không đổi với mọi tần số gọi là tiếng ồn
trắng.
- Một âm có tần phổ gián đoạn được đặc trưng bằng “mức dải tần số”
với đònh nghóa: mức dải tần số là mức áp suất âm trong chiều rộng của
dải tần số lớn hơn 1 Hz.
2.3. Đặc tính sinh lý về sự cảm thụ âm thanh.
2.3.1. Mức to, độ to, mức âm cảm giác:
• Mức áp suất âm, mức cường độ âm trên đây vừa mang tính chất chủ
quan vừa mang tính chất khách quan vì những đại lượng này xác đònh từ
những đại lượng thuần túy vật lý. Vấn đề có ý nghóa to lớn trong thực tế
là cần biết được sức mạnh của âm thanh đo bằng tai người.
• Mức to, độ to của một âm là sức mạnh cảm giác do âm thanh gây
nên trong tai người, nó không những phụ thuộc vào áp suất âm mà còn
phụ thuộc vào tần số của âm đó. Thí dụ 2 âm có tần số 100 Hz và 1000
Hz áp suất âm đều bằng 0,02 µbar nhưng nghe to nhỏ khác nhau, âm
1000 Hz nghe to hơn âm 100 Hz. Muốn nghe to bằng âm 1000 Hz thì âm
100 Hz phải có áp suất bằng 0,25 µbar. Như vậy tai người không nhạy
đối với âm 100 Hz bằng âm 1000 Hz. Tần số càng thấp tai người càng
kém nhạy.
a. Mức to:
- Để biểu thò mức to trên cảm giác chủ quan, ta dùng đại lượng “mức
to”, đơn vò là “Fôn” với đònh nghóa như sau :
Fôn là mức to của âm chuẩn, về giá trò bằng mức áp suất âm của âm
chuẩn tức là :
L = 20lg P/Po (Fôn).
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
14
- Vậy mức to của một âm bất kỳ đo bằng Fôn, về giá trò bằng mức áp
suất âm của âm chuẩn đo bằng db có cùng mức to với âm đó. Thí dụ:
âm có tần số 500 Hz mức áp suất âm bằng 25 db và âm có tần số 50 Hz
mức áp suất âm bằng 64 db sẽ có cùng mức to bằng 20 Fôn, bằng mức
to của âm 1000 Hz mức áp suất bằng 20 db.
- Muốn biết mức to của một âm bất kỳ phải so sánh với âm chuẩn.
- Đối với âm chuẩn, mức to ở ngưỡng nghe là 0 Fôn, ngưỡng chói tai là
120 Fôn.
- Cùng một giá trò áp suất, âm tần số càng cao, mức to càng lớn.
b. Độ to:
- Khi so sánh âm này to hơn âm kia bao nhiêu lần, dùng khái niệm “độ
to” đơn vò là “Sôn” với đònh nghóa như sau:
Số lượng Sôn biểu thò số lần mạnh hơn của một âm nào đó so với âm
chuẩn mà tai người có thể phân biệt được.
- Độ to là một thuộc tính của thính giác, cho phép phán đoán tính chất
mạnh yếu của âm thanh. Căn cứ vào độ to mà sắp xếp âm từ nhỏ tới to.
- Mức to tăng 10 Fôn thì độ to tăng gấp đôi và ngược lại.
2.3.2. m điệu và âm sắc:
• Âm điệu chỉ âm cao hay thấp, trầm hay bổng. Âm điệu chủ yếu phụ
thuộc vào tần số của âm, tần số càng cao, âm nghe càng cao, tần số
càng thấp âm nghe càng trầm.
• Âm sắc chỉ sắc thái của âm du dương hay thô kệch, thanh hay rè,
trong hay đục. Âm sắc phụ thuộc vào cấu tạo của sóng âm điều hòa,
biểu thò bằng số lượng các loại tần số, cường độ và sự phân bố của
chúng quanh âm cơ bản. Âm sắc có quan hệ mật thiết với cường độ, âm
điệu và thời gian âm vang, sự trưởng thành và tắt dần của trường âm.
• Khi hai ca só cùng hát một câu ở cùng một độ cao, ta vẫn phân biệt
được giọng hát của từng người. Khi đàn ghi-ta, sáo, kèn.. cùng tấu lên
một đoạn nhạc ở cùng một độ cao, ta vẫn phân biệt được tiếng của từng
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
15
nhạc cụ. Mỗi người, mỗi nhạc cụ phát ra những âm có sắc thái khác
nhau mà tai ta phân biệt được. Đặc tính đó của âm chính là âm sắc.
• Âm sắc là một đặc tính sinh lý của âm, được hình thành trên cơ sở
các đặc tính vật lý của âm là tần số và biên độ. Thực nghiệm chứng tỏ
rằng khi một nhạc cụ 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=2f1, f3=3f1...
• Âm có tần số f1 gọi là âm cơ bản hay họa âm thứ nhất, các âm có
tần số f2 , f3 .. gọi là các họa âm thứ hai, thứ ba... Âm cơ bản bao giờ
cũng mạnh nhất, các họa âm có tác dụng quyết đònh âm sắc của âm cơ
bản, giúp ta phân biệt các nguồn âm khác nhau. Chẳng hạn tiếng đàn
Pi-a-nô và tiếng sáo tuy cùng một âm cơ bản nhưng lại rất dễ phân biệt,
nguyên nhân là do số lượng, cấu trúc những họa âm quanh âm cơ bản
của chúng khác nhau. Họa âm càng nhiều âm nghe càng du dương
phong phú.
3. Thính giác đònh vò (hiệu ứng Stereo):
• Khi nghe âm tuy mắt không nhìn thấy nguồn âm nhưng có thể xác
đònh chính xác vò trí của nguồn âm. Đặc điểm này là kết qủa của hai tác
dụng:
- Do cường độ, độ to, âm sắc của âm đến hai tai không giống nhau.
- Do âm đến hai tai lệch pha nhau, vì thời gian đến hai tai không giống
nhau.
• Cường độ, độ to của âm đến hai tai chênh lệch nhau là do nhiễu xạ
gây ra. Âm có tần số f < 1000 Hz sự chênh lệch cường độ do nhiễu xạ
gây ra rất bé nhưng ở những tần số cao, sự chênh lệch này có thể đạt tới
20 - 30 db.
• Do khả năng đònh vò của tai như vậy cho nên khi nghe âm có thể tập
trung chú ý vào nguồn âm cần nghe, bỏ qua một cách tự nhiên những
âm không cần nghe. Nhờ hiệu qủa này mà tiếng ồn bò phủ lấp hoặc
giảm nhỏ một cách tự nhiên. Nếu chỉ nghe âm một tai thì hiệu qủa này
mất.
4. Nghe âm và chênh lệch thời gian:
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
16
• Tương tự như tác dụng lưu ảnh của mắt, tai người cũng có tác dụng
lưu âm.
• Thí nghiệm với nhiều thính giác bình thường cho thấy rằng, nếu hai
âm như nhau đến tai người cách nhau < 50 ms thì tai người không phân
biệt được, nghe như một âm duy nhất.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
17
CHƯƠNG 2. TẬP TIN DẠNG SÓNG (WAVE FILE).
I. MULTIMEDIA WINDOWS
• Từ phiên bản Windows 3.1, Multimedia đã trở thành một tính năng
của Windows. Multimedia Windows đã bổ sung một tính năng mới: đó
là sự độc lập thiết bò trong việc xử lý âm thanh. Sự độc lập thiết bò này
thể hiện qua bộ API (Applycation Program Interface – Bộ giao diện lập
trình ứng dụng). Bộ API độc lập về thiết bò đối với phần cứng và đó là
một chức năng quan trọng của Windows. Người lập trình sẽ lập trình
điều khiển phần cứng trên Windows dựa trên chức năng của phần cứng
hơn là các chi tiết cụ thể của nó. Các nhà cung cấp phần cứng chỉ cần
cung cấp một bộ điều khiển thiết bò (device driver) cho Windows, nhờ
đó một ứng dụng trên Windows có thể điều khiển phần cứng thông qua
Windows API.
• Với Multimedia Windows, hãng Microsoft đã thực hiện được ba điều
:
• Đònh nghóa một tiêu chuẩn phần cứng tối thiểu cho loại máy
Multimedia PC (viết tắt là MPC). Tiêu chuẩn này dựa trên chức năng
tổng quát hơn là sản phẩm cụ thể. Ví dụ nếu PC có thêm ổ đóa CD-
ROM và một card âm thanh thì trở thành MPC cấp 1.
• Microsoft đã cung cấp phần mềm Multimedia Extension cho
Windows 3.0 và đã được ghép luôn vào hệ điều hành Windows từ phiên
bản 3.1. Phần mềm này bao gồm các bộ điều khiển thiết bò dành cho
việc truy xuất đến các phần cứng gắn thêm vào MPC.
• Microsoft đưa ra công cụ phát triển Multimedia Development Kit
(MDK). Lập trình viên kết hợp công cụ trên với bộ Windows Software
Development Kit (SDK) để viết các ứng dụng về Multimedia.
• Có hai dạng xử lý âm thanh số hóa trên Windows. Loại thứ nhất
microsoft gọi là “Wave Form Audio” (m thanh dạng sóng), dựa trên
nguyên tắc số hóa sóng âm, MPC lưu chúng trên bộ nhớ hay tập tin
.WAV trên đóa. Các dữ liệu số này có thể thông qua phần cứng biến đổi
lại thành âm thanh.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
18
• Dạng thứ hai là MIDI. Khác với âm thanh dạng sóng, MIDI chỉ lưu
lại những thông điệp điều khiển bộ tổng hợp phát ra âm thanh. Do đó
kích thước của tập tin .MID nhỏ hơn nhiều so với tập tin.WAV.
II. CẤU TRÚC WAVE FILE.
1. RIFF file.
Wave File là tập tin chứa các dữ liệu của mẫu âm thanh đã được
số hóa. Phương pháp số hóa âm thanh hiện nay là phương pháp PCM.
Phương pháp này sẽ lấy mẫu âm thanh với tần số khoảng 11.025 kHz
cho đến 44.1 kHz. Mỗi lần lấy mẫu, số liệu này lại được lượng tử hóa
bằng một hay hai byte cho một mẫu âm thanh. Như vậy tần số lấy mẫu
càng cao, số byte dùng lượng tử hóa càng nhiều thì âm thanh phát lại
càng trung thực, nhưng lại tăng số byte cần lưu trữ. Với một mẫu âm
thanh phát ra trong một phút cần phải lưu trữ ít nhất 660 kB. Đó là lý do
tại sao các File Wave luôn có kích thước khá lớn so với MIDI File.
Cấu trúc của Wave File thuộc vào lớp file được sử dụng bởi các
hàm Multimedia của Windows: đó là RIFF FILE. RIFF là chũ viết tắt
của Resource Interchange File Format (dạng file trao đổi tài nguyên).
Một RIFF file gồm một hoặc nhiều loại chunks, trong mỗi chunk lại
chứa con trỏ chỉ đến chunk kế tiếp. Mỗi chunk bao gồm loại chunk và
dữ liệu theo sau loại chunk đó. Một ứng dụng muốn đọc RIFF file có
thể đi qua lần lượt từng chunk, đọc dữ liệu ở chunk nó quan tâm và có
thể bỏ qua các chunk mà nó không quan tâm, một chunk của RIFF file
luôn bắt đầu bởi một header có cấu trúc như sau:
Typedef struct
{
FOURCC ckid;
DWORD ckSize;
} CK;
Trường FOURCC có 4 bytes chỉ ra loại chunk. Đối với File
Wave, trường này có giá trò là “WAVE”. Nếu loại chunk ít hơn 4 ký tự
thì các ký tự còn lại bên phải sẽ được đệm thêm vào các khoảng trắng.
Cần chú ý là các ký tự trong FOURCC có phân biệt chữ hoa và chữ
thường.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
19
Trường DWORD chứa kích thước vùng dữ liệu của chunk, vùng
dữ liệu này nằm ngay sau header và có kích thước là ckSize bytes.
Chunk có thể chứa các subchunks. Subchunk cũng là một chunk.
Một RIFF file luôn bắt đầu bằng một chunk loại “RIFF”.
2. Cấu trúc Wave file.
Wave file bắt đầu là chunk loại “RIFF”.
Hai subchunk trong wave chunk đặc tả thông tin về âm thanh của wave
file và tiếp đó là dữ liệu của từng subchunk. Đó là subchunk “fmt” và
subchunk “data”.
a. subchunk “fmt”:
Dữ liệu của “fmt” chunk là đối tượng WAVEFORMAT có cấu trúc như
sau:
Typedef struct waveformat_tag
{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
} WAVEFORMAT;
- wFormatTag thường có giá trò là WAVE_FORMAT_PCM được đònh
nghóa trong tập tin MMSYSTEM.H như sau :
#define WAVE_FORMAT_PCM 1
Giá trò này báo cho phần mềm đang đọc Wave File biết kiểu mã
hóa dữ liệu âm thanh sang dữ liệu số là kiểu mã hóa PCM. Hiện nay
đây là kiểu mã hóa duy nhất của Wave file.
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
20
- nChannels: có hai giá trò bằng 1 cho âm thanh mono và bằng 2 cho âm
thanh stereo.
- nSamplesPerSec: cho biết tốc độ lấy mẫu, có các giá trò:
11025 -- 11.025 kHz
22050 -- 22.050 kHz
44100 -- 44.100 kHz
- nAvgBytesPerSec: cho biết số bytes yêu cầu trung bình trong một giây
để phát lại mẫu dữ liệu của sóng âm.
- nBlockAlign: cho biết số byte dùng để chứa một mẫu âm thanh. Như
vậy mẫu 8 bit hay ít hơn sẽ yêu cầu 1 byte, mẫu 9 đến 16 bit sẽ yêu cầu
2 bytes. Nếu âm thanh là Stereo thì yêu cầu gấp 2 lần số byte dùng cho
âm thanh mono.
Ta thấy trong WAVEFORMAT chưa có thông tin về số bit dùng
để lượng tử hóa một mẫu dữ liệu của sóng âm. Thực tế Wave File sẽ
xác lập số bit dùng cho một mẫu dữ liệu bằng một trường gắn vào cuối
cấu trúc của WAVEFORMAT. Cấu trúc đó như sau:
Typedef struct pcmwaveformat_tag
{
WAVEFORMAT wf;
WORD wBitsPerSample;
} PCMWAVEFORMAT;
- wBitsPerSample: cho biết số bit trong một mẫu dữ liệu. Chú ý rằng
các mẫu dữ liệu vẫn phải lưu trữ ở dạng byte hoặc word. Do đó, nếu
một Wave File dùng 12 bit để lượng tử hóa một mẫu sóng âm thì sẽ
phải lưu trữ 4 bit thừa không dùng đến.
b. Subchunk “data”.
Dữ liệu của “data” subchunk của wave file chứa các số liệu của
âm thanh đã được số hóa. Đối với mẫu âm thanh 8 bit, dữ liệu của
“data” subchunk bao gồm các giá trò 1 byte (có giá trò từ 0 – 255) của
các mẫu âm thanh. Đối với mẫu âm thanh 16 bits, mỗi mẫu dữ liệu gồm
2 bytes (có giá trò từ – 32768 đến 32767). Điều này không có nghóa là
file wave 16 bits sẽ nghe to hơn 256 lần file wave 8 bits, mà nó có
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
21
nghóa là âm thanh được lượng tử hóa chính xác hơn, nghe trung thực
hơn.
Trong mẫu mono 8 bits, dữ liệu của subchunk “data” gồm chuỗi
các giá trò 1 byte. Với stereo 8 bits, mỗi mẫu gồm 2 bytes, dữ liệu sẽ
được sắp xếp xen kẽ (interleave), với byte đầu (byte chẵn) là mẫu âm
thanh của kênh bên trái, byte sau (byte lẻ) là của kênh bên phải.
Tóm l cấu trúc của Wave File như sau:
Kích thước
(số byte)
Giá trò Tên trường
4 “RIFF”
4 Kích thước file RIFF
4 “WAVE”
4 “fmt”
4 Kích thước subchunk “fmt”
2 Kiểu mã hóa dữ liệu của file
wave (thường là PCM)
WORD nFormatTag
2 Số kênh : 1 - mono
2 - stereo
WORD nChannels
4 Số mẫu/1giây DWORD
nSamplesPerSec
4 Số bytes/1giây DWORD
nAvgBytesPerSec
2 Số byte/1mẫu DWORD
nBlockAlign
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
22
2 Số bit/1mẫu WORD
wBitsPerSample
4 “data”
4 Kích thước dữ liệu
III. ĐỌC RIFF FILES
• Để làm việc với file RIFF, ta phải mở nó và “descend” vào chunk
mà ta cần. Điều này có nghóa là ta cần phải đònh vò được chunk này, rồi
chuyển con trỏ file vào đầu khối dữ liệu của chunk. Khi làm việc xong
với 1 chunk, ta phải “ascend” ra khỏi chunk và “descend” xuống chunk
khác.
• Các hàm dùng xử lý RIFF file đều có tiền tố là mmio và làm việc
với file handle dạng HMMIO, để bắt đầu, ta phải mở file bằng đoạn mã
sau:
HMMIO h;
If ((h=mmioOpen(path,NULL,MMIO_READ))==NULL)
{
/*báo lỗi*/
return(0);
}
Thông số path chứa đường dẫn của file wave. Cờ MMIO_READ
báo cho mmioOpen mở file để đọc. Ta cũng có thể mở nó để ghi bằng
thông số MMIO_WRITE hay cả đọc và ghi bằng thông số
MMIO_READWRITE. Nếu mở file thành công, mmioOpen sẽ trả về
một handle loại HMMIO. Nếu thất bại, nó sẽ trả về trò NULL. Sau khi
mở file xong, ta bắt đầu đònh vò WAVE chunk bằng đoạn mã sau:
MMCKINFO mmParent;
MmParent.fccType=mmioFOURCC(‘W’,’A’,’V’,’E’);
If (mmioDescend(h,(LPMMCKINFO)&mmParent, NULL,
MMIO_FINDRIFF))
{
mmioClose(h,0);
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
23
/* báo lỗi */
return(0);
}
Cấu trúc của MMCKINFO chứa các thông tin về chunk. Nó được
đònh nghóa trong MMSYSTEM.H như sau:
Typedef struct
{
FOURCC ckid;
DWORD cksize;
FOURCC fcctype;
DWORD dwDataOffset;
DWORD dwFlags;
} MMCKINFO;
Để “đi vào” một chunk, ta cho trường ckid của MMCKINFO ở
loại chunk mà ta muốn đònh vò. Có một macro thực hiện việc này là
mmioFOURCC. Sau đó gọi hàm mmioDescend để đònh vò chunk. Nếu
đònh vò thành công, hàm này trả về zero và đối tượng MMCKINFO
truyền cho hàm sẽ được điền vào các thông tin về chunk.
Trường cksize đònh nghóa kích thước tính bằng byte của chunk.
Đối số thứ ba của mmioDescend là cờ MMIO_FINDRIFF. Cờ
này chỉ thò cho mmioDescend tìm một file có ID là RIFF với loại chunk
được xác đònh bởi ckid. Nếu muốn tìm một chunk trong Wave file ta cho
cờ này là MMIO_FINDCHUNK.
Sau khi đi vào WAVE chunk, ta bắt đầu đi vào fmt subchunk của
nó:
MMIOCKINFO mmSub;
MmSub.ckid=mmioFOURCC(‘f’,’m’,’t’);
If (mmioDescend(h,(LPMMCKINFO)& mmSub,
(LPMMCKINFO)&mmParent,MMIO_FINDCHUNK))
{
mmioClose(h,0);
/* báo lỗi */
return(0);
}
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
24
Đến đây ta đã có thể bắt đầu đọc dữ liệu từ Wave File. Đoạn mã
sau đọc đối tượng PCMWAVEFORMAT từ fmt subchunk:
PCMWAVEFORMAT waveformat;
Int n;
n = min ((unsigned int)mmSub.cksize,
sizeof(PCMWAVEFORMAT));
if(mmioRead(h,(HPSTR)&waveformat,
(long)n) !=(long)n)
{
/* báo lỗi */
return(0L);
}
if(waveformat.wf.wFormatTag !=WAVE_FORMAT_PCM)
{
/* báo lỗi */
mmioClose(h,0);
return(0L);
}
Đối số đầu tiên của mmioRead là handle của file đang đọc. Đối
số thứ hai là con trỏ xa trỏ tới vùng đệm để chứa dữ liệu. Đối số thứ ba
là số byte cần đọc. Hàm này sẽ trả về số byte thực sự đọc được.
• Sau khi đã đọc nội dung của chunk, ta đi ra khỏi chunk để chuẩn bò
đọc chunk kế tiếp:
MmAscend(h,(LPMMCKINFO)&mmSub,0);
Đối số thứ hai của mmAscend là đối tượng MMCKINFO của chunk mà
ta “đi ra”. Đối số thứ ba là đối số giả.
• Công việc còn lại là đọc dữ liệu mã hóa mẫu âm thanh của Wave
file vào bộ nhớ. Chú ý rằng giá trò cksize trả về bởi mmioDescend được
sử dụng để xác đònh kích thước vùng đệm cần cấp phát để chứa dữ liệu.
GLOBALHANDLE wavehandle;
HPSTR wavepointer;
MmSub.ckid=mmioFOURCC(‘d’,’a’,’t’,’a’);
If(mmioDescend(h,(LPMMCKINFO)&mmSub,
(LPMMCKINFO)&mmParent,MMIO_FINDCHUNK))
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN
Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình
SVTH: Đỗ Văn Tuấn Trang
25
{
mmioClose(h,0);
/* báo lỗi */
return(0);
}
if((wavehandle=GlobalAlloc(GMEM_MOVEBLEIGMEM_
SHARE, mmSub.cksize))==NULL)
{
mmioClose(h,0);
/* báo lỗi */
return(0);
}
if(wavepointer=(HPSTR)GLOBALLOCK(WAVEHANDLE))
==null)
{
GlobalFree(wavehandle);
mmioClose(h,0);
/* báo lỗi */
return(0);
}
if(mmioRead(h,wavepointer,mSub.cksize) !=
mSub.cksize)
{
GlobalUnlock(wavehandle);
GlobalFree(wavehandle);
mmioClose(h,0);
/* báo lỗi */
return(0);
}
GlobalUnlock(wavehandle);
THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN