Tải bản đầy đủ (.pdf) (60 trang)

Luận văn tốt nghiệp - Tìm hiểu mô hình điện thoại qua mạng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.32 MB, 60 trang )



















Luận văn tốt nghiệp

Tìm hiểu mô hình điện thoại qua
mạng























LUẬN VĂN TỐT NGHIỆP Trang
1
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ



CHƯƠNG I
TÌM HIỂU MÔ HÌNH ĐIỆN THOẠI QUA MẠNG

I.1 CÁC MÔ HÌNH ĐIỆN THOẠI
I.1.1 MÁY TÍNH ĐẾN MÁY TÍNH
Trong mô hình này cả hai thuê bao đều sử dụng máy tính được nối vào mạng
IP như một thiết bị đầu cuối. Tiếng nói được mã hoá sau đó là nén và quá trình nhận
dữ liệu hoàn toán giống nhưng với quy trình ngược lại là giải nén, giải mã bằng phần
mềm. Trong mô hình này đòi hỏi cả hai thuê bao cần phải có soundcard, microphone,
loa và phần mềm giống nhau.[1]







Hình I.1 : Mô hình PC - PC

I.1.2 MÁY TÍNH ĐẾN ĐIỆN THOẠI HOẶC ĐIỆN THOẠI ĐẾN MÁY TÍNH
Trong mô hình này, một thuê bao sử dụng máy tính nối mạng với mạng còn
thuê bao kia sử dụng điện thoại trong mạng PSTN/ISDN/GSM/TDM. Sử dụng một
gateway để chuyển tiếng nói trên mạng IP thành tiếng nói trên mạng PSTN và trao đổi
thông tin giữa hai mạng trên. Như vậy, ở đây máy tính phải đầy đủ các thiết bị như
Soundcard, loa, microphone và ph
ần mềm thông qua server của mạng IP để có thể kết
nối với mạng PSTN thông qua Geteway.






Hình I.2 : Mô hình Máy tính – Điện thoại

I.1.3 ĐIỆN THOẠI ĐẾN ĐIỆN THOẠI
Trong mô hình này, cả hai thuê bao đều sử dụng điện thoại bình thường và
mạng IP được sử dụng trong trường hợp cuộc gọi đường dài. Gateway được sử dụng ở
cả hai đầu để chuyể
n đổi dữ liệu giữa các mạng với nhau.[1]









Máy tính Máy tính
IP
Máy tính Điện thoại
IP
Gateway
PSTN
Điện thoại
IP
Gateway
PSTN PSTN
Gateway
Điện thoại
LUẬN VĂN TỐT NGHIỆP Trang
2
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ



Hình I.3 : Mô hình Điện thoại – Điện thoại

I.2 YÊU CẦU ỨNG DỤNG TRUYỀN ÂM THANH TRÊN MẠNG LAN
Trong phần này sẽ phân tích các yêu cầu xây dựng ứng dụng truyền âm thanh

trên mạng LAN : Từ ba mô hình trên em nhận thấy mô hình 2 và 3 đòi hỏi quá trình
nghiên cứu và thiết bị phức tạp, đòi hỏi phải đầu tư công nghệ mới có thể thực hiện
được. Nên trong đồ án này chỉ có thể thức hiện theo mô hình 1 là PC – PC, nó đơn
giả
n hơn và không cần đầu tư thiết bị mới, có thể tận dụng các thiết bị có sẵn và điều
quan trọng có thể thử nghiệm hoàn chỉnh trong phạm vi đồ án.
Vấn đề đặt ra là với một hệ thống mạng LAN, WAN cùng với tài nguyên sẵn
có của nó xây dựng một chương trình truyền tiếng nói với thời gian thực cho phép từ
máy này sang máy khác (point to point) với một số các yêu cầu thích hợp giống nh
ư
việc xử lý và truyền tiếng nói trong thông tin liên lạc (điện thoại hữu tuyến). Chương
trình sử dụng giao thức TCP/IP là một giao thức phổ biến và tin cậy hiện nay để kết
nối và truyền tiếng nói. Do sử dụng giao thức TCP là giao thức có liên kết nên dẫn
đến độ trễ rất lớn nhưng với ứng dụng trong mạng LAN thì vẫn có thể chấp nhận
được. Ngay khi tiếng nói được thu và có th
ể qua một số các xử lý như mã hoá tiếng
nói hoặc nén trên một máy, tiếng nói được truyền tới máy cần kết nối và qua các xử lý
ngược so với lúc thu như giải nén và giải mã để được phát ra loa. Chương trình cho
phép kết nối hai máy và tạo một mô hình điện thoại trên máy tính như điện thoại hữu
tuyến thông thường. Bất kỳ máy nào trong mạng cũng có thể ở chế độ chờ hay chế độ

chạy nền (background) gọi máy là P-SERVER; máy ở chế độ gọi (active) gọi là P-
CLIENT. Như vậy một máy trong mạng có thể là P-SERVER hoặc P-CLIENT. Trên
môi trường mạng, khi chúng ta muốn nói chuyện một người trên một máy nào đó,
chúng ta sẽ tiến hành việc gọi liên kết. Việc gọi liên kết được tiến hành bằng việc xác
định địa chỉ IP của máy mà chúng ta cần liên kết. Sau đó chúng ta sẽ chờ việc xác lập
liên kết. Ở máy đượ
c gọi sẽ có thông báo cho người sử dụng biết rằng có một người
khác muốn nói chuyện. Tùy theo người đó quyết định có chấp nhận hay không. Nếu
chấp nhận thì liên kết sẽ được xác lập và hai bên sẽ có thể tiến hành trao đổi thông tin

với nhau.
Trong quá trình trao đổi thông tin, các máy sẽ truyền tiếng nói của người sử
dụng đồng thời nhận dữ liệu âm thanh của máy liên kết. Khi nói chuyện xong, liên kết
sẽ b
ị hủy bỏ và chương trình kết thúc. Nếu máy được gọi không có người trả lời thì
sau thời gian chờ vượt quá giới hạn thì liên kết cũng sẽ bị huỷ bỏ. Vì dữ liệu truyền
nhận trong chương trình là dữ liệu dạng liên tục của âm thanh cho nên có các yêu cầu
đặt ra như sau: Bảo đảm tính mạch lạc của dữ liệu. Tiếng nói trong quá trình thông tin
phải rõ ràng, liền lạc, không bị ngắt quãng.
Các yêu cầ
u trên đặt ra các nhiệm vụ mà chúng ta phải giải quyết trong việc
xây dựng chương trình. Đối với dữ liệu là âm thanh, chúng ta phải xem xét các thông
số trong quá trình lấy mẫu ở đầu vào. Các thông số đặc trưng như : tần số lấy mẫu, số
bit biểu diễn cho một điểm lấy mẫu, kênh lấy mẫu được sử dụng 1 kênh (mono) hay
hai kênh (stereo). Do đó chúng ta phải tổ chức kích thước buffer âm thanh sao cho phù
hợp với vi
ệc truyền nhận đạt tốc độ cao. Một vấn đề khác được đặt ra với dữ liệu âm
thanh là việc nhận và phát ở đầu ra, chúng ta phải quan tâm đến việc xử lý và loại bỏ
các tín hiệu nhiễu giúp cho âm thanh được rõ ràng, trung thực. Do việc truyền nhận
dữ liệu là trên môi trường mạng nên chúng ta phải quan tâm đến tốc độ, lưu lượng trao
LUẬN VĂN TỐT NGHIỆP Trang
3
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

đổi dữ liệu, thời gian truyền nhận để đưa ra cách giải quyết cho phù hợp. Ngoài các
vấn đề chính ở trên, một số yêu cầu khác đặt ra cho ứng dụng như : cơ chế tạo lập liên
kết, việc chọn lựa các dạng format dữ liệu, định các thông số thời gian. Tất cả các
nhiệm vụ thực thi đều phải được thực hiện thông qua giao diện dễ dàng cho người sử
dụng.[3]

Trường hợp mở rộng hệ thống cho mạng Internet cần một kết nối giữa server
mạng với tổng đài mạng PABX, yêu cầu này đòi hỏi phức tạp hơn và cần có các trang
thiết bị để thử nghiệm. Bởi vậy trong đồ án này em chỉ nghiên cứu cách thức truyền
tiếng nói trên mạng nội bộ.























CHƯƠNG II
KHẢO SÁT CÁC GIAO THỨC TRUYỀN THÔNG


II.1 KHÁI NIỆM CƠ BẢN GIAO THỨC TCP/IP
Trong hệ thống mạng Internet, mỗi máy có một tên và một địa chỉ IP (Internet
Protocol). Tên hay địa chỉ IP đều xác định duy nhất một máy trong hệ thống mạng
Internet. Giữa tên máy và địa chỉ IP đều có thể chuyển đổi thông qua các hàm. Địa chỉ
IP đều được biểu diễn bằng một số 32 bits. Mỗi giao diện mạng trong một nút nếu có
hỗ trợ một ngăn xếp IP đề
u được gán một địa chỉ IP. Địa chỉ IP gồm 2 phần : chỉ số
mạng(netid) và chỉ số của máy chủ (hostid). Những bits quan trọng nhất được dùng để
xác định số lượng bits dùng cho netid và hostid. Có 5 lớp địa chỉ được xác định là
A,B,C,D và E. Trong đó, lớp A,B,C chứa địa chỉ có thể gián được. Lớp D dành riêng
cho kỹ thuật Multicasting và được sử dụng trong các giao thức đặc biệt để truyền
thông đi
ệp đến một nhóm nút được chọn lọc. Lớp E dành riêng cho những ứng dụng
trong tương lai.[5]
L

m
1
LUẬN VĂN T








Neti
d
ượng mạng

mạng và số l


Mạn
g
27 mạng. M
TỐT NGHIỆ


d nhận dạng
g và số lượn
lượng nút c
Lớp địa c
A
B
C
g lớp A dùn
Mạng lớp B
ỆP
Hình I
Hình II.2
g cho từng m
ng nút của
có thể của m
chỉ Số
2
ng cho mạn
là mạng có

II.1 Các lớp

TCI/IP và m
mạng riêng
mỗi lớp k
mỗi lớp địa
lượng mạ
n
127
16.383
2.097.151
ng diện rộn
ó kích thướ

p đại chỉ IP
mô hình OS
g biệt. Các k
khác nhau.
chỉ :
ngSố
16
ng. Trường
ớc trung bình

SI
kiểu lớp địa
Bảng dưới
lượng nút
6.777.241
65.534
254
netid có 7

h và thích h
T
a chỉ IP cho
cho thấy s
7 bits nên c
hợp cho các
rang
4
o thấy số
số lượng
có thể có
c tổ chức
LUẬN VĂN TỐT NGHIỆP Trang
5
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

có quy mô lớp và vừa. Mạng lớp C dùng trong cơ quan nhỏ, trong đó mỗi mạng chỉ có
không hơn 254 nút.
Con số 32 bits biểu thị 4 chữ số thập phân tương ứng giá trị 4 byte tạo thành
địa chỉ IP. Những số thập phân cách nhau bởi dấu chấm (.). Một ví dụ về tên máy và
địa chỉ IP của máy :
Hostname : viethung
IP Address : 192.168.0.55

II.1.1 KHÁI NIỆM SOCKET
Socket là một đơn vị cấu trúc truyền thông 2 chiều. Chúng có thể đọc hay ghi
lên nó. Tuy nhiên mỗi socket là một thành phầ
n của một mối nào đó giữa các máy trên
mạng máy tính và các thao tác đọc ghi chính là các thao tác trao đổi dữ liệu giữa các

ứng dụng trên nhiều máy khác nhau. Socket là điểm kết nối cuối cùng cho phép những
ứng dụng gắn vào mạng. Khái niệm socket được cung cấp bởi một thư viện chứa tất
cả các hàm yêu cầu cho bất kỳ chương trình mạng nào. Khi một ứng dụng yêu cầu các
dịch vụ mạng, nó gọi quá trình tự t
ập hợp các thư viện để quản lý hoạt động mạng.
Hai loại socket có sẵn stream và datagram.[5]
Những socket stream dùng cho TCP (Transmission Control Protocol), những
socket datagram dùng UDP (User Datagram Protocol).









Hình II.3 Các socket và port trong mối nối TCP/IP

Số hiệu cổng Mô tả
0 Reserved
2 Management Entry
5 Remote Job Entry
7Echo
9Discard
11 Systat
13 Daytime
15 Netstat
17 Quoted(quote of the day)
20 FTP data

21 FTP control
23 Telnet
25 SMTP
37 Time
42 Host name server
49 Login host protocol
Máy A
Máy B
Port Mối nối Port
TCI/IP Interface
LUẬN VĂN TỐT NGHIỆP Trang
6
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

53 Domain name server
80 World wide web HTTP
102 ISO-TSAP
103 x.4000
104 X.4000 sending server
111 Sun RPC
139 NetBIOS session source
160-223 Reserved

Ghi chú :
Trị số của cổng trong các ứng dụng :
- Các ứng dụng chuẩn : 0 – 999
- Các ứng dụng không chuẩn : 1000 – 64000

II.1.2 GIAO THỨC IP

Internet protocol (IP) là một dạng giao thức truyền tin được thiết kế cho mạng
chuyển mạng gói. Vai trò của IP tương đương với vai trò của tầng mạng trong mô
hình OSI. Giao thức IP đảm nhiệm việc chuyển những gói mạch dữ liệu (datagram) từ
địa chỉ nguồn đến đị
a chỉ đích. Địa chỉ IP có địa chỉ cố định (4 byte) dùng để xác định
duy nhất các trạm làm việc đang tham gia vào việc truyền, nhận dữ liệu. Trong trường
hợp mạng truyền tin chỉ có thể truyền những gói dữ liệu có kích thức nhỏ, giao thức
IP cũng đảm nhiệm chức năng chia nhỏ các gói dữ liệu có kích thước lớn trước khi
truyền và gộp chúng lại chúng sau khi nhận được.[5]
Giao thức IP được thiết kế với chức năng chuyển 1 gói các bit, gọi là internet
datagram từ địa chỉ nguồn đến địa chỉ đích. Đây là một giao thức theo kiểu không liên
kết, nghĩa là không có giai đoạn thiết lập liên kết trước khi truyền dữ liệu, nó cũng
không có các cơ chế bảo đảm thông tin tới đích an toàn, không có cơ chế điều khiển
luồng dữ liệu. Trên thực t
ế việc thông báo về lỗi đường truyền có thể được thực hiện
nhờ một giao thức khác có tên ICMP( Internet Control Message Protocol).
Địa chỉ IP như đã nói ở trên, là một chuỗi bit có độ dài 4 byte, được phân chia
làm 5 lớp và các bit đầu tiên được dùng làm định danh lớp địa chỉ.

II.2 GIAO THỨC TCP
Giao thức TCP là giao thức dùng cho tầng ngay trên tầng IP. Đối với mô hình
OSI, ta có thể thấy tầng TCP có vai trò tương ứng với các tầng giao vận và tầng phiên
.
Khác với IP, TCP là giao thứ
c có liên kết (connection oriented), nghĩa là nhất
thiết phải có giai đoạn thiết lập liên kết giữ các cặp thực thể TCP trước khi chúng có
trao đổi dữ liệu với nhau. Giao thức TCP cung cấp một khả năng truyền dữ liệu một
cách an toàn giữa các thực thể trên mạng. Nó cung cấp các chức năng nhằm kiểm tra
tính chính xác của dữ liệu khi gửi đến và gửi lại dữ liệu khi có lỗi xảy ra.[5]
Đơn vị dữ liệu cơ bản của TCP gọi là segment. Trong segment có một cặp

tham số là số hiệu cổng của trạm nguồn và số hiệu cổng của trạm đích. Mỗi một tiến
trình ứng dụng tại một trạm sẽ truy cập các dịch vụ TCP thông qua một cổng. Một
cổng như vậy kết hợp với một địa chỉ IP sẽ tạo thành m
ột socket duy nhất trong mạng.
Dịch vụ TCP được cung cấp nhờ liên kết logic giữa một cặp socket, mỗi socket có thể
tham gia liên kết với nhiều socket ở xa khác nhau. Trước khi truyền dữ liệu chúng
L
th
p
L
n






I
I

ch
đ
h
LUẬN VĂN T
hiết lập liên
hòng.
Mỗi

Lưu đồ sau m
nhau :


n
I.2.1 CÁCH
Ứng dụng T
Gọi
h
Gọi h
huẩn thì sẽ
ó.
Gọi
h
Khi c
hàm accept đ
TỐT NGHIỆ
n kết và khi
ứng dụng T
minh họa c
nh II.4 Tạo
H THỨC CÀ
CP server l
hàm socket
hàm bind để
có một hằn
hàm listen đ
có một clien
để xác nhận
ỆP
i không có
TCP gồm ha
ác bước cần

o kết nối giữ
ÀI ĐẶT ỨN
làm việc the
để tạo một
ể kết buộc s
ng số được
để chờ đến k
nt nối vào t
n mối nối củ

nhu cầu tru
ai phần là cl
n thiết để cá
ữa client và
NG DỤNG
eo qui trình
socket.
socket với m
định nghĩa
khi có một c
thì hàm liste
ủa client.

uyền dữ liệ
lient và serv
ác ứng dụn
à server theo
G TCP SERV
h sau:
một port, đố

sẵn trong w
client nối v
en trả điều

u nữa thì li
ver.
g client và
o giao thức
VER
ối với mỗi
winsock cho
vào port.
khiển về,

T
iên kết sẽ đ
server giao
TCP
giao thức

o port của g
ứng dụng se
rang
7
được giải
o tiếp với
ứng dụng
giao thức
erver gọi
L

re
cl





LUẬN VĂN T
Gọi c
ecv.
Sau
k
losesocket đ


TỐT NGHIỆ
các hàm gử
khi đã hoà
để đóng soc
Hình II
ỆP
ửi hay nhận
àn tất quá
cket đã tạo.
I.5 Sơ đồ gi

dữ liệu để
trình trao
.
iao tiếp giữa


trao đổi th
đổi dữ liệ
a server vớ

hông tin với
ệu, ứng dụn
i client
T
i client, ví
ng server g
rang
8
dụ send,
gọi hàm
L
II




G
W
LUẬN VĂN T
I.2.2 CÁCH
Ứng dụng cl
- G
- G
- G
h

à
- Sa
cl

Ghi chúù:
Các
b
Windows N
TỐT NGHIỆ
H THỨC CÀ
lient TCP là
ọi hàm sock
ọi hàm con
ọi hàm gửi
àm send, rec
au khi đã h
osesocket đ
Hình II.6
bước trên cơ
T và UNIX
ỆP
ÀI ĐẶT ỨN
àm việc the
ket để tạo m
nnect để nối
i hay nhận
cv.
hoàn tất qu
để đóng soc
Sơ đồ giao

ơ bản là giố
X. Tuy nhiê

NG DỤNG
eo qui trình
một socket .
i vào server
dữ liệu để
uá trình tra
cket đã tạo.
o tiếp của c
ống nhau ch
ên, với ứng

G CLIENT T
sau :
.
r.
trao đổi t
h
ao đổi dữ li

lient với se
r
ho các ứng
g dụng viết

TCP
hông tin vớ
iệu, ứng dụ

rver
dụng clien
t
rên UNIX
T
ới server, ví
ụng client
t và server
X thì không
rang
9
í dụ như
gọi hàm
viết trên
g cần gọi
LUẬN VĂN TỐT NGHIỆP Trang
10
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

các hàm WSAStartup, WSACleanup để khởi tạo thư viện quản lý socket và đóng bộ
phận này. Lý do, với UNIX thì bộ phận quản lý socket đã được hệ điều hành nạp sẵn.


II.3 GIAO THỨC UDP
Giao thức UDP cung cấp khả năng broadcast trên hệ thống mạng TCP/IP .
Chúng ta cũng cần cài đặt ứng dụng client và server. Ứng dụng client có nhiệm vụ gửi
thông báo đến tất cả các instance của ứng dụng server đang chạy trên hệ
thống
mạng.[5]


II.3.1 CÁCH CÀI ĐẶT ỨNG DỤNG SERVER UDP
Ứng dụng server UDP được cài đặt đơn giản hơn ứng dụng TCP. Chúng ta cần
các bước chính sau đây :
- Gọi hàm socket để tạo một socket .
- Gọi hàm bind để kết buộc socket với một port, đối với mỗi giao thức ứng
dụng chuẩn thì sẽ có một hằng số được định nghĩa sẵn trong winsock cho
port của giao thức
đó.
- Gọi các hàm gửi hay nhận dữ liệu để trao đổi thông tin với client, ví như
hàm sendto, recvfrom.
- Sau khi đã hoàn tất quá trình trao đổi dữ liệu, ứng dụng server gọi hàm
closesocket để đóng socket đã tạo.

II.3.2 CÁCH CÀI ĐẶT ỨNG DỤNG CLIENT UDP
Ứng dụng client UDP thực hiện các bước sau :
- Gọi hàm socket để tạo một socket.
- Gọi hàm setsockopt để làm cho socket có khả năng broadcoast .
- Gọi các hàm gửi hay nhận d
ữ liệu để trao đổi thông tin với server, ví dụ
hàm sendto, recvfrom.
- Sau khi đã hoàn tất quá trình trao đổi dữ liệu, ứng dụng client gọi hàm
closesocket để đóng socket đã tạo.

Ghi chú
:
Ngoài các bước trên, các ứng dụng viết trên Windows NT (kể cả client và
server) phải gọi hàm WSAStartup để khởi tạo thư viện liên kết động Windows Socket
DLL và hàm WSACleanup để đóng thư viện này. Tuy nhiên, đối với ứng dụng viết
trên UNIX thì bộ phận quản lý socket đã được hệ điều hành nạp sẵn và do đó không

cần gọi các hàm như WSAStartup, WSACleanup của Windows NT.










LUẬN VĂN TỐT NGHIỆP Trang
11
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

CHƯƠNG III
PHƯƠNG PHÁP MÃ HOÁ VÀ NÉN ÂM THANH

III.1 CÁC PHƯƠNG PHÁP MÃ HOÁ
III.1.1 GIỚI THIỆU CHUNG
Trong hệ thống xử lý âm thanh, âm thanh được mã hoá PCM. Các mã hoá này
cho phép khôi phục một cách tương đối trung thực tín hiệu âm thanh trong dải tần
nghe được. Tuy nhiên trong một ứng dụng đặc biệt như truyền dữ liệu âm thanh trên
mạng, âm thanh được truyền với tốc độ thấp hơn nhiều. Từ đó xuất hiện một số kỹ
thuật mã hoá và nén tín hiệu âm thanh như ADPCM, LPC, GSM….
Các loại phần m
ềm và phần cứng thực hiện mã hoá và nén âm thanh sang các
loại dữ liệu số thường được gọi là codec(Coder-Decoder). Có thể phân loại các
phương pháp mã hoá âm thanh thành 3 loại :

Mã hoá dạng sóng(waveform codec) : Giữ nguyên hình dạng nguyên thuỷ của
sóng âm. Phương pháp mã hoá này đòi hỏi tốc độ dữ liệu rất cao nhưng lại cho chất
lượng âm thanh rất tốt. Ưu điểm của bộ mã hoá này là độ phức tạp, giá thành thiết kế,
độ trễ và công suấ
t tiêu thụ thấp. Bộ mã hoá sóng đơn giản nhất là điều biên xung mã
(PCM)…Tuy nhiên nhược điểm của bộ mã hoá là không tạo được âm thanh chất
lượng cao tại tốc độ dưới 16 kbps, bộ mã nguồn khắc phục được nhược điểm này.[4]
Mã hoá nguồn (Source codec) : Cho phép đạt được tốc độ truyền dữ liệu thấp,
có thể thực hiện tại tốc độ bit > 2kbps, nhưng chất lượng âm thanh không cao.
Mã hoá hỗ
n hợp (hybrid codec) : Sử dụng cả hai phương pháp trên để tạo ra tín
hiệu âm thanh có chất lượng tốt ở tốc độ dữ liệu trung bình.















Hình III.1 Biểu đồ so sánh các phương pháp mã hoá
Mã hoá dạng sóng
Đòi hỏi tốc độ bit rất cao nhưng tạo ra chất lượng âm thanh hoàn hảo và thời

gian xử lý rất ít, bởi vì phương pháp này chỉ đơn giản lấy mẫu tín hiệu ở tốc
độ nào đó
và lượng tử hoá từng mẫu dùng lượng tử hoá tuyến tính. Cách tiếp cận này gọi là điều
biến xung mã(PCM). Aâm thanh mã hoá theo phương pháp PCM, lấy mẫu tốc độ
8KHz, lượng tử 8bit/mẫu, cho tốc độ bit ra là 64 kbps.
Rất tốt
Tốt
Trung
bình
Chất lượng tiếng nói
Mã hoá
hỗn hợp
Mã hoá dạng sóng
Mã hoá dự đoán
tuyến tính LPC
Tốc độ
2 4 8 16 32 64
LUẬN VĂN TỐT NGHIỆP Trang
12
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

Phương pháp điều biên xung mã vi phân (DPCM) dự đoán giá trị hiện tại dựa
vào các giá trị trước của các mẫu quá khứ, chỉ lưu trữ giá trị sai số lượng tử. Giá trị sai
số này sẽ nhỏ hơn giá trị thực của mẫu, do đó cho phép lưu trữ giảm đi một phần.
Một cải tiến của DPCM là điều biến xung mã vi phân thích nghi(ADPCM). Bộ
tiến đoán và lượ
ng tử hoá trong phương pháp này có khả năng thích nghi với tín hiệu
cần mã hoá. ADPCM hoạt động tốc độ 32 kbps cho chất lượng tương đối với PCM 64
kbps.


Mã hoá dự đoán tuyến tính LPC
Một vấn đề đáng quan tâm là phương pháp mã hoá dạng sóng là khi lấy mẫu tín
hiệu tương đương sẽ cho ra dòng dữ liệu khá lớn. Các phương pháp mã hoá nguồn đi
theo một cách tiếp cận khác, người ta phải qua tâm đến việc âm thanh được tạo ra như
thế nào, nếu có thể mô hình hoá cách tạo ra âm thanh thì không phải truyền đi các mẫu
của tín hiệu âm thanh mà chỉ cần gửi đi cách thức tạo ra âm đó trên đến bộ mã. Như
vậy theo phương pháp này thay vì mã hoá và truyền trực tiếp âm thanh thì người ta chỉ
mã hoá các tham số tạo ra âm thanh tại nơi nhận, từ các tham số này bộ tổng hợp tiếng
nói sẽ tổng hợp nên tiếng nói nhân tạo. Những phương pháp đi theo cách tiếp cận này
gọi là Vocoder. Mô tả đơn giản nhất của mô hình này là mã hoá dự đoán tuyến tính
(LPC). Phương pháp mã hoá Vocoder cho tốc độ bit rất thấp (>2 kbps) nhưng độ phức
tạp cao hơn với phương pháp mã hoá dạng sóng và chất lượng âm thanh không trung
thực .

Mã hoá hỗn hợp
Để giải quyết vấn đề của phương pháp mã hoá dạng sóng và của phương pháp
mã hoá dự đoán, một nhóm các phương pháp mã hoá sử dụng phương pháp AbS
(Analysis by Synthesis) để tạo ra mô hình máy phát âm phứ
c tạp hơn. Trong khi
Vocoder sử dụng bộ lọc tuyến tính kích thích bởi chuỗi xung tuần hào hay chuồi nhiễu
trắng để tạo ra âm hữu thanh hay vô thanh, AbS sử dụng một dãy các trạng thái được
lưu trữ trong codebook. Khi xem xét một khung âm thanh, AbS kiểm tra khung đó với
rất nhiều tín hiệu kích thước rồi sẽ chọn tín hiệu nào đưa ra kết quả gần đúng nhất với
âm thanh ban đầu. Bộ giải mã chỉ cần biế
t chỉ số của xung kích thước đó, sau đó tra
codebook rồi tái tạo lại âm thanh. Một số các tham số khác nhau như năng lượng của
sự kích thích và giá trị chu kỳ cũng cần đến khi giải mã. Các phương pháp mã đi theo
cách này đòi hỏi quá trình tính toán phức tạp, có thể tất cả các mục trong từ điển đều
phải thử để đưa ra giá trị tốt nhất.

Hệ thống thông tin toàn cầu GMS : GSM là mộ
chuẩn điện thoại được Viện
Tiêu Chuẩn Viễn Thông Châu Aâu ETSI để ra. Đầu vào của bộ nén GMS 06.10 bao
gồm các khung 160 mẫu các tín giệu PCM tuyến tính lấy mẫu tại tần số 8 kHz. Chu
kỳ mỗi khung là 20 ms, đây là khoảng thời gian rất ngắn và trong khoảng thời gian
này cho phép được coi tín hiệu âm thanh ổn định. Độ trễ truyền dẫn thông tin được
tính bằng tổng thời gian xử lý và kích thước khung của thuật toán.
Bộ mã hoá th
ực hiện việc nén một khung tín hiệu đầu vào 160 mẫu (20 ms) vào
một khung 260 bit. Như vậy một giây nó sẽ thực hiện nén được 13.13
3
bit ( tương
đương với 1625 byte). Do vậy để nén một megabyte tín hiệu chỉ cần một thời gian
chưa đầy 10 phút.[4]
Trung tâm của quá trình xử lý tín hiệu là bộ lọc. Đầu ra của bộ lọc phụ thuộc
rất nhiều vào giá trị đầu vào đơn của nó. Khi có một dãy các giá trị đưa qua bộ lọc thì
dãy tín hiệu này sẽ được dùng để kích thích bộ lọc. Dạng của bộ nén GMS 06.10 dùng
LUẬN VĂN TỐT NGHIỆP Trang
13
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

để nén tín hiệu âm thanh bao gồm 2 bộ lọc và một giá trị kích thước ban đầu. Bộ lọc
ngắn hạn dự đoán tuyến tính được đặt tại tầng đầu tiên của quá trình nén và tại tầng
cuối cùng trong suốt quá trình dãn. Nó được kích thích bởi đầu ra của bộ lọc dự đoán
dài hạn (LTP).

III.1.2 PHƯƠNG PHÁP ĐIỀU BIẾN XUNG MÃ PCM
Mã hoá tín hiệu âm thanh liên qua tới các bước sau đây :
a. Tín hiệu âm thanh được lấy m

ẫu với tần số tối thiểu là :

max
2 ff
s


fs : tần số lấy mẫu
fmax : tần số lớn nhất trong tín hiệu được lấy mẫu.
Việc lấy mẫu như vậy là đảm bảo hoàn toàn khôi phục lại được tín hiệu tương
đương ban đầu bởi thiết bị khôi phục thiết bị. Tần số lấy mẫu nhỏ nhất cũng có thể
nhỏ hơn 2fmax nếu tần số thấp nhất của tín hi
ệu khác không.
b. Biên độ của từng mẫu tín hiệu được lượng tử hoá thành một trong số 2
B
mức. Điều
này có nghĩa dùng B bit trên một mẫu và thông lượng là 2fsB bit/giây với tín hiệu
được lọc thông thấp.
c. Các mức biên độ riêng biệt được thể hiện bằng các từ nhị phân riêng biệt có chiều
dài B. ví dụ : với B =2 thì một từ có thể thể hiện cho 4 mức riêng biệt bằng cách sử
dụng các từ mã 00, 01, 10 và 11.
d. Đối với việc giải mã, các từu nhị phân được ứng thành các mức biên độ và chu
ỗi
xung biên độ – thời gian được lọc thông thấp với một bộ lọc có dải tần giới hạn là
fs. Bây giờ chúng ta giả sử là các bước a, c và d có thể thực hiện một cách hoàn
toàn chính xác, chúng ta tập trung vào việc xác định các lỗi lượng tử xuất hiện
trong bước b.
Cho bước lượng tử (kí hiêu :
Δ
). Nếu số lượng các mức lượng tử rất lớn, người ta giả

sử rằng sai số lượng tử có phân bố đồng nhất như sau :


Δ
=
1
)(Ep
, -
22
Δ
<≤
Δ
E
(1)
L
d


H

t
r

N



t
i
n

h
8
đ
đ

LUẬN VĂN T
Điều
diễn hình 1,
ượng và mỗ
Hình III.2 a.
Nếu
n
rị bình phươ

Nếu giá trị đ

Ví d

iện về mặt
ngoại trừ cá
hàm Gaussi
Xrms của
b
ược thực hi
ầu ra).



TỐT NGHIỆ
này sẽ khô

đầu ra của
ỗi lượng tử t
Đặc tuyến
như ta cho
ơng trung b

độ rộng của

ụ, cho bộ lư
lý thuyết, t
ác trường hợ
an trung b
bộ lượng tử
iện tỷ số củ

ỆP
ông đúng n
bộ lượng
t
trong trườn
lượng tử ho
rằng bộ lượ
bình của sai

Δ

Δ

2
2

2
)(EpE
đầu vào X

2
=
rm
XSNR
ượng tử có
thì độ rộng
ợp đặc biệt
bình – khôn
ử với xác x
ủa khoảng b

8=Δ

ếu tín hiệu
tử có thể bã
ng hợp này s
oá;b.Đặc tuy
ợng tử khôn
số lượng tử
Δ
=
2
12
)dE
(2
là Xrms, th

[]
12//
2
Δ
ms

khoảng bi
ê
8Xrms của
t. Ví dụ, nế
ng, thì các
xuất nhỏ h
biên độ trên
B
rms
X 2/8
(4

là bão hoà
ão hoà tại 5
sẽ là một hà
yết sai số lư
ng bị bão h
ử là :
2)
hì tỷ số tín h
(3)
ên độ từ – 4
a bộ lượng
ếu tín hiệu

mẫu tín
h
hơn 1/10.00
n số lượng c
4)

à bộ lượng
với tần số
àm tăng tuy
ượng tử; c.V
hoà. Theo cô
hiệu/nhiễu đ
4Xrms đến
tử không
c
PDF p(x) đ
hiệu sẽ rơi
00). bước lư
các bước lư
T
tư. Ví du n
đầu và vượ
yến tính.[4]
VD lượng tử
ông thức (1
được tính b
+ 4Xrms( đ
có ràng buộ
được biến đ
bên ngoài

ượng tử đề
ượng tử (số
rang
14
như biểu
ợt qua số
ử đều
1) thì giá
bởi :
để thuận
ộc riêng,
đổi bằng
i khoảng
u có thể
các mức
LUẬN VĂN TỐT NGHIỆP Trang
15
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

Từ (3) và (4) ta có :

2,76log10)(
10
−== BSNRdBSNR
(5)

Công thức trên miêu tả rất tốt về PCM với các điều kiện sau :
1.Hệ thống hoạt động với kênh sạch(không nhiễu), chỉ giới hạn về sai số lượng tử( và
không gây ra lỗi các từ mã khi kênh có nhiễu).

2.Tín hiệu đầu vào đủ phức tạp để loại trừ cấu trúc thời gian hiển nhiên trong dạng tín
hiệu lỗi, như vậy biểu diễn tĩnh của lỗi trong 1
được thể hiện đầy đủ.
3.lượng tử hoá đủ mịn(B>6) để ngăn chặn những thành phẩm liên quan đến tín hiệu
trong dạng tín hiệu lỗi, sai số có thể được đo trong biểu thức công suất nhiễu hay là
biến sai số 2.
4.Bộ lượng tử được sắp với thanh biên độ từ (-4Xrms;+4Xrms)
như vậy trong lượng tử đều, cứ thêm 1 bit thì được lợi 6 dB và để có chất lượng thích
hợp thì B >11 do đó thông lượng tương đối lớn.

III.2 CÁC PHƯƠNG PHÁP NÉN TIẾNG NÓI
III.2.1 GIỚI THIỆU CHUNG
Y Ùtưởng nén tiếng nói là để giảm kích thước nhằm giúp ít tốn băng thông
truyền qua mạng. Dòng dữ liệu tiếng nói được giải nén ở tốc độ lấy mẫu mặc định (
8bits/mẫu, 8 khz, kênh mono) sẽ yêu cầu đường truyền có tốc độ 8000 mẫu/giây * 8
bits/ mẫu = 64 Kbits/giây để truyền dữ liệu qua mạng. Do đó, tùy theo tốc độ đường
truyền thực tế trên m
ỗi mạng mà chọn giải pháp nén hay không nén dữ liệu trước khi
truyền dữ liệu âm thanh qua mạng, cũng như chọn tỉ lệ nén là bao nhiêu cho phù hợp
(chọn giải thuật nén). Vì nếu dữ liệu được nén thì phải giải nén khi được truyền đến
máy nhận, do đó cũng tốn thời gian để nén và giải nén dữ liệu, điều này dẫn đến ảnh
hưởng thời gian thực của hệ thố
ng.
Đối với các mạng cục bộ, thường có tốc độ truyền của mạng cao nên có thể
không cần phải nén tiếng nói trước khi truyền.
Ngược lại, đối với mạng Internet, hệ thống được kết nối với Internet thông qua
các modem chuẩn có tốc độ thấp 14,4 Kbits/s hoặc 28,8Kbits/s thì nhất thiết phải nén
tiếng nói trước khi truyền và giải nén trước khi phát. Hai phương pháp nén âm thanh
thường được dùng nhất để giảm bă
ng thông là GSM và ADPCM.[2]


III.2.2 CÁC PHƯƠNG PHÁP NÉN CỤ THỂ
III.2.2.1 Phương pháp nén tiếng nói theo chuẩn GSM
Phát triển tại Đại học Kỹ thuật Berlin vào năm 1992, GSM là một trong những
phương pháp nén âm thanh phức tạp nhất đang được sử dụng, cho tỉ lệ nén 1:10. Giải
thuật GSM dựa trên giao thức truyền thông Mobile Phone, hiện tại là giao thức phổ
biến nhất tại Châu Âu đối với điện thoại di động.
Đầu vào của GSM bao gồm các frames 160 tín hiệu, nh
ững tín hiệu PCM tuyến
tính 13 bits lấy mẫu ở 8 Khz. GSM có sẵn trong thư viện C có thể được dùng để tạo ra
một đối tượng gsm giữ trạng thái cần thiết hoặc để mã hóa những mẫu PCM tuyến
tính thành các frames GSM, hoặc giải mã các frames GSM thành các frames PCM
tuyến tính. Bộ mã hóa nén 160 frames PCM 16 bits thành các frames GSM 260 bits.
Tương ứng một giây tiếng nói thành 1625 bytes. Bởi vì mẫu 260 bits không chẵn để
gắn vào các bytes 8 bits, nên bộ mã hóa sẽ mã hóa frame 160 bytes thành frame GSM
264 bits. Một buffer GSM nén 1 Mb có thể lưu tiếng nói gần 10 phút.[2]
LUẬN VĂN TỐT NGHIỆP Trang
16
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

Một dòng dữ liệu tiếng nói giải nén 16 bits/mẫu ở 8Khz yêu cầu băng thông tốc
độ 128 Kbits/s, trong khi đó băng thông để truyền qua mạng nếu dùng giải thuật nén
GSM , tiếng nói 16 bits/mẫu chỉ cần:
( 264 bits * 8.000 mẫu/giây)/160 mẫu = 13,2 Kbits/giây
Cho tỉ lệ nén 128/13,2 = 9,7 tương đương 10 :1.

III.2.2.2 Phương pháp nén ADPCM
Nguyên tắc :
Là một phương pháp có thể được dùng để nén các khối dữ liệu tiếng nói trước

khi chúng được truyền đến các máy nhận và giải nén chúng
để phát lại sau khi được
nhận từ đường truyền.
Hình sau là một giản đồ khối đơn giản của bộ mã hóa và giải mã ADPCM :

Hình III.3 Sơ đồ khối bộ mã hoá và giải mã ADPCM
Bộ mã hóa ADPCM giả sử rằng những mẫu âm thanh kế cận nhau sẽ giống
nhau, vì thế thay vì biểu diễn mỗi mẫu độc lập như PCM. ADPCM tính toán sự chênh
lệch giữa các mẫu âm thanh và giá trị tiên đoán của nó và tạo ra nh
ững giá trị vi phân
PCM. Có nhiều giải thuật ADPCM khác nhau được đề nghị. Trong phạm vi luận văn
này em tìm hiểu và ứng dụng giải thuật đưa ra bởi IMA (Interactive Multimedia
Association) .
Giải thuật IMA ADPCM nén những mẫu PCM tuyến tính thành các mức lượng
hóa 4 bits, trong đó mỗi mẫu DPCM được biểu diễn bằng các giá trị âm thanh 16 bits,
do đó giải thuật này cung cấp một tỉ lệ nén là 4:1. Ví dụ tiếng nói 16 bits/mẫu, 8 Khz,
kênh mono yêu cầu tốc độ truyền d
ữ liệu là 128 Kbits/s , khi nén với giải thuật
IMA_ADPCM chỉ cần tốc độ truyền dữ liệu 32 Kbits/s là đủ.
Quá trình thực hiện của giải thuật IMA_ADPCM là đọc từ những bộ đệm có
giá trị kiểu nguyên và nén chúng thành một mẫu âm thanh 16 bits được biểu diễn bằng
các mức lượng hóa 4 bit. Bởi vì không có giới hạn trong kích thước buffers tiếng nói
LUẬN VĂN TỐT NGHIỆP Trang
17
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

nên những mã ADPCM được kết hợp một cách dễ dàng với các phần còn lại của
chương trình để nén tiếng nói khi thu và giải nén trở lại khi phát.


Giải thuật nén IMA ADPCM :
Theo sơ đồ mã hóa trên chúng ta thấy giải thuật IMA ADPCM tính toán sự
chênh lệch giữa mẫu âm thanh hiện tại X[n] và mẫu đã tiên đoán trước Xp[n-1] và sử
dụng sự chênh lệch đó để tính toán mức lượng hóa D[n] cho mỗi mẫu. Giá trị Xp[n-1]
chỉ là giá trị trễ
thời gian của giá trị X[n]. Hình sau chỉ ra sơ đồ khối của quá trình
lượng hóa dùng giải thuật IMA. Mỗi mức đầu ra của bộ lượng hóa được biểu diễn
bằng bốn bits. Bit thứ tư là bit dấu của mức độ lượng hóa.[2]

Hình III.4 Sơ đồ giải thuật mã hoá nén IMA ADPCM
Từ sơ đồ giải thuật ta thấy rằng bit thứ ba được cài đặt lên 1 nếu độ chênh lệch
giữ
a X[n] và Xp[n-1] là lớn hơn hay bằng step_size. Sau đó step_size được chia 2 và
so sánh trở lại với độ chênh lệch (độ chênh lệch sẽ được tính lại Mẫu = mẫu-kích
thước mẫu tại bước giải thuật nếu bit thứ ba được cài lên1). Bit thứ hai cũng được cài
lên 1 khi độ chênh lệch mới ≥ kích thước mẫu tại bước giải thuật/2. Bộ mã hóa một
lần nữa laị chia kích thước mẫu tại bước gi
ải thuật cho 2 và so sánh với độ chênh lệch
mới và thiết lập giá trị cho bit một tương tự như các bước trước.










LUẬN VĂN TỐT NGHIỆP Trang

18
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ




























CHƯƠNG IV
TÌM HIỂU HỖ TRỢ CỦA WINDOWS SDK
TRONG XỬ LÝ VÀ TRUYỀN NHẬN ÂM THANH

IV.1 MÔI TRƯỜNG LẬP TRÌNH SDK ĐỐI VỚI TRUYỀN ÂM THANH
Môi trường Windows SDK là môi trường lập trình đa phương tiện dưới
Windows, cung cấp các hàm cấp thấp rất thích hợp cho các ứng dụng trên mạng. Một
cách thức đơn giản nhất trong việc xuất dữ liệu waveform ra loa là dùng hàm
PlaySound. Chúng ta có thể thao tác với dạng dữ liệu waveform bằng các hàm cấp
thấp do hệ thống cung cấp. Ngoài ra hệ thống còn cung cấp một cơ chế giúp người l
ập
trình giao tiếp dễ dàng hơn với thiết bị, đó là các hàm MCI.[6]

IV.1.1 CẤU TRÚC FILE WAVE VÀ HÀM PLAYSOUND
IV.1.1.1 Cấu trúc file âm thanh wave
Một file wave thật sự là một phần của một lớp file lớn hơn dùng bởi các hàm
multimedia của windows là các file RIFF ( Resource Interchange File Format). Một
file Riff bao gồm một hoặc nhiều chunk. Trong mỗi chunk có con trỏ chỉ đến chunk
kế tiếp. Mỗi chunk có một mô tả kiểu theo sau bởi một số dữ liệu. Một ứng dụng để
đọc các file RIFF có thể bước qua một số chunk, đọc các chunk cần quan tâm và bỏ
qua các chunk không liên quan. Chunk file RIFF luôn luôn bắt đầu bằng header sau:
LUẬN VĂN TỐT NGHIỆP Trang
19
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

Typedef struct {
FOURCC ckID;
DWORD cksize;
}CK;

Trong đó:
FOURCC là một vùng 4 bytes định nghĩa loại chunk. Vùng này sẽ chứa từ
WAVE đối với file wave.
ckSize đặc tả kích thước dữ liệu trong chunk, sau header này chúng ta sẽ tìm
thấy cSize bytes dữ liệu.
Các chunk có thể chứa các subchunks. Cấu trúc thật sự một file wave cơ bản
bao gồm một chunk fmt theo sau là một chunk dữ liệu. Có thể có những chunk khác
phía sau chunk WAVE nhưng thiết bị sử dụng file WAVE sẽ bỏ qua các chunk này.
Hình sau mô tả cấu trúc file RIFF chứa d
ữ liệu WAVE.




ID
SIZE
FROM TYPE
"fmt"
SIZE
"data"
SIZE

Hai subchunk trong chunk wave đặc tả thông tin về một âm thanh file wave và
sau đó là chính dữ liệu âm thanh. Chunk fmt chứa chủ yếu đối tượng
WAVEFORMAT và một số dữ liệu thêm vào gắn ở cuối chunk. Một đối tượng
WAVEFORMAT được định nghĩa như sau :
Typedef struct waveformar_tag{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;

DWORD nAvgBytesPerSec;
WORD nBlockAlign;
} WAVEFORMAT;
Trong đo ù:
wFormatTag : Chứa hằng WAVE_FORMAT_PCM được định nghĩa trong
MMSYSTEM.H như sau:
# define WAVE_FORMAT_PCM 1
Giá trị WAVE_FORMAT_PCM báo cho phần mềm đọc file wave biết cách âm thanh
trong nó được mã hoá.
nChannels : Của đối tượng WAVEFORMAT có 2 giá trị :
• 1 đối với âm thanh mono.
• 2 đối với âm thanh stereo.
nSamplePerSec : Cho biết tần số lấy mẫu của âm thanh để có thể thu và phát
cùng một tốc độ, giá trị thông thường của field này nhận một những giá trị sau:
LUẬN VĂN TỐT NGHIỆP Trang
20
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

11025 - 11,025Khz
22055 - 22,050Khz
44100 - 44,1 Khz
nAvgBytesPerSec : Cho biết số bytes trung bình trong mỗi giây để thu và phát
dữ liệu wave.
nBlockAlign : Xác định số bytes yêu cầu chứa trong một mẫu
• Những mẫu có độ phân giải nhỏ hơn hoặc bằng 8 bits có thể lưu vào 1
bytes.
• Những mẫu có độ phân giải từ 9 đến 16 bits yêu cầu 2 bytes.
Những mẫu stereo yêu cầu số bytes gấp đôi những mono.
Trong cấu trúc trên không định nghĩa số bits thật sự trong một m

ẫu dữ liệu âm
thanh file wave, để định nghĩa số bits trong một mẫu ta dùng cấu trúc sau:
Typedef struct pvmwaveformat_tag{
WAVEFORMAT wf;
WORD wBitsPerSample;
} PCMWAVEFORMAT;
Trong đó:
wf: Đối với dữ liệu subchunk fmt của một chunk WAVE chúng ta thật sự làm
việc với đối tượng PCMWAVEFORMAT.
nBitsPerSample: Xác định số bits thật sự trong một mẫu .
Trong một mẫu mono 8 bits dữ liệu của chunk dữ liệu gồm một chuỗi dài có giá trị 1
byte. Những mẫu stereo được chia ra với byte đầu dùng cho kênh bên trái và byte th

hai dùng cho kênh bên phải, như vậy mỗi mẫu stereo 8 bits sẽ cần 2 bytes.[6]
Để làm việc với một file RIFF bao gồm các bước sau :
Mở file.
Vào chunk cần thiết.
Chuyển con trỏ file vào vị trí bắt đầu dữ liệu của chunk.
Hoàn tất, ra khỏi chunk.
Vào chunk kế tiếp.

IV.1.1.2 Hàm Playsound
Chúng ta dùng hàm PlaySound để play dữ liệu dạng waveform hoặc chúng ta
có thể dùng hàm sndPlaySound. Tuy nhiên trong môi trường Win32 thì nên dùng hàm
PlaySound.
Hàm PlaySound cho phép chúng ta chỉ định các thông số nguồn âm thanh theo
các cách sau:
• Dùng tên alias khai báo trong file WIN.INI
• Dùng tên file.


Dùng chỉ số nhận dạng tài nguyên

Waveform-Audio Files
Trong môi trường Windows, phần lớn các file âm thanh dạng waveform đều có phần
mở rông là .WAV
Ví dụ dưới đây minh họa cho việc phát file âm thanh “AmThanh.WAV”
PlaySound("C:\\SOUNDS\\AmThanh.WAV", NULL, SND_SYNC);
Play sound theo các hiện tượng
LUẬN VĂN TỐT NGHIỆP Trang
21
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

Hàm PlaySound còn cho phép chúng ta xuất âm thanh tùy theo một sự kiện nào
đó xảy ra trong hệ thống như click mouse hay nhấn một phím nào đó. Hệ thống sẽ
phát âm thanh tùy theo hiệc tượng xảy ra để cảnh báo người sử dụng. Aâm thanh dạng
này được gọi là sound events.
Để xác định sound event, hàm PlaySound sẽ được gọi với thông số pszSound
trỏ đến bảng đăng ký sự kiện. Ví dụ chúng ta sẽ gọi hàm PlaySound ứng với sự kiện
mouse click như sau:
PlaySound("MouseClick", NULL, SND_SYNC);
IV.1.2 GIAO TIẾP AUDIO VỚI BẰNG CÁC DỊCH VỤ CẤP THẤP
Trong phần này chúng ta sẽ khảo sát việc giao tiếp với thiết bị audio bằng các
hàm cấp thấp, các hàm này phù hợp với các ứng dụng cần giao tiếp. Các hàm và cấu
trúc cấp thấp này đều có prefix là wave.[6]

Thiết bị và dữ liệu
Khi muốn giao tiếp với thiết bị, chúng ta phải mở thiết bị để sử dụng và sau khi
sử dụng xong thì phải đóng thiết bị lại. Trong khi sử dụng chúng ta sẽ truy xuất các
tính năng của thiết bị và theo dõi thiết bị thực thi bằng các handles và Identifiers.


IV.1.3 SỬ DỤNG CÁC THIẾT BỊ XUẤT NHẬP, HỖ TRỢ WAVEFORM AUDIO
Chúng ta dùng hàm waveOutOpen để mở thiết bị đầu ra nhằm xuất dữ liệ
u
dạng waveform. Hàm sẽ mở thiết bị waveOut và trả handle về cho ứng dụng. Hệ
thống multimedia sẽ hỗ trợ nhiều dạng output dữ liệu khác nhau do đó khi mở thiết bị
nếu cần chúng ta phải chỉ định rõ thông số dữ liệu. Ví dụ chúng ta dùng cờ
WAVE_MAPPER để xác định thiết bị output sẽ xuất âm thanh dạng waveform.

Dò tìm thiết bị
Windows cung cấp các hàm sau giúp chúng ta xác định các thiết bị trong hệ
th
ống phù hợp cho yêu cầu của mình.

Hàm Chức năng
AuxGetNumDevs Truy xuất số lượng các thiết bị sẵn có trong
hệ thống
WaveInGetNumDevs Truy xuất số lượng các thiết bị nhập hỗ trợ
waveform audio sẵn có trong hệ thống
WaveOutGetNumDevs Truy xuất số lượng các thiết bị xuất hỗ trợ
waveform audio sẵn có trong hệ thống

Các thiết bị khai báo trong hệ thống được đánh các chỉ số nhận dạng bắt đầu từ
0. Sau khi xác định số lượng các thiết bị sẵn có trong hệ thống, chúng ta có thể dò tìm
khả năng của từng thiết bị bằng các hàm sau:

Hàm Chức năng
AuxGetDevCaps Truy xuất khả năng của thiết bị xuất
WaveInGetDevCaps Truy xuất khả năng của thiết bị nhập dạng
waveform

WaveOutGetDevCaps Truy xuất khả năng của thiết bị xuất dạng
waveform
LUẬN VĂN TỐT NGHIỆP Trang
22
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

Các hàm truy xuất này sẽ truy xuất này sẽ lấy các cấu trúc liên quan đến khả
năng của thiết bị. Các cấu trúc dưới đây sẽ tương ứng với các hàm liệt kê ở trên:

Hàm Structure
AuxGetDevCaps AUXCAPS
WaveInGetDevCaps WAVEINCAPS
WaveOutGetDevCaps WAVEOUTCAPS

Thiết bị waveform có khả năng hỗ trợ các dạng format không chuẩn. Dạng
format không chuẩn này được dùng trong cấu trúc WAVEFORMATEX.

Handle và Identifier của thiết bị
Khi mở thiết bị, chúng ta sẽ nhận được handle hay thông số Identify của thiết
bị. Chúng ta sẽ điều khiển thiết bị qua các thông số này.
Sự khác biệt giữa handle và identify là khó thấy nhưng rất quan trọng.
Identitier của thiết bị được chỉ định ngầm
định từ số lượng các thiết bị sẵn có
trong hệ thống. Identifier sẽ được trả về khi chúng ta dùng các hàm auxGetNumDevs,
waveInGetNumDevs, or waveOutGetNumDevs Hàm.
Handle của thiết bị là thông số trả về của device driver khi chúng ta dùng các
hàm waveInOpen hay waveOutOpen.

Waveform-Audio Output Data Types

Các thông số dưới đây được dùng cho thiết bị waveform output

Cấu trúc Chức năng
HWAVEOUT Handle của thiết bị waveform output
WAVEFORMATEX Cấu trúc dùng chỉ định dạng format thiết bị
output/ input
WAVEHDR Cấu trúc dùng làm header cho khối dữ liệu
waveform. Cấu trúc được dùng cho cả thiết bị
output và input
WAVEOUTCAPS Cấu trúc dò hỏi khả năng của thiết bị output.

Chỉ định dạng format của dữ liệu waveform audio
Khi chúng ta mở thiết bị output bằng hàm waveOutOpen, thông số pwfx sẽ chỉ
định cấu trúc WAVEFORMATEX xác định dạng format của dữ liệu waveform. Đây
là cấu trúc mở rông của cấu trúc WAVEFORMAT.

Ghi dữ liệu waveform
Sau khi mở thiết bị xuất, chúng ta có thể xuất dữ liệu bằng cách gọi hàm
waveOutWrite. Hàm sẽ gửi khối dữ liệu âm thanh ra thiết bị xuất. Chúng ta dùng cấu
trúc WAVEHDR
để chỉ định header của khối dữ liệu được gửi ra. Header này gồm
con trỏ tới khối dữ liệu đã lock, chiều dài khối dữ liệu và một số thông số cờ. Khối dữ
liệu phải được prepare trước khi đem ra sử dụng.

Sau khi gửi khối dữ liệu đến thiết bị output, chúng ta phải chờ driver hoàn tất
việc xử lý khối dữ liệu tr
ước khi giải phóng nó. Khi chúng ta cần gửi nhiều khối dữ
LUẬN VĂN TỐT NGHIỆP Trang
23
Đ

ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

liệu liên tục, chúng ta sẽ phải theo dõi việc xử lý hoàn tất khối dữ liệu để có thể gửi
khối tiếp theo.

PCM Waveform-Audio Data Format
Thông số lpData trong cấu trúc WAVEHDR sẽ trỏ đến dữ liệu đã được lấy
mẫu. Đối với dữ liệu PCM 8-bit, mỗi giá trị lấy mẫu được biểu diễn bằng một số 8 bit
không dấu. Đối với dữ liệu PCM 16-bit, mỗi giá trị l
ấy mẫu được biểu diễn bằng một
số 16 bit không dấu. Bảng dưới đây cho chúng ta thấy các giá trị cao nhất, thấp nhất
cũng như giá trị trung bình của dữ liệu PCM:

Data format Maximum value Minimum value Midpoint value
8-bit PCM 255(0xFF) 0 128 (0x80)
16-bit PCM 32,767 (0x7FFF) -32,768 (0x8000) 0

Các gói dữ liệu PCM
Thứ tự của dữ liệu thay đổi tùy theo dạng format 8-bit hay 16-bit, stereo hay
mono. Bảng dưới đây trình bày các gói dữ liệu của các dạng PCM khác nhau:

PCM waveform Chức năng
8-bit mono Mỗi giá trị lấy mẫu là 1 byte tương ứng một kênh. Các
giá trị mẫu xếp theo thứ tự 1, 2, 3, 4 . . .
8-bit stereo Mỗi giá trị lấy mẫu là 2 byte. Các giá trị mẫu xếp theo
thứ tự 1, 2, 3, 4 . . . Với mỗi giá trị mẫu byte đầu là
kênh 0 (trái) còn byte sau là kênh 1 (phải).
16-bit mono Mỗi giá trị lấy mẫu là 2 byte. Các giá trị mẫu xếp theo
thứ tự 1, 2, 3, 4 . . . Với mỗi giá trị mẫu byte đầu là
byte thấp của kênh 0 còn byte sau là byte cao của kênh

0.
16-bit stereo Mỗi giá trị lấy mẫu là 4 byte. Các giá trị mẫu xếp theo
thứ tự 1, 2, 3, 4 . . . Với mỗi giá trị mẫu byte đầu là
byte thấp của kênh 0 (trái), byte thứ 2 là byte cao của
kênh 0, byte thứ 3 là byte thấp của kênh 1 (phải) còn
byte thứ 4 là byte cao của kênh 1.



Đóng thiết bị waveform-Audio Output
Sau khi thực thi công việc xong, chúng ta sẽ gọi hàm waveOutClose để đóng
thiết bị. Khi thiết bị đang thực thi mà gọi hàm này thì lỗi sẽ xảy ra. Nếu chúng ta
muốn đóng thiết bị giữa chừng thì đầu tiên chúng ta nên gọi hàm waveOutReset trước
khi đóng thiết bị. Nhưng trước đó cũng cần gọi hàm waveOutUnprepareHeader để
unprepare tất cả các khối dữ liệu.

Playing Waveform-Audio Files
Chúng ta có thể dùng các hàm sau
đây để xuất dữ liệu dạng âm thanh ra loa:

Hàm Chức năng
LUẬN VĂN TỐT NGHIỆP Trang
24
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ

MessageBeep Xuất âm thanh dưới dạng thông báo của hệ thống
SndPlaySound Xuất âm thanh dưới dạng đăng ký trước trong hệ thống
hay là nội dung của một file wave
PlaySound


Giống như hàm trên và thêm cơ chế truy xuất trực tiếp tài
nguyên.

Các hàm PlaySound và sndPlaySound sẽ nạp hoàn toàn nội dung file wave vào bộ nhớ
và xuất ra ngõ output. Khả năng bộ nhớ của chúng có giới hạn nên chúng chỉ quản lý
được các nội dung dưới 100KB. Khi làm việc với các file có nội dung lớn hơn thì
chúng ta có thể sử dụng các dịch vụ do MCI cung cấp.

Sử dụng Windows message trong việc quản lý khi playback
Các Thông báo dưới đây có thể được sử dụng trong quá trình xuất dữ liệu:

Thông báo Chức năng
MM_WOM_CLOSE Được gửi đi khi đóng thiết bị bằng hàm
waveOutClose
MM_WOM_DONE Được gửi đi sau khi driver hoàn tất việc xuất dữ liệu
bằng hàm wafveOutWrite.
MM_WOM_OPEN Được gửi đi khi thiết bị được mở bằng hàm
waveOutOpen.

Các thông số wParam và lParam cũng rất cần thiết. Thông số wParam luôn
luôn xác định handle của thiết bị waveform-audio. Đối với thông số lParam, Thông
báo MM_WOM_DONE dùng thông số này trỏ tới cấu trúc WAVEHDR chỉ định sụ
hoàn tất của dữ liệu trong khi thông số này không được hai Thông báo còn lại dùng.
Việc dùng này rất hữu hiệu, Thông báo MM_WOM_DONE sẽ là tín hiệu được báo về
sau khi việc playback khối dữ liệu hoàn tất. Ta sẽ tiếp nhận Thông báo này và giải
phóng các biến có liên quan.

Thay
đổi volume của quá trình playback dữ liệu waveform audio

Chúng ta sẽ dùngcác hàm sau đây để lấy thông số volume cũng như thiết lập
các thông số này theo yêu cầu.

Hàm Chức năng
WaveOutGetVolume Truy xuất mức volume của thiết bị xuất
WaveOutSetVolume Thiết lập mức volume cho thiết bị

Giá trị volume là một số doubleword. Khi audio format là stereo, 16 bit cao chỉ
giá trị volume của channel phải và 16 bits thấp chỉ giá trị volume của channel trái.
Còn nếu ở các thiết bị không hỗ trợ 2 kênh thì 16 bit thấp sẽ được sử dụng chỉ giá trị
volume còn 16 bit cao sẽ không dùng đến.
Giá trị volume thay đổi từ giá trị 0x0 (silence) cho đến mức 0xFFFF
(maximum)
Recording Waveform Audio
Chúng ta có thể sử dụng dịch vụ thu âm thanh theo chuẩn MCI. Tuy nhiên nếu
thấy cần thiết, chúng ta có thể sử dụng các hàm thu âm thanh cấ
p thấp.

×