Tải bản đầy đủ (.doc) (70 trang)

Tìm hiểu môi trường lập trình SDK windows và ứng dụng trên 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 (420.17 KB, 70 trang )

Trang 1

LỜI NÓI ĐẦU
Trong những năm gần đây, mạng máy tính ngày càng
trở nên phổ biến. Việc liên kết các máy tính trên môi
trường mạng cũng như liên kết các mạng lại với nhau đem
lại cho chúng ta nhiều lợi ích trong công việc cũng như trong
việc học tập nghiên cứu, giải trí. Chúng ta có thể sử
dụng các tài nguyên sẵn có được chia xẻ như file server,
printer, máy fax, ... môi trường mạng còn là một môi
trường thông tin nhanh chóng và tiện lợi nhờ vào các cơ
chế truyền thông trên mạng như : e-mail, www ...
Bên cạnh đó, tốc độ phát triển của máy tính PC
cũng rất nhanh chóng. Các kỹ thuật hiện đại đã giúp tạo
ra các máy PC với tốc độ tính toán nhanh hơn, bộ nhớ lớn
hơn và khả năng xử lý của nó cũng ngày càng đa dạng
hơn trong khi giá thành ngày càng rẻ hơn. Một trong những
khả năng ưu việt của máy PC hiện nay là hỗ trợ
multimedia. Các máy PC ngày nay giao tiếp với con người
không chỉ bằng text mà còn kết hợp tất cả các phương
tiện khác như tiếng nói, hình ảnh.
Việc đưa kỹ thuật multimedia vào các ứng dụng
truyền thông trên mạng giúp chúng ta tạo ra nhiều ứng
dụng phong phú hơn. Chẳng hạn hộp thư điện tử ngày nay
có thể không chỉ là văn bản mà còn bao gồm tiếng
nói, hình ảnh. Các trang web trở nên sinh động hơn hẳn khi
kèm theo kỹ thuật multimedia. Bên cạnh đó, chúng ta có
thể thiết kế các ứng dụng tiện ích như Video conference,
voice mail...
Thông qua chương trình này, người sử dụng có thể
trao đổi thông tin với nhau bằng tiếng nói. Chương trình này


đã được hiện thực rất nhiều trong các lónh vực thông tin
như điện thoại, viễn thông, máy tính . . . Tuy nhiên nó chưa
được áp dụng và phát triển rọâng rãi như trên các lónh
vực thông tin khác do sự hạn chế của thiết bò. Ngày nay,
khi công nghệ thông tin đã phát triển thì việc hiện thực
chương trình này là hoàn toàn có thể. Ứng dụng trong
nhiều lónh vực khác nhau như :
 •Việc dạy học từ xa.
 •Việc chẩn đoán, chữa bệnh từ xa.
 •Hội thảo, thảo luận theo nhóm.
 •Công cụ trao đổi thông tin bằng hình ảnh và
âm thanh.
Mục tiêu của đồ án tốt nghiệp là tìm hiểu các mô
hình và công nghệ truyền âm thanh trên mạng máy tính,
trên cơ sở đó xây dựng ứng dụng truyền thông âm thanh


Trang 2

thoại trên mạng cục bộ. Đồ án sẽ xây dựng thử nghiệm
một hệ thống cho phép trao đổi thông tin bằng tiếng nói
thoại, tương tác điểm – điểm trên mạng LAN. Đồ án được
trình bày gồm 5 chương với bố cục như sau :
Chương I : Tìm hiểu các mô hình điện thoại qua mạng, Từ
đó đưa ra mô hình sẽ thực thi trong đồ án này.
Chương II: Giới thiệu chung về các giao thức truyền thông
trên mạng Internet và vào khảo sát cụ thể các
giao thức này.
Chương III : Giới thiệu các chuẩn mã hoá và nén âm
thanh.

Chương IV : Tìm hiều môi trường lập trình SDK Windows và
ứng dụng trên mạng.
Chương V : Thiết kế chương trình truyền tiếng nói qua mạng
LAN thông qua sự trợ giúp của công cụ SDK. Đánh giá và
các kết quả thử nghiệm.
Phần kết luận : Nêu những kết quả của đề tài và
hướng nghiên cứu hướng phát triển tiếp theo.


Trang 3

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]

Máy tính

Máy tính
IP
Hình I.1 : Mô hình PC - PC

Máy

tính

Gatewa
y

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.

Điện
I
PSTN
thoại
P
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]



I
PST
PST
Hình
I.3
:

hình
Điện
thoại

Điện
P
N
Nthoại

Điện
thoại

Gateway

Gateway

Điện
thoại

Trang 4

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


Trang 5

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 đổ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ộ.


Trang 6

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]


Trang 7

Hình II.1 Các lớp đại chỉ IP

Hình II.2 TCI/IP và mô hình OSI
Netid nhận dạng cho từng mạng riêng biệt. Các kiểu
lớp đòa chỉ IP cho thấy số lượng mạng và số lượng nút
của mỗi lớp khác nhau. Bảng dưới cho thấy số lượng
mạng và số lượng nút có thể của mỗi lớp đòa chỉ :
Lớp đòa
chỉ
A
B
C


Số lượng
mạng
127
16.383
2.097.151

Số lượng
nút
16.777.241
65.534
254


Trang 8

Mạng lớp A dùng cho mạng diện rộng. Trường netid có
7 bits nên có thể có 127 mạng. Mạng lớp B là mạng có
kích thước trung bình và thích hợp cho các tổ chức 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).
Máy
B

Máy
A
Port

Mối nối

Port

TCI/IP
Interface
Hình II.3
Các socket và port trong mối nối TCP/IP
Số hiệu
cổng
0

2
5
7
9
11

Mô tả
Reserved
Management Entry
Remote Job Entry
Echo
Discard
Systat


Trang 9

13
15
17
20
21
23
25
37
42
49
53
80
102

103
104
111
139
160-223

Daytime
Netstat
Quoted(quote of the
day)
FTP data
FTP control
Telnet
SMTP
Time
Host name server
Login host protocol
Domain name server
World wide web HTTP
ISO-TSAP
x.4000
X.4000 sending server
Sun RPC
NetBIOS session
source
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


Trang 10

đườ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 thiết lập liên kết và
khi không có nhu cầu truyền dữ liệu nữa thì liên kết sẽ
được giải phòng.
Mỗi ứng dụng TCP gồm hai phần là client và server.
Lưu đồ sau minh họa các bước cần thiết để các ứng dụng
client và server giao tiếp với nhau :


Trang 11


Hình II.4 Tạo kết nối giữa client và server theo giao
thức TCP
II.2.1 CÁCH THỨC CÀI ĐẶT ỨNG DỤNG TCP SERVER
Ứng dụng TCP server làm việc theo qui trình sau:
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 hàm listen để chờ đến khi có một client nối vào
port.
Khi có một client nối vào thì hàm listen trả điều khiển
về, ứng dụng server gọi hàm accept để xác nhận mối nối
của client.
Gọi các hàm gửi hay nhận dữ liệu để trao đổi thông
tin với client, ví dụ send, recv.
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.


Trang 12

Hình II.5 Sơ đồ giao tiếp giữa server với client
II.2.2 CÁCH THỨC CÀI ĐẶT ỨNG DỤNG CLIENT TCP
Ứng dụng client TCP làm việc theo qui trình sau :
- Gọi hàm socket để tạo một socket .
- Gọi hàm connect để nối vào server.
- Gọi hàm gửi hay nhận dữ liệu để trao đổi thông tin
với server, ví dụ như hàm send, recv.



Trang 13

-

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.

Hình II.6 Sơ đồ giao tiếp của client với server
Ghi chúù:
Các bước trên cơ bản là giống nhau cho các ứng
dụng client và server viết trên Windows NT và UNIX. Tuy
nhiên, với ứng dụng viết trên UNIX thì không cần gọi 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.


Trang 14

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.


Trang 15


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ínMã
hiệu âm thanh
chất lượng tốt
Mãcó
hoá
Chất
lượng
hoá
ở tốc độ dữ liệu trung bình.
dạng sóng
tiếng nói
hỗn
hợp
Mã hoá dự
đoán tuyến
Rất
tính LPC
tốt
To
át
Trung
bình
2

4

8


16

32

Tốc


Trang 16

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).
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.
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 .


Trang 17

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 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 để 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à :


Trang 18

f s ≥ 2 f max

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ố 2B 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 :
p (E ) =

1


, - ≤ E < (1)

2
2


Trang 19

Điều này sẽ không đúng nếu tín hiệu là bão hoà
bộ lượng tư. Ví du như biểu diễn hình 1, đầu ra của bộ lượng
tử có thể bão hoà tại 5 với tần số đầu và vượt qua số

lượng và mỗi lượng tử trong trường hợp này sẽ là một
hàm tăng tuyến tính.[4]



Trang 20

Hình III.2 a.Đặc tuyến lượng tử hoá;b.Đặc tuyết sai số lượng
tử; c.VD lượng tử đều
Nếu như ta cho rằng bộ lượng tử không bò bão hoà.
Theo công thức (1) thì giá trò bình phương trung bình của sai
số lượng tử là :
−∆ 2



−∆

E 2 p ( E ) dE =

2

∆2
12

(2)

Nếu giá trò độ rộng của đầu vào X là Xrms, thì tỷ số tín
hiệu/nhiễu được tính bởi :

[

2
SNR = X rms

/ ∆2 / 12

]

(3)

Ví dụ, cho bộ lượng tử có khoảng biên độ từ – 4Xrms
đến + 4Xrms( để thuận tiện về mặt lý thuyết, thì độ
rộng 8Xrms của bộ lượng tử không có ràng buộc riêng,
ngoại trừ các trường hợp đặc biệt. Ví dụ, nếu tín hiệu PDF
p(x) được biến đổi bằng hàm Gaussian trung bình – không, thì
các mẫu tín hiệu sẽ rơi bên ngoài khoảng 8Xrms của bộ
lượng tử với xác xuất nhỏ hơn 1/10.000). bước lượng tử
đều có thể được thực hiện tỷ số của khoảng biên độ
trên số lượng các bước lượng tử (số các mức đầu ra).
∆ = 8 X rms / 2 B (4)

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

SNR ( dB) = 10 log10 SNR = 6 B − 7,2 (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.


Trang 21

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]
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 đó



Trang 22

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 đó



Trang 23

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 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



Trang 24

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 l 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.

CHƯƠNG IV
TÌM HIỂU HỖ TR CỦA WINDOWS SDK


Trang 25

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:
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.



×