1246 do an tot nghiep xay dung

60
 LUN VĂN TT NGHIP Trang 1  LI NÓI ĐẦU Trong nhng năm gn đây, mng máy tính ngày càng trnên phbiến. Vic liên kết các máy tính trên môi trường mng cũng như liên kết các mng li vi nhau đem li cho chúng ta nhiu li ích trong công vic cũng như trong vic hc tp nghiên cu, gii trí. Chúng ta có thsdng các tài nguyên sn có được chia xnhư file  server, printer, máy fax, ... môi trường mng còn là mt môi trường thông tin nhanh chóng và tin li nhvào các cơ chế truyn thông trên mng như : e-mail, www ...  Bên cnh đó, tc độ phát trin ca máy tính PC cũng rt nhanh chóng. Các kỹ thut hin đại đã giúp to ra các máy PC vi tc độ tính toán nhanh hơn, bnhln hơn và khnăng xlý ca nó cũng ngày càng đa dng hơn trong khi giá thành ngày càng r hơn. Mt trong nhng khnăng ưu vi t ca máy PC hi n nay là htr ợ multimedia. Các máy PC ngày nay giao tiếp vi con người không chbng text mà còn kết hp tt ccác phương tin khác như tiếng nói, hình nh. Vic đưa kthut multimedia vào các ng dng truyn thông trên mng giúp chúng ta to ra nhiu ng dng phong phú hơn. Chng hn hp thư đin tngày nay có thkhông chlà văn bn mà còn bao gm tiếng nói, hình nh. Các trang web trở nên sinh động hơn hn khi kèm theo kthut multimedia. Bên cnh đó, chúng ta có ththiết kế các ng dn g tin ích như Video conference, voice mail... Thông qua chương trình này, người sdng có thtrao đổi thông tin vi nhau bng ti ếng nói. Chương trình này đã được hi n thc rt nhi u trong các l ĩ nh vc thông tin như đin thoi, vin thông, máy tính . . . Tuy nhiên nó chưa được áp dng và  phát trin rng rãi như trên các lĩnh vc thông tin khác do shn chế ca thiết b.  Ngày nay, khi công nghthông tin đã phát trin thì vic hin thc chương trình này là hoàn toàn có th. ng dng trong nhiu lĩnh vc khác nhau như : •Vic dy hc txa. •Vic chn đoán, cha bnh txa. •Hi tho, tho lun theo nhóm. •Công ctrao đổi thông tin bng hình nh và âm thanh. Mc tiêu ca đồ án tt nghip là tìm hiu các mô hình và công nghtruyn âm thanh trên mng máy tính, trên cơ sđó xây dng ng dng truyn thông âm thanh thoi trên mng cc b. Đồ án sxây dng thnghim mt hthng cho phép trao đổi thông tin bng tiếng nói thoi, tương tác đim – đim trên mng LAN. Đồ án được trình bày gm 5 chương vi bcc như sau : Chương I : Tìm hiu các mô hình đin thoi qua mng, Tđó đưa ra mô hình sthc thi trong đồ án này. Chương II: Gii thiu chung vcác giao thc truyn thông trên mng Internet và vào kho sát cthcác giao thc này. Chương III : Gii thiu các chun mã hoá và nén âm thanh. Chương IV : Tìm hiu môi trường lp trình SDK Windows và ng dng trên mng. Chương V : Thiết kế chương trình truyn tiếng nói qua mng LAN thông qua strợ  giúp ca công cSDK. Đánh giá và các kết quthnghim.  Phn kết lun : Nêu nhng kết quca đề tài và hướng nghiên cu hướng phát trin tiếp theo. Đề tài : Xây dng ng dng truyn thông âm thanh trên mng c c b

Upload: ngoclongxp

Post on 15-Jul-2015

84 views

Category:

Documents


0 download

TRANSCRIPT

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 1/60

LUẬN VĂN TỐT NGHIỆP 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êncứ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 nhanhchó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ớnhơ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àycà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úpchú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 naycó 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 nhaubằ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ựcthô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 âmthanh trên mạng máy tính, trên cơ sở đó xây dựng ứng dụng truyền thông âm thanhthoạ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.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 2/60

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

Việc nghiên cứu lý thuyết một cách hệ thống và xây dựng chương trình phầnmềm đòi hỏi phải đầu tư nhiều thời gian. Với thời gian có hạn cho nên bài luận vănnày của em không tránh khỏi những thiếu sót, em rất mong được sự chỉ dẫn thêm củathầy cô và các bạn.

Nhân đây, em xin chân thành cám ơn đến PGS - TS Nguyễn Thị Hoàng Lan,

người trực tiếp hướng dẫn em hoàn thành cuốn luận văn này. Em xin chân thành cámơn các thầy cô trong khoa Công nghệ thông tin Trường ĐH Bách Khoa HN, Trường 

 ĐH Thủy Sản và toàn thể các bạn đã giúp đỡ em hoàn thành cuốn luận văn này.

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

I.1 CÁC MÔ HÌNH ĐIỆN THOẠII.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ạngIP 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ậndữ 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ầnmề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]

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Máy tính Máy tính IP

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 3/60

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

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ÍNHTrong 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ộtgateway để chuyển tiếng nói trên mạng IP thành tiếng nói trên mạng PSTN và trao đổithô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ếtnố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ẠITrong 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]

 

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 LANTrong 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ìnhnghiê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ó đơngiả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ềuquan 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ẵncó 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ươngtrì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ếtnố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

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Máy tínhĐiện

thoại

IP G

atewa

y

PSTN

     Đi      ệ  ntho

    ạ  i

IP

Gateway

PSTN

PSTN

Gateway

     Đi      ệ  ntho

    ạ  i

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 4/60

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

đế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ếngnó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ênmô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ậpliê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ườikhác muốn nói chuyện. Tùy theo người đó quyết định có chấp nhận hay không. Nếuchấ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 tinvớ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ếtsẽ 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ềnnhậ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ôngsố 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) hayhai 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 âmthanh 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ậndữ 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ácvấ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ênkế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ácnhiệ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 trangthiết bị để thử nghiệm. Bởi vậy trong đồ án này em chỉ nghiên cứu cách thức truyềntiếng nói trên mạng nội bộ.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 5/60

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

CHƯƠNG IIKHẢ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 (InternetProtocol). Tên hay địa chỉ IP đều xác định duy nhất một máy trong hệ thống mạngInternet. 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êngcho kỹ thuật Multicasting và được sử dụng trong các giao thức đặc biệt để truyềnthô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ụngtrong tương lai.[5]

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 6/60

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

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ượngmạng và số lượng nút có thể của mỗi lớp địa chỉ :

Lớp địa chỉ Số lượng mạng Số lượng nútA 127 16.777.241B 16.383 65.534C 2.097.151 254

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 7/60

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

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ứccó 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 : viethungIP Address : 192.168.0.55

II.1.1 KHÁI NIỆM SOCKETSocket 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ênmạ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ácdị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ữngsocket 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 Reserved2 Management Entry5 Remote Job Entry7 Echo9 Discard11 Systat13 Daytime15 Netstat17 Quoted(quote of the day)20 FTP data21 FTP control

23 Telnet25 SMTP37 Time

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Máy A Máy B

Port Mối nốiPort

TCI/IPInterface

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 8/60

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

42 Host name server  49 Login host protocol53 Domain name server  80 World wide web HTTP

102 ISO-TSAP

103 x.4000104 X.4000 sending server  111 Sun RPC139 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 IPInternet 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 địnhduy 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ườnghợ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ứcIP 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à internetdatagram từ địa chỉ nguồn đến địa chỉ đích. Đây là một giao thức theo kiểu không liênkế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ũngkhô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ểnluồ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ệnnhờ 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 chialà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 TCPGiao thức TCP là giao thức dùng cho tầng ngay trên tầng IP. Đối với mô hìnhOSI, 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ộtcá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 tratí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ếntrì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ộtcổ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.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 9/60

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

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úngthiế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ớinhau :

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.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 10/60

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

Khi có một client nối vào thì hàm listen trả điều khiển về, ứng dụng server gọihà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.

 

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 11/60

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

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

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 12/60

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

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ênWindows NT và UNIX. Tuy nhiên, với ứng dụng viết trên UNIX thì không cần gọicá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 UDPGiao 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ửithô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àmclosesocket để đó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 SocketDLL và hàm WSACleanup để đóng thư viện này. Tuy nhiên, đối với ứng dụng viếttrên UNIX thì bộ phận quản lý socket đã được hệ điều hành nạp sẵn và do đó khôngcần gọi các hàm như WSAStartup, WSACleanup của Windows NT.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 13/60

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

CHƯƠNG IIIPHƯƠ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àycho 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ầnnghe được. Tuy nhiên trong một ứng dụng đặc biệt như truyền dữ liệu âm thanh trênmạ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ácloạ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ủasó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ấtlượ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ấtlượ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ờigian 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). Am 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.Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Rấttốt

 Tốt

 Trungbình

Chất lượ ng tiếngnói

Mã hoáhỗnhợ p

Mã hoá dạngsóng

Mã hoá dự đoán tuyếntính LPC

 Tốc độ2 4 8 16 32

64

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 14/60

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

Phương pháp điều biên xung mã vi phân (DPCM) dự đoán giá trị hiện tại dựavà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ị saisố 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 64kbps.

Mã hoá dự đoán tuyến tính LPCMộ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 đitheo 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ẫucủ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ếngnó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àygọ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ứctạ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 trungthự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 khiVocoder 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ễutrắ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 đượclưu trữ trong codebook. Khi xem xét một khung âm thanh, AbS kiểm tra khung đó vớirấ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 đó tracodebook 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ủasự 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 theocá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ệnTiêu Chuẩn Viễn Thông Châu Au ETSI để ra. Đầu vào của bộ nén GMS 06.10 baogồ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àycho 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.133 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 gianchư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ộcrấ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ì

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 15/60

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

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ọcngắ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ầngcuố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ándài hạn (LTP).

III.1.2 PHƯƠNG PHÁP ĐIỀU BIẾN XUNG MÃ PCMMã 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à :  max2 f    f   s ≥

fs : tần số lấy mẫufmax : 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ềunà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ềudà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ỗixung 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àntoà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)( E  p , -

22

∆<≤

∆ E  (1)

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 16/60

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

Đ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ểudiễ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]

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

2

22

12)( dE  E  p E  (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 :

  12//22∆=

rms X  SNR (3)

Ví dụ, cho bộ lượng tử có khoảng biên độ từ – 4Xrms đến + 4Xrms( để thuậntiệ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ằnghàm Gaussian trung bình – không, thì các mẫu tín hiệu sẽ rơi bên ngoài khoảng8Xrms 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).

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 17/60

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

   B

rms X   2/8=∆ (4)

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ínhiệ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ệutrong 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íchhợ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ÓIIII.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ôngtruyề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 độ đườngtruyề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 khitruyề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 đếnmá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 ảnhhưở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 quacá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éntiế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 thanhthườ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ảithuậ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 ramộ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ếntí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 để

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 18/60

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

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 GSM264 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 đó băng thông để truyền qua mạng nếu dùng giải thuật nénGSM , 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âyCho tỉ lệ nén 128/13,2 = 9,7 tương đương 10 :1.

III.2.2.2 Phương pháp nén ADPCMNguyê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ướckhi 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 đượcnhậ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ã ADPCMBộ 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ênhlệ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ânPCM. Có nhiều giải thuật ADPCM khác nhau được đề nghị. Trong phạm vi luận vănnày em tìm hiểu và ứng dụng giải thuật đưa ra bởi IMA (Interactive MultimediaAssociation) .

Giải thuật IMA ADPCM nén những mẫu PCM tuyến tính thành các mức lượnghó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ậtIMA_ADPCM chỉ cần tốc độ truyền dữ liệu 32 Kbits/s là đủ.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 19/60

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

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ằngcá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óinê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ủachươ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ìnhlượ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 ADPCMTừ 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íchthướ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àilê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ộtlầ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ệchmới và thiết lập giá trị cho bit một tương tự như các bước trước.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 20/60

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

CHƯƠNG IVTÌ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 THANHMô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ộtcách thức đơn giản nhất trong việc xuất dữ liệu waveform ra loa là dùng hàmPlaySound. Chúng ta có thể thao tác với dạng dữ liệu waveform bằng các hàm cấpthấ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ậptrì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 PLAYSOUNDIV.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àmmultimedia của windows là các file RIFF ( Resource Interchange File Format). Một

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 21/60

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

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.

IDSIZE

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ượngWAVEFORMAT và một số dữ liệu thêm vào gắn ở cuối chunk. Một đối tượngWAVEFORMAT đượ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 thanhtrong nó được mã hoá.nChannels : Của đối tượng WAVEFORMAT có 2 giá trị :

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 22/60

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

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átcù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:

11025 - 11,025Khz

22055 - 22,050Khz44100 - 44,1 KhznAvgBytesPerSec : 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 PlaysoundChú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àmPlaySound.

Hàm PlaySound cho phép chúng ta chỉ định các thông số nguồn âm thanh theocá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 FilesTrong môi trường Windows, phần lớn các file âm thanh dạng waveform đều có phầnmở rông là .WAV

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 23/60

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

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 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. Am thanh dạngnày được gọi là sound events.

Để xác định sound event, hàm PlaySound sẽ được gọi với thông số pszSoundtrỏ đến bảng đăng ký sự kiện. Ví dụ chúng ta sẽ gọi hàm PlaySound ứng với sự kiệnmouse 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áchà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ấutrúc cấp thấp này đều có prefix là wave.[6]

Thiết bị và dữ liệuKhi 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áctí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 AUDIOChú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ốngWaveInGetNumDevs Truy xuất số lượng các thiết bị nhập hỗ trợ 

waveform audio sẵn có trong hệ thốngWaveOutGetNumDevs 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ìmkhả năng của từng thiết bị bằng các hàm sau:

Hàm Chức năngAuxGetDevCaps Truy xuất khả năng của thiết bị xuất

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 24/60

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

WaveInGetDevCaps Truy xuất khả năng của thiết bị nhập dạngwaveform

WaveOutGetDevCaps Truy xuất khả năng của thiết bị xuất dạngwaveform

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

WaveInGetDevCaps WAVEINCAPSWaveOutGetDevCaps WAVEOUTCAPS

Thiết bị waveform có khả năng hỗ trợ các dạng format không chuẩn. Dạngformat 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áchàm waveInOpen hay waveOutOpen.

Waveform-Audio Output Data TypesCác thông số dưới đây được dùng cho thiết bị waveform output

Cấu trúc Chức năngHWAVEOUT 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ệuwaveform. Cấu trúc được dùng cho cả thiết bị

output và inputWAVEOUTCAPS 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 audioKhi 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. Đâylà cấu trúc mở rông của cấu trúc WAVEFORMAT.

Ghi dữ liệu waveformSau 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ấutrúc WAVEHDR để chỉ định header của khối dữ liệu được gửi ra. Header này gồm

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 25/60

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

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ấtviệ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ữ

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ửikhố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 bitkhô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ộtsố 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ấtcũng như giá trị trung bình của dữ liệu PCM:

Data format Maximum value Minimum value Midpoint value8-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ácgiá 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 theothứ 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ênh0.

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ủakê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ướckhi đó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.Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 26/60

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

 Playing Waveform-Audio FilesChú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

MessageBeep Xuất âm thanh dưới dạng thông báo của hệ thốngSndPlaySound 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 wavePlaySound 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ăngMM_WOM_CLOSE Được gửi đi khi đóng thiết bị bằng hàm

waveOutCloseMM_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ônluô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 audioChú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ăngWaveOutGetVolume Truy xuất mức volume của thiết bị xuấtWaveOutSetVolume 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.Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 27/60

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

Giá trị volume thay đổi từ giá trị 0x0 (silence) cho đến mức 0xFFFF(maximum)

Recording Waveform AudioChú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.

Các thông số dữ liệu dưới đây sẽ đặc trưng cho dạng dữ liệu waveform audioinput

Structure Chức năngHWAVEIN Handle của thiết bị input

WAVEFORMATEX Cấu trúc của dạng dữ liệu được thiết bị input hỗ trợ WAVEHDR Cấu trúc dùng làm header của khối dữ liệu input.

 Nó cũng được dùng khi xuất dữ liệu ra OutputWAVEINCAPS Cấu trúc dùng dò hỏi các khả năng của thiết bị

input

Trước khi bắt đầu công việc thu dữ liệu, chúng ta phải dùng hàmwaveInGetDevCaps để dò hỏi khả năng cũng như xác định các thuôc tính của thiết bị.Hàm sẽ trả về cấu trúc WAVEINCAPS xác định các thông số mong muốn.

Opening Waveform-Audio Input DevicesĐể thu dữ liệu, trước hết chúng ta dùng hàm waveInOpen để mở thiết bị

waveform input. Nếu thực thi thành công, hàm sẽ trả về cho chúng ta handle của thiết bị.

 Managing Waveform-Audio Recording Sau khi mở thiết bị, chúng ta có thể tiến hành việc thu dữ liệu. Dạng dữ liệu

waveform thu được sẽ được đưa vào buffer, buffer này được trỏ đến trong cấu trúcWAVEHDR. Trước khi được sử dụng, chúng ta phải prepare buffer này.Windows cung cấp cho chúng ta các hàm sau đây dùng thu dữ liệu waveform:

Hàm Chức năngWaveInAddBuffer Gửi một buffer cho device driver, thiết bị sẽ

thu dữ liệu vào khối nàyWaveInReset Ngừng thu dữ liệu và đánh dấu tất cả các

 buffer đã thu xongWaveInStart Bắt đầu thu dữ liệu.WaveInStop Kết thúc việc thu dữ liệu

Chúng ta dùng hàm waveInAddBuffer để gửi các khối buffer tới device driver.Khi dữ liệu được điền đầy vào buffer, ứng dụng sẽ được thông báo bằng windowThông báo, callback Thông báo, thread Thông báo, hay event, tùy theo cờ thông báođược chỉ định trong hàm open device.

Trước khi bắt đầu thu dữ liệu, chúng ta phải gửi ít nhất một buffer dữ liệu cho

thiết bị input và khi đóng thiết bị, chúng ta gọi hàm waveInReset để đánh dấu các buffer đã được thu xong.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 28/60

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

Using Window Messages to Manage Waveform-Audio Recording Các Thông báo sau đây sẽ được dùng để quản lý việc thu dữ liệu dạng

waveform audio:Thông báo Chức năng

MM_WIM_CLOSE Được gửi đi khi thiết bị đóng lại khi gọi hàm

waveInCloseMM_WIM_DATA Được gửi đi khi thiết bị thu đầy một buffer khi gọi

hàm waveInAddBuffer MM_WIM_OPEN Được gửi đi khi thiết bị được open khi gọi hàm

waveInOpen

Thông số lParam của MM_WIM_DATA là pointer trỏ đến cấu trúcWAVEHDR để nhận dạng buffer dữ liệu. Buffer có thể không chứa đầy dữ liệu vìviệc thu dữ liệu có thể kết thúc trước khi buffer được thu đầy. Chúng ta có thể biếtđược kích thước thật sự của dữ liệu bằng thông số dwBytesRecorded.

 Audio data block Hàm waveInAddBuffer và waveOutWrite có thông số yêu cầu ứng dụng chỉ

định khối dữ liệu cần cho thiết bị sử dụng cho việc thu hay playback. Các hàm trên sửdụng cấu trúc WAVEHDR để miêu tả khối dữ liệu trên.

Trước khi sử dụng các hàm trên để gửi khối dữ liệu cho thiết bị. Chúng ta phảicấp phát vùng nhớ cho khối dự liệu và khối header. Khối header phải được prepare vàunprepare bằng các hàm sau:

Hàm Chức năngWaveInPrepareHeader Prepare khối dữ liệu input

WaveInUnprepareHeader Unprepare khối dữ liệu inputWaveOutPrepareHeader Prepare khối dữ liệu output

WaveOutUnprepareHeader Unprepare khối dữ liệu output

Trước khi gửi khối dữ liệu cho driver input hay output, chúng ta phải preparechúng. Sau khi thiết bị sử dụng xong, các khối dữ liệu phải được unprepare trước khigiải phóng các vùng nhớ đã cung cấp.

Khi kích thước dữ liệu lớn, chúng ta phải cung cấp các buffer liên tục cho thiết bị, quá trình này phải diễn ra liên tục cho đến khi hoàn tất công việc và thiết bị đượcđóng lại.

Ứng dụng phải xác định và quản lý thời điểm mà thiết bị hoàn tất việc thự thitrên các khối dữ liệu để đưa ra các tác động thích hợp. Các cách sau đây được đưa ra:

Chi định hàm callback nhận Thông báo mà thiết bị gửi khi nó hoàn tất một khốidữ liệu.

 Sử dụng các event callback Chỉ định window hay thread nhận Thông báo gửi từ thiết bị.

Xác định bit WHDR_DONE trong cờ dwFlags của cấu trúc WAVEHDR đi kèm vớimỗi khối dữ liệu.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 29/60

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

Khi ứng dụng không đáp ứng được tốc độ xử lý các buffer thì chiến lược buffer kép có thể được đưa ra để tăng tốc độ thực thi.

Chúng ta sẽ khảo sát một số phương thức xử lý sau khi thiết bị hoàn tất mộtkhối dữ liệu.

 Dùng hàm callback để xử lý các driver messagesĐể chỉ định hàm callback xử lý ứng vớicác driver message, chúng tachỉ định cờ 

CALLBACK_FUNCTION trong biến fdwOpen và địa chỉ hàm xử lý trong biếndwCallback khi gọi hàm waveInOpen hay waveOutOpen.

Messages gửi cho hàm callback tương tự như Thông báo gửi cho window,ngoại trừ việc nó có hai thông số DWORD thay vì một thông số DWORD và mộtthông số UINT.

Để gửi dữ liệu cho hàm callback chúng ta có thể dùng một trong hai cách sau:Dùng thông số dwInstance trong hàm open deviceDùng field dwUser trong cấu trúc WAVEHDR để chỉ định khối dữ liệu gửi cho

device driver. Dùng event callback xử lý các driver message

Để dung event callback, chúng ta dùng hàm CreateEventđể truy xuất handlecủa event. Trong hàm open thiết bị, chỉ định cờ CALLBACK_EVENT cho thông sốfdwOpen. Sau khi gọi hàm waveOutPrepareHeader nhưng trước khi gửi dữ liệu chothiết bị, chúng ta tạo ra một nonsignal event bằng cách gọi hàm ResetEvent, chỉ địnhevent handle được lấy từ hàm CreateEvent. Trong vòng loop để kiểm tra khi bitWHDR_DONE được set trong cấu trúc WAVEHDR, chúng ta gọi hàmWaitForSingleObject, chỉ định thông số event handle và giá trị time-out là INFINITE.Giá trị event callback là giá trị dùng gọi hàm callback.

Bởi vì event callback không xác định được thông báo xác định close, done hayopen. Ứng dụng phải kiểm tra tình trạng của hệ thống đang chờ sự kiện gì xảy ra đểđưa ra các đáp ứng chính xác.

 Dùng window hay thread để xử lý các message driver Để dùng hàm window callback, chúng ta chỉ định thông số CALLBACK_ 

WINDOW trong biến fdwOpen và chỉ định handle của window trong thông sốdwCallback khi gọi hàm open thiết bị. Driver message sẽ được gửi tới window

 procedure.

Tương tự như vậy, chúngta sẽchỉ định thông số CALLBACK_THREAD vàthread handle trong hàm open khi chúng ta muốn thread xử lý các driver message.

 Ngoài cách thức dùng hàm callback, chúng ta có thể dựa vào thông số dwFlagstrong WAVEHDR để xác định xem thiết bị có hoàn tất việc xử lý khối dữ liệu haychưa.

Các hàm kiểm tra lỗiCác hàm waveform audio sẽ trả về giá trị khác 0 khi có lỗi xảy ra. Windows cung cấpcho chúng ta các hàm xác định lỗi dựa trên các thông số này. Ứng dụng sẽ dựa vàocác thông số xác định lỗi để quyết định công việc thực thi tiếp tục. Các hàm sau đượcdùng để xác định các lỗi xảy ra:

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 30/60

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

Hàm Chức năngWaveInGetErrorText Trả về chuỗi text xác định lỗi xảy ra của

input deviceWaveOutGetErrorText Trả về chuỗi text xác định lỗi xảy ra của

output device

IV.2 KỸ THUẬT TRUYỀN NHẬN ÂM THANH TRÊN MẠNG IPIV.2.1 MÔ HÌNH LIÊN KẾT VÀ TRAO ĐỔI DỮ LIỆU

Chương trình dùng giao thức TCP/IP làm giao thức giao tiếp. Việc thiết lậpliên kết cũng như trao đổi dữ liệu đều tuân theo các cấp của giao thức này. Việc gọi vàthiết lập liên kết được thực hiện theo mô hình client/server, việc trao đổi dữ liệu đượcthực hiện thông qua socket theo giao thức TCP.Có hai ý tưởng được đưa ra trong việc dùng socket để trao đổi dữ liệu.Dùng 1 socket :

Mỗi máy dùng một socket để truyền nhận dữ liệu. Theo giao thức TCP sau khihai socket connect được với nhau thì việc tiến hành trao đổi dữ liệu sẽ bắt đầu. Chúngta sẽ dùng cặp socket này. Như vậy, một socket trên một máy đồng thời đảm nhậnviệc truyền dữ liệu đi cũng như nhận dữ liệu về.[3]

 

Hình IV.1 Mô hình dùng 1 socket

Cách dùng này có đặc điểm là việc tạo liên kết đơn giản, quá trình tạo liên kếthoàn toàn giống như các bước trong việc tạo liên kết giữa các socket dùng giao thứcTCP. Chương trình chạy và lắng nghe ở một port xác định. Khi có một yêu cầu gọiliên kết đến, chương trình sẽ tạo ra một socket để nối kết với socket gọi. Sau khi thiết

lập liên kết thì các socket bắt đầu gửi nhận dữ liệu. Socket sẽ gửi dữ liệu âm thanh điđồng thời nhận dữ liệu truyền tới và chuyển cho hệ thống xử lý.Socket làm việc theo cách này sẽ nhận hai thông báo cùng một lúc. Khi có dữ

liệu từ mạng truyền tới, hệ thống sẽ thông báo cho socket để tiến hành việc nhận dữliệu. Cũng tương tự như vậy, khi có dữ liệu âm thanh sẵn sàng, hệ thống cũng sẽ gọisocket để truyền đi.

 Như vậy, khi thực thi socket sẽ nhận được hai thông báo của hệ thống. Vì việctruyền nhận dữ liệu âm thanh là dạng dữ liệu liên tục cho nên tần suất mà hệ thốngthông báo cho socket là rất thường xuyên. Vì vậy, socket trong cùng một lúc có thểnhận được cả hai yêu cầu truyền dữ liệu đi và nhận dữ liệu về. Thêm vào đó các hoạt

động truyền nhận dữ liệu là các hoạt động bị tắc nghẽn. Do đó chúng ta phải lưu ý đếnhiện tượng này, socket có thể đáp ứng không kịp nhu cầu của hệ thống.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

socket socket

 Yêu cầu

truyền dữ liệu

 Yêu cầunhận dữ liệu

socket

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 31/60

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

Chúng ta lấy một trường hợp ví dụ. Khi socket nhận được yêu cầu truyền dữliệu đi, nó sẽ lấy dữ liệu từ các buffer và truyền đi. Do quá trình truyền dữ liệu có thể

 bị tắc nghẽn, socket sẽ phải chờ. Đồng thời trong lúc này, nó lại nhận được tín hiệuthông báo có buffer kế tiếp cần truyền đi và tín hiệu thông báo có dữ liệu trên mạngtruyền về. Với các yêu cầu dồn dập như vậy, hệ thống có thể sẽ đáp ứng không kịp và

chương trình có thể bị treo.Vì vậy, khi dùng một socket để truyền nhận dữ liệu, chúng ta phải tính toán cân

đối thời gian giữa việc truyền dữ liệu đi và việc nhận dữ liệu về sao cho hợp lý để hệthống có thể làm việc liên tục được. Chúng ta có thể qui định thời gian cho việc truyềnnhận. Trong một thời điểm socket có thể chỉ làm việc truyền dữ liệu đi, các yêu cầunhận dữ liệu sẽ bị ngưng lại. Sau đó socket sẽ chỉ xử lý các yêu cầu nhận dữ liệu.Chiến lược này giúp giảm nhẹ hoạt động của socket. Tuy nhiên, chúng ta cần áp dụngcho cả hai socket liên kết. Trong một thời điểm, một socket sẽ truyền còn socket cònlại sẽ nhận dữ liệu, và thời điểm sau thì quá trình sẽ diễn ra theo chiều ngược lại.

Dùng 2 socket :Xuất phát từ ý tưởng trên, chúng ta có thể dùng hai socket trong việc trao đổi

dữ liệu. Một liên kết hình thành giữa hai máy sẽ gồm hai cặp socket liên kết với nhau.Một socket chỉ đảm nhận việc truyền dữ liệu trong khi socket còn lại đảm nhận việcnhận dữ liệu.[3]

 Hình IV.2 Mô hình dùng 2 socket

Vì mỗi socket chỉ nhận một tín hiệu nhất định. Socket truyền sẽ chỉ chú ý tớitín hiệu báo có dữ liệu của hệ thống để tiến hành truyền dữ liệu đi. Trong khi đó,socket nhận sẽ chỉ lưu ý đến tín hiệu báo có dữ liệu của hệ thống. Hai socket sẽ hoạtđộng độc lập với nhau và công việc của một socket sẽ nhẹ nhàng hơn mô hình trên.

Tuy nhiên, trong mô hình này, việc thiết lập liên kết giữa hai máy sẽ trở nên phức tạp hơn. Theo mô hình client/server, khi một socket gọi và thiết lập liên kết vớichương trình ở máy remote xong thì máy remote cũng phải tạo ra một socket và tiến

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Sockettruyền

Sockettruyền

Socketnhận

Socketnhận

 Yêu cầutruyềndữ liệu

 Yêu cầunhận

dữ liệu

Socket

truyền

Socket nhận

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 32/60

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

hành liên kết ngược lại. Sau khi cặp socket hoàn toàn liên kết xong thì hai máy mớicoi như đã connect và tiến hành truyền nhận dữ liệu.

Một khía cạnh khác cần lưu ý là tuy hai socket hoạt động độc lập với nhaunhưng chúng đều thuộc cùng một chương trình và chúng đều tiến hành việc gửi nhậndựa trên các giao thức lớp dưới chung. Do đó, trong một thời điểm chỉ có một hoạt

động diễn ra hoặc là truyền dữ liệu hoặc là nhận dữ liệu. Vì vậy thật ra hai socketcũng phải hoạt động phụ thuộc nhau. Socket gửi dữ liệu phải chờ socket nhận nhậnxong dữ liệu rồi mới bắt đầu truyền đi và ngược lại việc truyền dữ liệu phải được hoàntất thì việc nhận dữ liệu mới có thể tiến hành được.

Một vấn đề khác nẩy sinh do đặc điểm của dữ liệu. Dữ liệu tiếp nhận là dạngdữ liệu liên tục do đó, các tín hiệu mà hệ thống báo cho hai socket cũng xảy ra liêntục, vì vậy thực sự rằng tuy chỉ làm một công việc nhưng khối lượng công việc màsocket phải đảm nhận là rất lớn. Thêm vào đó, hai socket đều phụ thuộc vào một

 process do đó thật sự xét về mặt thực thi của quá trình thì khả năng giảm nhẹ côngviệc là không bao nhiêu. Và khả năng hệ thống bị treo do quá tải cũng vẫn có thể xảy

ra.Chúng ta có những cách giải quyết để giảm nhẹ việc thực thi của chương trình

như dùng cơ chế xử lý song song (thread) hay dùng cơ chế phân chia thời gian cho cáchoạt động như đã nói ở trên.

IV.2.2 CƠ CHẾ GỌI VÀ XÁC LẬP LIÊN KẾTKhi liên kết được xác lập, chúng ta sẽ bắt đầu tiến hành trao đổi dữ liệu. Tuy

nhiên trước hết chúng ta cần khảo sát phương pháp gọi cũng như thiết lập liên kết.Chương trình được hiện thực dựa trên cơ chế client/server cho nên việc tạo liên kếtcũng dựa trên cơ chế này. Ý tưởng chính là: khi chương trình bắt đầu thực thi, nó cũng

 bắt đầu lắng nghe lời gọi liên kết ở một port xác định. Thực sự, trong chương trìnhchúng ta sẽ tạo ra một socket server và lắng nghe ở một port qui ước trước. Khi mộtsocket khác muốn tạo liên kết, nó sẽ tiến hành gọi liên kết với socket server ở giá trị

 port này.[3]Trong giao thức TCP/IP, một quá trình giao tiếp thông qua môi trường mạng

 phải có một chỉ số port xác định. Các quá trình khác nhau phải có port khác nhau. Khithiết kế mô hình client/server, các nhà thiết kế đã tạo ra một số dịch vụ thông dụngtrên mạng như: finger, echo, mail, ftp . . . Các server của các dịch vụ này được dànhsẵn các port xác định mà không một quá trình nào được phép sử dụng. Các port nàyđược gọi là well-known port và do hệ thống cấp phát và quản lý. Thông thường, các

chỉ số well-known port có giá trị từ 0 đến 1023. Các ứng dụng không được phép sửdụng giá trị port trong khoảng này. Ứng dụng có thể dùng các giá trị port từ 1024 trở đi. Ví dụ: khi chúng ta cần tạo một socket mà không cần quan tâm đến giá trị port,chúng ta có thể nhờ hệ thống cấp cho một giá trị port còn trống. Thông thường các giátrị port mà hệ thông cung cấp cho ứng dụng khi có yêu cầu nằm trong khoảng từ 1024đến 5000. Còn khi chúng ta muốn chỉ định một giá trị port cho socket, chúng ta sẽ cóthể chọn giá trị từ 5000 trở đi. Vì trong vùng này xác suất mà port đó đã bị chiếm làrất hiếm.

Vì vậy, khi thiết kế chúng ta muốn tạo một port cố định thì nên chọn socketlắng nghe ở một port có giá trị lớn hơn 5000. Giá trị được chọn là 7699 nhưng môhình của chúng ta là : trong một chương trình vừa có đóng vai trò là client vừa làserver nên ta chọn port có thể thay đổi được trong khoảng từ 1024 đến 5000.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 33/60

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

Khi muốn tạo liên kết, chúng ta sẽ tạo một socket và tiến hành connect vàosocket đang lắng nghe ở một địa chỉ và port lắng nghe. Khi socket listen nhận thấy cóyêu cầu liên kết, nó sẽ thông báo cho người sử dụng biết. Nếu nguời sử dụng đồng ýthì nó sẽ tiến hành connect và việc trao đồi dữ liệu bắt đầu. Nếu người sử dụng từ chốithì ứng dụng sẽ thông báo cho phía gọi lời từ chối và đóng liên kết lại.

Chúng ta nói thêm về địa chỉ khi liên kết. Do chương trình hiện thực trên môitrường mạng Windows là môi trường mạng workgroup. Mỗi máy được xem như mộthost riêng lẻ. Nếu trên mạng không có các server như server novell hay server NT thìchúng ta không thể biết được các thông tin về một máy remote nếu chúng ta không tạoliên kết với máy đó. Vì vậy, trong cơ chế liên kết, chúng ta chọn việc định địa chỉ đểliên kết. Một máy muốn thiết lập liên kết với một máy khác thì phải nhập thông số làđịa chỉ IP của máy đó.

IV.2.3 CƠ CHẾ TRUYỀN NHẬN DỮ LIỆUKhi viết một ứng dụng trên môi trường Windows, chúng ta phải lưu ý đến đặc

điểm của môi trường Windows là môi trường có kiến trúc message-driven. Windowsđược xem là một môi trường có kiến trúc message-driven hay event-driven vì khôngmột chương trình nào trên windows có thể thực thi nếu không có một Thông báo haymột sự kiện kích khởi nó. Trong môi trường Windows luôn tồn tại một vòng lặpmessage loop. Vòng message loop này sẽ truy xuất các Thông báo từ các hàng chờ của các chương trình và tùy theo loại Thông báo hay sự kiện, nó cho phép window

 procedure tương ứng thực thi. Vì vậy trên môi trường Windows có thể tồn tại nhiềuứng dụng cùng một lúc mỗi ứng dụng có một hàng chờ Thông báo riêng. Khi có mộtsự kiện xảy ra, hệ thống sẽ xác định xem sự kiện đó tuơng ứng với ứng dụng nào vàchuyển Thông báo đến hàng chờ của ứng dụng tương ứng đó. Tùy theo loại Thông

 báo mà ứng dụng sẽ gọi chương trình tương ứng thực thi.Môi trường windows 16 bits là môi trường nonpreemptive, có nghĩa là khi một

ứng dụng đang xử lý một Thông báo thì không một ứng dụng nào có thể thực thiđược. Phải chờ cho đến khi procedure của ứng dụng tiến hành xong công việc và trảvề thì lúc đó procedure tương ứng với Thông báo tiếp theo trong hàng chờ mới đượcthực thi. Trong khi đó các môi trường Win32 như Windows98, WindowsNT lại thựcthi theo cơ chế preemptive. Trong môi trường này, việc procedure nào được thực thi làdo hệ thống quyết định. Thật ra, trong môi trường Win32, hệ thống định thời cho cácthread thực thi. Thread chính là đoạn mã thực thi của một chương trình nên cácchương trình đều có cơ hội thực thi.

Khi winsock được thiết kế lần đầu tiên, các mô hình thiết kế được làm cho phùhợp với cơ chế “ message-driven” và “ nonpreemptive” của Windows 16bits. Một sốhàm socket nguyên thủy khi thực thi cần một khoảng thời gian tương đối. Khi hàmthực thi rơi vào tình trạng này, nó được gọi là bị tắc nghẽn. Khi một hàm bị tắc nghẽn,nó sẽ ngăn trở việc thực thi của các hàm khác trong hệ thống. Trong hệ thống UNIX,môi trường mà socket được thiết kế đầu tiên, các hàm blocking này không gây trở ngại cho hệ thống vì hệ thống sẽ chiếm giữ các quá trình bị blocking và cho phép cácquá trình khác thực thi.

Trong khi đó, hệ thống Windows 16 bits không có khả năng chiếm giữ các quátrình blocking. Dẫn đến việc hệ thống không tiếp tục thực thi được vì các quá trìnhkhác không có cơ hội thực thi. Hệ thống phải chờ cho đến khi quá trình blocking hoàntất công việc thì mới tiếp tục thực thi được. Khi thiết kế winsock, các nhà thiết kế đã

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 34/60

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

tính đến khả năng này. Vì vậy họ có một giải pháp là đưa một đoạn mã đặc biệt vàohàm blocking để cho phép các quá trình khác kiểm tra được hàng chờ Thông báo củamình. Tuy nhiên đây không phải là một giải thuật hiệu quả.

Trong hệ thống socket của Berkeley các nhà nghiên cứu cũng đã lưu ý đến vấnđề này khi thiết kế, và họ đã thiết kế các hàm nonblocking bên cạnh các hàm blocking.

Chúng ta xét một ví dụ là hàm send() của socket. Khi hoạt động ở chế độ blocking,hàm send() sẽ gửi dữ liệu đi, hàm sẽ bị tắc nghẽn và nó chỉ trả về khi hoàn tất việctruyền dữ liệu, tức là dữ liệu đã được nhận hoàn toàn. Còn nếu socket được tạo ra ở cơ chế bất đồng bộ, hàm send() sẽ hoạt động ở chế độ non-blocking. Hàm send() sau khigửi dữ liệu đi sẽ trả về ngay lập tức. Và hệ thống sẽ phải gọi một hàm khác nhưselect() để quan sát tình trạng của việc gửi dữ liệu. Trên môi trường Windows chúngta cũng có thể sử dụng các hàm non-blocking. Tuy nhiên các nhà thiết kế winsock cònđưa ra các hàm bất đồng bộ.[3]

Các hàm bất đồng bộ được đưa ra dựa trên cơ chế hoạt động message-drivencủa môi trường Windows. Chúng ta lấy ví dụ là các hàm gửi nhận dữ liệu. Việc gửi dữ

liệu không nhất thiết phải diễn ra ngay lập tức, và việc nhận dữ liệu sẽ bắt buộcchương trình phải chờ trừ phi nó nhận được một hằng đặc biệt. Bằng cách tạo socket ở chế độ non-blocking để dùng các hàm non-blocking và kết hợp với hàmWSAAssyncSelect(), ứng dụng sẽ nhận được các message thông báo sự kiện để báocho chương trình biết khi nào chương trình có thể gửi dữ liệu đi hoặc đã có dữ liệutruyền đến cần đọc ra từ socket. Trong các khoảng thời gian còn lại, khi không cóthông báo các phần khác của hệ thống có thể thực thi được.

Các hàm bất đồng bộ rất phù hợp cho các hoạt động diễn ra trên môi trườngWindows 16 bits là môi trường nonpreemptive. Trong môi trường Win32 nhưWindows NT hay Windows98 là môi trường preemptive các hàm blocking vẫn có thể

sử dụng được. Tuy nhiên việc dùng các hàm bất đồng bộ trên môi trường Win32 giúpchương trình đáp ứng tốt hơn cho việc tương tác với người sử dụng. Một hàm

 blocking sẽ ngăn trở hệ thống đáp ứng kịp thời cho các thao tác của người sử dụng.Điều này rất quan trọng trên một môi trường giao diện như Windows. Vì vậy các hàm

 bất đồng bộ vẫn được sử dụng.Vì môi trường Windows98 có hỗ trợ cơ chế lập trình song song thông qua việc

định thời thực thi cho các thread, do đó trong việc thiết kế, chúng ta chọn dùng cơ chế blocking và thực hiện việc lập trình socket bằng các đối tượng do MFC cung cấp làcác lớp CAsyncSocket, CSocket, CSocketFile, CArchive. Việc chọn lập trình bằngcông cụ này vì có nhữnh đặc điểm sau:

Các lớp đối tượng đều do MFC hỗ trợ, phù hợp với cấu trúc chương trình đượcxây dựng dựa trên các lớp đối tượng MFC. Ứng dụng được xây dựng trên các lớp đốitượng MFC bằng các công cụ AppWizard, ClassWizard. Việc viết ứng dụng sẽ dễdàng và đơn giản hơn. Và khi ứng dụng có hỗ trợ socket thông qua các lớp đối tượngsocket của MFC ở trên, việc lập trình sẽ trở nên tiên lợi hơn.

Việc lập trình socket trên các lớp đối tượng thường dễ dàng và đơn giản hơn sovới việc lập trình bằng các hàm socket nguyên thủy được hỗ trợ bởi Windows SDK.Chúng ta lấy một ví dụ như sau: tạo một socket và lắng nghe ở một port xác định.[6]

Lập trình bằng công cụ do Windows SDK hỗ trợ:

// Tạo Socket

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 35/60

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

SOCKET hSocket = socket ( int af = PF_INET, int type = SOCK_STREAM,int protocol = 0);// Ràng buộc socket vào một port cố định

SOCKADDR_IN sin;

u_short alport = IPPORT_RESERVED;sin.sin_family = AF_INET;sin.sin_addr.s_addr = 0;for (;;) {

sin.sin_port = htons(alport);if (bind(hSocket, (LPSOCKADDR)&sin, sizeof (sin)) == 0){/* it worked */}if ( GetLastError != WSAEADDRINUSE) {/* fail */

}alport--;if (alport == IPPORT_RESERVED/2 ){/* fail--all unassigned reserved ports are *//* in use. */

}}

// Lắng nghe lời gọi liên kếtint listen ( hSocket, int backlog = 5 );

Trong khi đó nếu chúng ta lập trình bằng các lớp socket do MFC hỗ trợ thì cáccông việc phải thực thi như sau:

// Tạo lớp đối tượng

CSocket* m_pSocket = new CSocket;

// Tạo socket và ràng buộc vào một port xác định

m_pSocket->Create(nPort);

// Lắng nghe lời gọi liên kết

m_pSocket->Listen();

Khi lập trình chúng ta chọn các hàm blocking vì chúng được hỗ trợ bởi công cụlập trình serialize. Cơ chế serialize cho phép hệ thống đảm bảo việc truyền nhận dữliệu trên socket. Việc lập trình socket thông qua cơ chế serialize cũng đơn giản và dễdàng hơn. Vì chương trình được hiện thực trên môi trường Windows98 cho nên chúng

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 36/60

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

ta sẽ thực thi vào các hàm truyền nhận của socket. Vì vậy các hàm blocking cũngkhông ảnh hưởng nhiều đến việc thực thi của chương trình cũng như trong toàn hệthống.

 Ngoài ra việc dùng cơ chế Serialize (Serialization là một quá trình đọc một đốitượng dữ liệu từ đĩa hay ngược lại, ghi chúng lên dĩa. MFC hỗ trợ cơ chế serialization

trong class object vì vậy bất cứ đối tượng nào dẫn xuất từ object đều thừa hưởng cơ chế serialization) cũng đồng nghĩa với việc chúng ta dùng giao thức TCP trong việctruyền nhận dữ liệu. Việc dùng giao thức này giúp quá trình trao đổi dữ liệu được diễnra tin cậy hơn. Dĩ nhiên phí tổn hệ thống phải bỏ ra cũng cao hơn.

CHƯƠNG V

THIẾT KẾ CHƯƠNG TRÌNHTRUYỀN ÂM THANH TRÊN MẠNG LAN

V.1 MÔI TRƯỜNG VÀ CÔNG CỤ LẬP TRÌNHV.1.1 MÔI TRƯỜNG WINDOWS

Hệ điều hành Windows là hệ điều hành đa nhiệm , tức là nhiều chương trình cóthể chạy một lúc. Trong môi trường đa nhiệm, chương trình có thể chia làm nhiều

 phần nhỏ gọi là các nhánh(thread) chạy đồng thời với nhau. Một chương trình khichạy bao giờ cũng có một nhánh chính, sau đó chương trình có thể tạo ra các nhánhcon bằng cách gọi đến các hàm CreateThread. Hệ điều hành sẽ làm nhiệm vụ điềukhiển các nhánh này. Windows cho phép đặt các mức ưu tiên cho các nhánh. Nhánhluôn được khởi tạo ở mức ưu tiên bình thường, chương trình có thể thay đổi các mứcưu tiên của các nhánh bằng cách dùng hàm SetThreadPriority tuỳ theo mức yêu cầu.Có các mức ưu tiên sau đây :

IdleBelow Normal

 NormalAbove NormalHighReadtime

Mức ưu tiên dành cho các ứng dụng chỉ hoạt động khi hệ thống rỗi, mức cuốicùng dành cho các ứng dụng đòi hỏi thời gian thực.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 37/60

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

IV.1.2 CÔNG CỤ LẬP TRÌNHDo đặc điểm của chương trình là truyền nhậnh âm thanh trên mạng. Do đó lập

trình liên qua rất nhiều đến winsock. Hiện nay có rất nhiều ngôn ngữ hỗ trợ cho việclập trình trên mạng. Qua tìm hiểu em thấy rằng ngôn ngữ Visual C++ 6.0 có những

hàm WinSock và những cấu trúc được khai báo trong WINSOCK.H cho cả môitrường 16 cũng như 32 bit. Những hàm Winsock được hiện thực trongWINSOCK.DLL (hay WSOCK32.DLL ứng với bản 32 bit). Chương trình ứng dụngsẽ được link với WINSOCK.LIB (hay WSOCK32.LIB). Chính vì vậy rất thích hợpcho lập trình các ứng dụng trên mạng.

Các Hàm TCP/IPSau đây là ý nghĩa chi tiết các tham số của các hàm TCP/IP. Để sử dụng các

hàm này, trong chương trình cần có chỉ thị [6] :# include < winsock.h >

Hàm accept :·Cú pháp:SOCKET PASCAL FAR accept (SOCKET s,struct sockaddr FAR * addr,int FAR &addrlen);·Chức năng :Xác nhận mối nối của client. Nếu thành công, sẽ trả về socket được nối vào, ngược lại

trả về giá trị INVALID_SOCKET. Ý nghĩa các tham số :

Tham số Ý nghĩaS Socket đang chờ client nối vào

Addr Bộ đệm nhận về địa chỉ client nối vàoAddrlen Chiều dài của địa chỉ trả về trong addr 

Hàm bind :·Cú pháp:int PASCAL FAR bind (

SOCKET s,const struct sockaddr FAR * name,int namelen);

·Chức năng :Kết buộc socket với port, đối với mỗi nghi thức ứng dụng chuẩn thì sẽ có một hằng sốđịnh nghĩa sẵn trong winsock cho port của nghi thức đó. Nếu thành công trả về 0,ngược lại trả về trị SOCKET_ERROR. Ý nghĩa các tham số :

Tham số Ý nghĩa

S Socket đang chờ kết buộc Name Địa chỉ port mà socket sẽ được kết buộc Namelen Chiều dài của tham số name

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 38/60

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

Hàm closesocket :·Cú pháp:int PASCAL FAR closesocket ( SOCKET s);·Chức năng :

Sau khi hoàn tất quá trình trao đổi dữ liệu, ứng dụng gọi hàm closesocket để đóngsocket đã tạo.

Hàm connect :·Cú pháp:

int PASCAL FAR connect (SOCKET s,const struct sockaddr FAR * name,int namelen);

·Chức năng :

Gọi hàm connect để nối client vào server. Nếu thành công trả về 0, ngược lại trả vềgiá trị SOCKET_ERROR. Ý nghĩa các tham số :

Tham số Ý nghĩas Socket đang chờ được nối với server  

 Name Địa chỉ server sẽ nối Namelen Chiều dài của tham số name

Hàm inet_ntoa :·Cú pháp:

char FAR* PASCAL FAR inet_ntoa (struct in_addr iadddr );·Chức năng :

 Nhận vào một địa chỉ internet iaddr và đổi thành địa chỉ internet dưới dạng chuỗi.

Hàm listen :·Cú pháp:

int PASCAL FAR listen (SOCKET s,int backlog);

·Chức năng :Tạo một hàng đợi tối đa backlog client trên port chờ được kết buộc với socket s.

Hàm recv :·Cú pháp:int PASCAL FAR revc (

SOCKET s,char FAR* buf,int len,int flags);

·Chức năng : Nhận dữ liệu từ socket. Sử dụng cho nghi thức TCP. Ý nghĩa các tham số :

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 39/60

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

Tham số Ý nghĩas Socket để nhận dữ liệu

 buf Bộ đệm chứa dữ liệu đọc đượclen Kích thước bộ đệm

flags Cách thực hiện thao tác

Hàm recvfrom :·Cú pháp:int PASCAL FAR recvfrom(

SOCKET s,char FAR* buf,int len,int flags,struct sockaddr* from,int fromlen);

·Chức năng : Nhận dữ liệu từ socket UDP, xác định địa chỉ của socket đã gửi dữ liệu. Ý nghĩa cáctham số :

Tham số Ý nghĩas Socket để nhận dữ liệu

 buf Bộ đệm chứa dữ liệu đọc đượclen Kích thước bộ đệm

flags Cách thực hiện thao tác, nhận giá trị

MSG_PEEK hay MSG_OOBfrom Địa chỉ nơi dữ liệu được gửi đifromlen Chiều dài của fromlen

Hàm send :·Cú pháp:

int PASCAL FAR send (SOCKET s,const char FAR* buf,int len,

int flags);·Chức năng :Gửi dữ liệu qua socket. Sử dụng cho nghi thức TCP .Ý nghĩa các tham số:

Tham số Ý nghĩaS Socket để gửi dữ liệu

Buf Bộ đệm chứa dữ liệu sẽ truyềnLen Kích thước bộ đệm

Flags Cach thực hiện thao tác

Hàm sendto :·Cú pháp:

int PASCAL FAR sendto (Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 40/60

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

SOCKET s,const char FAR* buf,int len,int flags,

const struct sockaddr *to,

int tolen);·Chức năng :Gửi dữ liệu đến một socket xác định. Sử dụng cho nghi thức UDP.Ý nghĩa các thamsố:

Tham số Ý nghĩas Socket để gửi dữ liệu

 buf Bộ đệm chứa dữ liệu sẽ truyềnlen Kích thước bộ đệm

Flags Cách thực hiện thao tácto Địa chỉ máy phải gửi dữ liệu

Tolen Chiều dài của tolen

Hàm setsockopt :·Cú pháp:

int PASCAL FAR setsockopt (SOCKET s,int level,int optname);const char FAR* optval,int optlen);

·Chức năng :Đặt các thuộc tính tùy chọn cho socket.Ý nghĩa các tham số như sau:

Tham số Ý nghĩas Socket cần được đặt thuộc tính

level Mức định nghĩa thuộc tính, chỉ có thể nhận giá trịSOL_SOCKET hay IPPROTO_TCP

optname Tên option muốn đặt, một số giá trị thông dụng :-SO_BROADCAST: Cho phép truyền thông

 broadcast trên socket.-SO_LINGER : Chờ trước khi đóng socket nếucòn dữ liệu chưa gửi.

Optval Bộ đệm chứa giá trị sẽ gán cho option, có thể làBOOL hay struct, int tùy thuộc vào optname cụthể

Optlen Chiều dài của optlen

Hàm socket :·Cú pháp:

SOCKET PASCAL FAR socket (int addr,int type,

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 41/60

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

int protocol);·Chức năng :Tạo một socket và trả về handle của socket nếu thành công, trường hợp có lỗi trả vềgiá trị INVALID_SOCKET.Ý nghĩa các tham số như sau:

Tham số Ý nghĩaaddr Đặc tả dạng lưu trữ địa chỉ, hiện nay chỉ có thể nhận giá trị

AF_INET cho Internettype Qui định lựa chọn TCP hay UDP

SOCKET_STREAM: ứng với TCP SOCKET_DGRAM : ứng với UDP

Protocol Qui định nghi thức đặc biệt được dùng với socket, nhận giá trị0 nếu không muốn sử dụng một nghi thức đặc biệt

Hàm WSAStartup :·Cú pháp:

int PASCAL FAR WSAStartup(WORD version,LPWSADATA lpWSAData);

·Chức năng :Đây là hàm phải gọi đầu tiên khi sử dụng socket. Hàm có nhiệm vụ khởi tạo thư việnliên kết động Windows socket DLL.Ý nghĩa các tham số như sau :

Tham số Ý nghĩaversion Version cao nhất của Windows sockets API có

thể sử dụngLpWSAData Chỉ đến cấu trúc WSADATA nhận về chi tiết

thực hiện của Windows Socket

Hàm WSACleanup :·Cú pháp:

int PASCAL FAR WSACleanup(void);·Chức năng :Khi chấm dứt sử dụng các hàm socket phải gọi WSACleanup để đóng thư viện liên

kết động Windows Socket DLL.V.2 THIẾT KẾ CHƯƠNG TRÌNH CPHONE

Từ những lý thuyết ở trên em xin xây dựng chương trình CPhone với mục đíchchính là truyền âm thanh trên mạng LAN như sau :

Công nghệ điện thoại ngày nay tuy phát triển mạnh và có nhiều phương phápnén tín hiệu âm thanh có hiệu quả. Nhưng ở Việt Nam hiện nay mới chỉ bắt đầu đưavào sử dụng. Trong điều kiện thời gian và trình độ có hạn nên đồ án này không thểđưa ra một mô hình điện thoại Internet hoàn chỉnh với đầy đủ các phương pháp néntiếng nói hiệu quả mà chỉ đưa ra mô hình truyền nhận tiếng nói đơn giản nhất giữa hai

thực thể máy tính.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 42/60

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

V.2.1 MÔ HÌNH TRUYỀN ÂM THANH PC – PC TRÊN MẠNGViệc xậy dựng một hệ thống sử dụng công nghệ điện thoại Internet theo mô

hình thứ 2 và thứ 3 đã trình bầy trong phần mở đầu đòi hỏi quá trình nghiên cứu vàthiết bị kỹ càng, đầu tư công nghệ, vốn thích đáng mới có thể thực hiện được. Trongđồ án này thực hiện theo mô hình thứ nhất là PC – PC, nó đơn giản hơn và không cầu

đầu tư thiết bị mới, có thể tận dụng được các thiết bị có sẵn, có thể thiết kế. Thửnghiệm hoàn chỉnh trong phạm vì đồ án tốt nghiệp.

Mô hình PC – PC thức hiện hầu hết các thao tác bằng phần mềm, 2 máy tínhchạy cùng một phần mềm như vậy có thể dễ dàng mở rộng dần từng bước, có thể thửnghiệm trên mạng LAN, sau đó có thể thử nghiệm trên mạng Internet.Các bước cơ bản cho mô hình PC – PC gồm :

- ¢m thanh anolog từ microphone được chuyển thành digital tạisoundcard(PCM,8kHz,8bits/mẫu).

- Các mẫu được sao chép vào vùng đệm thành các khối có độ lớn nhất định.- Dùng các thuật nén PCM để nén các khối đó.

- Thêm vào khối đã nến các thông tin khác- Gửi khối dữ liệu sau khi dòng goi đó qua socket(TCP/UDP)- Gói tín được truyền qua mạng vật lý đến đầu kia- Loại bỏ các thông tin thêm vào, giải nén các khối dữ liệu đó, ghi khối dữ

liệu âm thanh được giải mã vào vùng đệm- Chép các mẫu trên vào vùng đệm của soundcard- Soundcard chuyển đổi các mẫu đó thành âm thanh.

V.2.2 XÂY DỰNG MÔ HÌNH CPHONEPhần này trình bầy mô hình ứng dụng truyền âm thanh thoại cho phép trao đổi

âm thanh trên mạng LAN, gọi tên là CPhone.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 43/60

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

Hinh V.1 Cấu trúc của mô hình CPhone

Mô hình này gồm các yếu tố chính như sau:- Thiết bị ngoại vi và các kết nối vật lý (Physical transport) : Một số các thiết

 bị ngoại vi cần thiết như : micro, loa, sound card. Các thiết bị này đảm nhậnviệc thu , một phần của quá trình xử lý tiếng nói và phát tiếng nói. Các kết

nối vật lý cung cấp phương tiện trên đó các bit dữ liệu được truyền. Kết nối

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 44/60

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

vật lý CPhone trong mạng LAN, WAN, Internet có thể là cáp đồng trục, cápquang, đường điện thoại v.v...

- Giao thức liên lạc (TCP/IP) : Gồm một số các qui luật và nguyên tắc mà cácthiết bị trên mạng có thể liên lạc và làm việc với nhau. Giao thức sử dụngcác kết nối vật lý của mạng để truyền dữ liệu. Hệ thống CPhone sử dụng

giao thức TCP/IP.- Hệ thống phần mềm : Phạm vị nghiên cứu của đồ án này thì chương trình

được thiết kế có cấu hình tối thiểu là chỉ 2 máy tính cùng chạy một chươngtrình kết nối với nhau qua mạng. Tín hiệu âm thanh từ Microphone quasoundcard được mã hoá bằng phương pháp PCM,8kHz, 8bits/mẫu, đượcchia nhỏ thành từng đoạn có độ dài nhất định(frame), các frame này đượcmã hoá theo các thuật toán, cuối cùng gửi gói dữ liệu đã mã hoá đến socketcủa mạng và truyền gói này đến nơi nhận.

Theo các mô hình đưa ra ở trên và phạm vị nghiên cứu của đồ án này thìchương trình được thiết kế có cấu hình tối thiểu là chỉ 2 máy tính cùng chạy một

chương trình kết nối với nhau qua mạng. Tín hiệu âm thanh từ Microphone quasoundcard được mã hoá bằng phương pháp PCM,8kHz, 8bits/mẫu, được chia nhỏthành từng đoạn có độ dài nhất định(frame), các frame này được mã hoá theo cácthuật toán, cuối cùng gửi gói dữ liệu đã mã hoá đến socket của mạng và truyền gói nàyđến nơi nhận.

Có thể chia thành 3 modul chính :Modul xử lý âm thanhModul mã hoá(giải mã) âm thanhModul truyền nhận âm thanh.

Hình V.2 Các modul của chương trình CPhone

Khi chương trình này đưa vào thực tế sẽ góp phần vào giải quyết các công việcgiữa các phòng ban trong cơ quan được nhanh chóng và thuận tiện. Mục đích cuốicùng mà chương trình có thể thực hiện được là có thể trực tiếp nói truyện với nhautrong mạng LAN của cơ quan hay công ty nào đó...

V.2.3 MODUL THU VÀ PHÁT ÂM THANHModul xử lý âm thanh làm nhiệm vụ giao tiếp với soundcard, ghi vào bộ nhớ 

và truyền cho modul II để mã hoá, đồng thời nhận các mẫu đã giải mã ở modul II đểđưa ra soundcard trong quá trình nhận.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Modul xử lý âmthanh

Modul mãhoá

(giải mã)

Modultruyềnnhận

Mẫu tiếngnói thu đượ c

Gói dữ liệu

sau khi mãhoá

Mẫu tiếngnói đã giảimã

Gói dữ liệunhận từ remote

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 45/60

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

Quá trình thu và phát tiếng nói thông qua vùng đệm (buffer), có 2 loại vùngđệm trong Direct sound : Primary buffer và Secondary buffer. Primary buffer chứatiếng nói mà người nghe sẽ nghe thấy. Chỉ có duy nhất một Primary buffer và buffer này do DirectSound tạo ra, secondary buffer chứa tiếng nói hoặc đoạn tiếng cần đưara. Chương trình có thể tạo ra một hoặc nhiều Secondary buffer. Khi phát tiếng nói

trong secondary buffer, DerectSound sẽ chuyển tiếng nói sang Primary buffer và đưara soundcard. Chương trình ứng dụng có thể dùng DirectSoundCapture để ghi tiếngnói vào một Capturebuffer. Cũng như khi phát tiếng nói, chương trình có thể báo contrỏ đến một vị trí nào đó và khi nó đến cuối của buffer thì nó tự động quay lại vị tríđầu của buffer.

Khi thao tác với các buffer, DirectSound cho phép khó một phần của buffer lạiđể đảm bảo không bị ghi đè lên phần này.

Modul thu và phát tiếng nói nằm trong cùng một Record thread. Thread có mứcưu tiên cao nhất. Mỗi khi có một dòng thông báo từ DirectSound gửi đến tức là khicon trỏ Capture buffer đi đến vị trí quy định trước thì thread này sẽ được gọi đến. Lúc

này, modul thu tiếng nói sẽ khoá phần Capture buffer vừa ghi xong. Néu trong buffer của modul phát tiếng nói có tín hiệu tiếng nói thì sẽ chép vào Secondary buffer củaDirectSound.

Lưu đồ của modul thu và phát tiếng nói như sau :

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 46/60

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

Hình V.3 Lưu đồ của modul thu và phát tiếng nói 

V.2.4 MODUL MÃ HOÁ VÀ GIẢI MÃ ÂM THANHModul mã hoá được kích hoạt sau khi modul VAD xác định tín hiệu âm thanh

có chức tiếng nói. Công việc của modul mã hoá gọi đến các thủ tục mã hoá tiếngnói(GSM,LPC…). Sau đó, chuyển dữ liệu đã mã hoá vào Send buffer tồi kích hoạtmodul truyền. Modul nhận nằm trong thread mã hoá, có mức ưu tiên bình thường.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Bắt đầu

Khoábuffer

DirectSound

Chép tín hiệu âm thanhvừa lấy mẫu vào Recordbuffer

Playbuffer

có dữ liệu

Chép play buffervào Secondarybuffer

Mở khoá

buffer DirectSound

Kích hoạtmodul mã 

hoá

K ết thúc

đúng

sai

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 47/60

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

Sau đây là lưu đồ giải thuật modul mã hoá :

Hình V.4 Lưu đồ giải thuật modul mã hoá

Modul giải mã tiếng nói được kích hoạt sau khi modul nhận được dữ liệu từmáy ở xa. Loại bỏ Header, các dữ liệu thừa và đưa vào trong buffer nhận. Modul giảimã sẽ xá định phương pháp giải mã tương ứng với phương pháp mã hoá được sử dụngở bên truyền. Sau đó chuyển dữ liệu đã mã hoá vào buffer phát tiếng nói.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Bắt đầu

K ếtthúc

Lấy một khung tiếngnói từ Record buffer

Playbuffercó dữ liệu

Mã hoá theo

phươ ng pháp PCM

Chép khung tiếng nói đãmã hoá vào Sendbuffer

Kích hoạtmodultruyền

đúng

sai

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 48/60

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

Lưu đồ giải thuật modul giải mã như sau :

 Hình V.5 Lưu đồ giải thuật modul mã hoá

V.2.5 MODUL TRUYỀN, NHẬN ÂM THANHModul này có nhiệm vụ giao tiếng giữa máy tính với mạng IP. Sử dụng giao

thức TCP/IP.Khi buffer truyền có dữ liệu cần truyền đi, modul truyền sẽ kích hoạt . dữ liệu

cần truyền sẽ có thêm các header và các thông tin cần thiết khác. Modul truyền cómức ưu tiên bình thường.

Khi có dữ liệu đến, winsock sẽ gửi thông báo đến chương trình, chương trìnhnhận được thông báo và kích hoạt modul nhận. Modul nàu có nhiệm vụ nhận dữ liệu,kiểm tra, loại bỏ dữ liệu thừa cùng với header. Sau khi chuyển dữ liệu vào buffer nhậnvà kích hoạt modul giải mã.

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Bắt đầu

K ếtthúc

Lấy một khung tiếngnói từ buffer nhận

Buffernhận códữ liệu

Mã hoá theophươ ng pháp PCM

Chép khung tiếng nóivào buffer phát

đúng

sai

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 49/60

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

Lưu đồ giải thuật của modul truyền và nhận :

Hình V. 6 Lưu đồ giải thuật modul truyền

 

Hình V.7 Lưu đồ giải thuật modul nhận

V.3 THIẾT KẾ GIAO DIỆN CHƯƠNG TRÌNH CPHONEChương trình thực hiện với điều kiện hai máy đàm thoại phải cùng chạy

chương trình ứng dụng này.Giao diện chính của chương trình :

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

Bắt đầu

K ếtthúc

Lấy một khung tiếng

nói từ buffer truyền

Buffertruyền có

dữ liệu

 Truyền theo giaothức TCP

đúng

sai

Bắt đầu

K ếtthúc

Dùng giaothức TCP

Lấy gói tin

đúng

sai

Kích hoạtmodul giải mã

Có goi tinchưa nhận

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 50/60

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

Hình V.8 Giao diện chương trình CPhoneKhi muốn bắt đầu cuộc đàm thoại, người sử dụng vào menu kết nối và click 

vào nhập IP. Điều này sẽ gọi hàm tạo kết nối giữa hai máy PC, hàm này hiển thị cửasổ yêu cầu người sử dụng nhập vào IP của máy cần kết nối. Sau khi đã nhập xongclick connect, một thông điệp yêu cầu kết nối sẽ gửi đến máy cần kết nối. 

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 51/60

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

 Hình V.9 Nhập địa chỉ IP

 Nếu không có tín hiệu thì chưa cho phép quá trình đàm thoại. Khi có tín hiệu phản hồi thì các hàm khởi động sound card, card mạng và socket được gọi và thựchiện cuốc đàm thoại.

Hình V.10 Cuộc đàm thoại đang được thực hiệnIV.4 KẾT QUẢ THỰC NGHIỆM&NHẬN XÉT ĐÁNH GIÁ CHƯƠNG TRÌNHIV.4.1 KẾT QUẢ THỰC NGHIỆM

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 52/60

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

Môi trường thử nghiệm đồ án này là mạng LAN, sử dụng công nghệ Ethernet10 Mbps. Hiện tại truyền dữ liệu giữa các máy tính trong mạng LAN còn rất ít, phầnlớn các tài nguyên về dải thông của mạng còn chưa sử dụng. Phần giải thông còn lạinày là rất lớn để truyền tín hiệu tiếng nói, cũng vì lý do này nên độ trễ point – to – 

 point trong mạng nhỏ và tương đối đồng đều (hầu hết < 10ms), giá trị này rất nhỏ so

với mức chấp nhận được là 200ms. Vì chất lượng của cuộc đàm thoại trong trườnghợp này hầu như chỉ phụ thuộc vào chất lượng của sound card.

IV.4.2 ĐÁNH GIÁ KẾT QUẢQua thử nghiệm, em thấy chất lượng tiếng nói đầu ra không có gì khác biệt so

với chất lượng tiếng nói đầu vào, chất lượng âm thanh sau khi truyền là có thể chấpnhận được. Như du sao đó chỉ là đánh giá qua cảm nhận của tai chúng ta mà thôi nênchưa thể khảng định được chất lượng tiếng nói sau khi truyền có đạt tiêu chuẩn cho

 phép hay không. Nếu sử dụng các máy đo các thông số liên quan đến chất lượng tiếngnói, phương pháp này đảm bảo đánh giá chính xác chất lượng tiếng nói trong điều

kiện chấp nhận được. Nhưng luận văn này mới chỉ dừng lại ở mức độ đồ án tốt nghiệpvà do điều kiện không cho phép nên chưa có thể có được các thiết bị đo các thông sốcủa tiếng nói. Vì vậy, chưa thể đánh giá chất lượng âm thanh một cách chính xácđược.

So với một số dịch vụ truyền âm thanh thoại hiện nay như : VoIP (dịch vụ 171) ,Internet Telephony thì chất lượng âm thanh tốt hơn. Vì mô hình Cphone chỉ ứngdụng trên mạng cục bộ nên tốc độ đường truyền rất cao, mặt khác khoảng cách rấtngắn. Tuy nhiên độ trễ còn rất lớn song với mạng cục bộ thì vấn đề này vẫn có thểchấp nhận được. Còn đối với các dịch vụ 171 hay Internet Telephony hiện nay thìchất lượng âm thanh giai đoạn đầu nói chung không đạt được mong muốn đối với

người sử dụng nhưng hiện tại chất lượng âm thanh đã được cải thiện đáng kể vàđặc biệt các ứng dụng này ngày càng được đưa vào phục vụ cuộc sống.

KẾT LUẬN

Đồ án tốt nghiệp đã hoàn thành các nhiệm vụ đề ra trong phạm vi cho phép. Do

điều kiện về thời gian cùng như trình độ còn hạn chế nên đồ án này dừng lại ở mứcnghiên cứu một số phương pháp mã hoá tiếng nói và một số giao thức truyền tín hiệu

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 53/60

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

trên mạng Internet như TCP/IP, UDP. Trên cơ sở đó xây dựng phần mềm thử nghiệmtruyền tiếng nói thoại trên mạng LAN.

Đồ án này của em sử dụng các hàm có sẵn trong môi trường SDK từ đó xâydựng ứng dụng CPhone có thể liên kết hai máy lại và thực hiện quá trình trao đổi âmthanh.

Phần thử nghiệm mới chỉ dừng lại ở việc xây dựng một ứng dụng truyền tiếngnói giữa 2 thực thể PC theo giao thức TCP/IP và tiếng nói mới chỉ được mã hoá theo

 phương pháp PCM nên tỷ số nén và tốc độ truyền chưa cao. Mặt khác, do mới chỉđánh giá được chất lượng tiếng nói theo phương pháp chủ quan nên chưa khảng địnhđược điều gì về độ trễ và chất lượng tiếng nói sau khi truyền. Thế nhưng những gì đạtđược trong đồ án này chủ yếu là nhằm giúp em có thể nắm bắt được vững hơn về mặtlý thuyết cũng như nắm quyền kiểm soát, quyền điều khiển ứng dụng trong thực tế,các kết quả này rất qua trọng và hữu ích cho mọi hoạt động nghiên cứu sau này cho dùnhững nội dung trong bài luận văn và phần thử nghiệm chưa được đầy đủ và hoànchỉnh như mong muốn.

Hiện nay, mô hình truyền tiếng nói trên mạng(VoIP) đang được nghiên cứu và phát triển mạng trên thế giới nói chung và nước ta nói riêng, nhưng đây vẫn là mộtvấn đề rất mới, đặc biệt hiện này đã ứng dụng được cho mạng Internet. Qua thửnghiệm cho thấy hướng nghiên cứu có thể tiếp tục nâng cấp để đưa vào sử dụng, trướctiên với mô hình nhỏ là dùng cho mạng cục bộ trong các phòng ban. Từ đó có thể pháttriển và đưa vào sử dụng trên diện rộng nhăm tăng chất lượng các cuộc đàm thoại,giảm giá thành cuộc gọi và để thương mại hoá sản phẩm. Về lâu dài thì có thể nghiêncứu, xây dựng các bộ giải mã cho ngôn ngữ tiếng việt; nghiên cứu ghép thêm cácmodul nhằm tạo các cuộc đàm thoại mật để đảm bảo an toàn cuộc gọi.

PHẦN PHỤ LỤC

Các từ viết tắt, ký hiệu :

AbS : Analysis by SynthesisADPCM : Adaptive Differential Pulse Code ModulationATC : Adaptive Transform CodingPABX : Private Automatic Branch eXchange

PCM : Pulse Code ModulationGMS : Global System for Mobile telecommucationsETSI : European Telecommunication Standards Institude

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 54/60

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

GSM : Global System for Mobile telecommunication protocolMCI : Media Control InterfaceTCP : Transmission Control ProtocolUDP : User Datagram ProtocolIP : Internet protocol

RIFF : Resource Interchange File FormatIMA : Interactive Multimedia AssociationICMP : Internet Control Message ProtocolLPC : Linear Prediction CodingOSI : Open System Interconnection

Chương trình nguồn :Đoạn chương trình thực hiên chức năng đợi (chạy nền)

UINT Server(LPVOID param){

const PORT=1967;

const NO_FLAGS_SET=0;const MAXBUFLEN=500;WSADATA Data;SOCKADDR_IN SvrAddr,CIntAddr;SOCKET SvrSock,CIntSock;int AddrLen=sizeof(SOCKADDR_IN);int status,nbyte,nbsend;char bufferrecv[MAXBUFLEN],buffersend[80];

//Khởi tạo Windows Socket DLLstatus=WSAStartup(MAKEWORD(1,1),&Data);if(status!=0){

MessageBox(NULL,"ERROR: WSAStartup unsuccessful.","WSAStartup error!",MB_ICONEXCLAMATION);

return(-1);

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 55/60

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

}memset(&SvrAddr,0,sizeof(SvrAddr));SvrAddr.sin_port=htons(PORT);SvrAddr.sin_family=AF_INET;SvrAddr.sin_addr.s_addr=htonl(INADDR_ANY);SvrSock=socket(AF_INET,SOCK_STREAM,0);

if(SvrSock==INVALID_SOCKET){

MessageBox(NULL,"ERROR: Socket unsuccessful.","Socket error !",MB_ICONEXCLAMATION);

WSACleanup();return(-1);

}//Kết buộc socket với PORT

 bind(SvrSock,(LPSOCKADDR)&SvrAddr,sizeof(SvrAddr));

//Chờ client nối vàolisten(SvrSock,1);//Xác nhận mối nối khi có client nối vàoCIntSock=accept(SvrSock,(LPSOCKADDR)&CIntAddr,&AddrLen);if(CIntSock==INVALID_SOCKET){

MessageBox(NULL,"ERROR: Connect unsuccessful.","Connect error !",MB_ICONEXCLAMATION);

closesocket(CIntSock);WSACleanup();return(-1);

}else

{nbyte=recv(CIntSock,bufferrecv,MAXBUFLEN,NO_FLAGS_SET);if((nbyte==0)||(nbyte==SOCKET_ERROR)){

MessageBox(NULL,"Please the end conversation !","Theconversation !",MB_ICONEXCLAMATION);closesocket(CIntSock);WSACleanup();return(-1);

}elseMessageBox(NULL,bufferrecv,"The coversation !",MB_ICONINFORMATION);

strcpy(buffersend,"Receivered the signal. Please begin the conversation.");nbsend=send(CIntSock,buffersend,strlen(buffersend)+1,NO_FLAGS_SET);if(nbsend!=(int)strlen(buffersend)+1)

{closesocket(CIntSock);WSACleanup();return(0);

}return(0);}

}

Đoạn mã thực hiện kết nối hai máy :// Tạm dừng trạng thái chờ SuspendThread(Server);

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 56/60

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

// Chuyển sang trạng thái gọim_DestAddrStr=dialog.m_DestAddrStr;if(m_DestAddrStr=="")

{MessageBox("ERROR: Hostname is unknown !","Error hostname !",

MB_ICONEXCLAMATION);

return(-1);}

const PORT=1967;const NO_FLAGS_SET=0;const MAXBUFLEN=256;WSADATA Data;SOCKADDR_IN SockAddr;unsigned long DestAddr;int status,nbyte,nbrecv;char SendBuf[50],RecvBuf[MAXBUFLEN];

 // Khởi tạo Windows Socket DLLstatus=WSAStartup(MAKEWORD(1,1),&Data);if(status!=0){MessageBox("ERROR :WSAStartup unsuccessf",

"Error WSAStarup !",MB_ICONEXCLAMATION);return(-1);}// Nhận địa chỉ internet, chuyển sang dạng 4 byteDestAddr=inet_addr(m_DestAddrStr);//Khởi tạo cấu trúc SOCKADDR_INSockAddr.sin_addr=*(struct in_addr*)&DestAddr;

SockAddr.sin_port=htons(PORT);SockAddr.sin_family=AF_INET;// Tạo một sockethSock=socket(AF_INET,SOCK_STREAM,0);if(hSock==INVALID_SOCKET){MessageBox("ERROR: Socket unsuccessful.","Error Socket",

MB_ICONEXCLAMATION);WSACleanup();return(-1);}// Nối vào máy chạy ứng dụng server 

status=connect(hSock,(LPSOCKADDR)&SockAddr,sizeof(SockAddr));if(status==SOCKET_ERROR){MessageBox("ERROR: Connect unsuccessful !","Error connect !",

MB_ICONEXCLAMATION);closesocket(hSock);WSACleanup();return(-1);}else{strcpy(SendBuf,"There is the signal send to your computer !");

nbyte=send(hSock,SendBuf,strlen(SendBuf)+1,NO_FLAGS_SET);nbrecv=recv(hSock,RecvBuf,MAXBUFLEN,NO_FLAGS_SET);if((nbrecv==0)||(nbrecv==SOCKET_ERROR))

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 57/60

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

{MessageBox("Please end the conversation !", "Theconversation",MB_ICONEXCLAMATION);

closesocket(hSock);WSACleanup();return(-1);

}else MessageBox(RecvBuf,"The conversation",MB_ICONINFORMATION);}// Kết thúc trạng thái gọi// Khôi phục lại trạng thái chờ ResumeThread(Server);return(1);}

Đoạn chương trình thực hiện chức năng ghi âm thanh từ microvoid CWAveIn::recordWaveData()

{HWAVEIN hWaveIn;HWND hwndApp=NULL;HGLOBAL hWaveHdr;LPWAVEHDR lpWaveHdr;HMMIO hmmio=NULL;UINT wResult;HANDLE hFormat=NULL;WAVEFORMAT pFormat;DWORD dwDataSize=1000;// Mở thiết bị wave để phát.

if (!waveInOpen((LPHWAVEIN)&hWaveIn, WAVE_MAPPER,(LPWAVEFORMATEX)&pFormat,(LONG)waveInProc, DWORD(this), CALLBACK_FUNCTION)){MessageBox("Failed to open waveform input device.",

 NULL,MB_OK | MB_ICONEXCLAMATION);LocalUnlock(hFormat);LocalFree(hFormat);mmioClose(hmmio, 0);return;}

// Allocate and lock memory for the waveform data.hData = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, dwDataSize );if (!hData){MessageBox( "Out of memory.",

 NULL, MB_OK | MB_ICONEXCLAMATION);mmioClose(hmmio, 0);return;}if ((lpData =(HPSTR)GlobalLock(hData)) == NULL){MessageBox( "Failed to lock memory for data chunk.",

 NULL, MB_OK | MB_ICONEXCLAMATION);GlobalFree(hData);mmioClose(hmmio, 0);Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 58/60

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

return;}// Allocate and lock memory for the header.hWaveHdr = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE,(DWORD) sizeof(WAVEHDR));if (hWaveHdr == NULL)

{GlobalUnlock(hData);GlobalFree(hData);MessageBox("Not enough memory for header.",

 NULL, MB_OK | MB_ICONEXCLAMATION);return;}lpWaveHdr = (LPWAVEHDR) GlobalLock(hWaveHdr);if (lpWaveHdr == NULL){GlobalUnlock(hData);GlobalFree(hData);MessageBox("Failed to lock memory for header.",

 NULL, MB_OK | MB_ICONEXCLAMATION);return;}// After allocation, set up and prepare header.lpWaveHdr->lpData = lpData;lpWaveHdr->dwBufferLength = dwDataSize;lpWaveHdr->dwFlags = 0L;lpWaveHdr->dwLoops = 0L;waveInPrepareHeader(hWaveIn, lpWaveHdr, sizeof(WAVEHDR));

// Gởi khối dữ liệu đến thiết bị phát.wResult = waveInAddBuffer(hWaveIn, lpWaveHdr, sizeof(WAVEHDR));if (wResult = 0){waveInUnprepareHeader(hWaveIn, lpWaveHdr,sizeof(WAVEHDR));GlobalUnlock( hData);GlobalFree(hData);MessageBox( "Failed to write block to device",

 NULL, MB_OK | MB_ICONEXCLAMATION);return;}

wResult = waveInStart(hWaveIn);if (wResult != 0)return;

}

Đoạn chương trình play dữ liệu âm thanhvoid CWAveIn::playbackWaveData(){HWAVEOUT hWaveOut;HWND hwndApp =NULL;HGLOBAL hWaveHdr;LPWAVEHDR lpWaveHdr;

HMMIO hmmio=NULL;UINT wResult;HANDLE hFormat=NULL;

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 59/60

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

WAVEFORMAT pFormat;DWORD dwDataSize=1000;// Mở thiết bị wave để phát.if (waveOutOpen((LPHWAVEOUT)&hWaveOut, WAVE_MAPPER,(LPWAVEFORMATEX)&pFormat,(LONG)hwndApp, 0L, CALLBACK_WINDOW))

{MessageBox("Failed to open waveform output device.",

 NULL,MB_OK | MB_ICONEXCLAMATION);LocalUnlock(hFormat);LocalFree(hFormat);mmioClose(hmmio, 0);return;}// Allocate and lock memory for the waveform data.hData = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, dwDataSize );if (!hData){MessageBox( "Out of memory.",

 NULL, MB_OK | MB_ICONEXCLAMATION);mmioClose(hmmio, 0);return;}if ((lpData =(HPSTR)GlobalLock(hData)) == NULL){MessageBox( "Failed to lock memory for data chunk.",

 NULL, MB_OK | MB_ICONEXCLAMATION);GlobalFree(hData);

mmioClose(hmmio, 0);return;}// Allocate and lock memory for the header.hWaveHdr = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE,(DWORD) sizeof(WAVEHDR));if (hWaveHdr == NULL){GlobalUnlock(hData);GlobalFree(hData);MessageBox("Not enough memory for header.",

 NULL, MB_OK | MB_ICONEXCLAMATION);

return;}lpWaveHdr = (LPWAVEHDR) GlobalLock(hWaveHdr);if (lpWaveHdr == NULL){GlobalUnlock(hData);GlobalFree(hData);MessageBox("Failed to lock memory for header.",

 NULL, MB_OK | MB_ICONEXCLAMATION);return;}

// After allocation, set up and prepare header.lpWaveHdr->lpData = lpData;lpWaveHdr->dwBufferLength = dwDataSize;

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

5/13/2018 1246 Do an Tot Nghiep Xay Dung - slidepdf.com

http://slidepdf.com/reader/full/1246-do-an-tot-nghiep-xay-dung 60/60

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

lpWaveHdr->dwFlags = 0L;lpWaveHdr->dwLoops = 0L;waveOutPrepareHeader(hWaveOut, lpWaveHdr, sizeof(WAVEHDR));// Gởi khối dữ liệu đến thiết bị phát.wResult = waveOutWrite(hWaveOut, lpWaveHdr, sizeof(WAVEHDR));if (wResult != 0)

{waveOutUnprepareHeader(hWaveOut, lpWaveHdr,sizeof(WAVEHDR));GlobalUnlock( hData);GlobalFree(hData);MessageBox( "Failed to write block to device",

 NULL, MB_OK | MB_ICONEXCLAMATION);return;}}

TÀI LIỆU THAM KHẢO

[1]. ANNEXE VOIP-SLIDERaj Jain http://www.cis.ohio-state.edu/~jain/

[2]. AUDIO COMPRESSION THEOGRYhttp://www.owlnet.rice.edu/~elec301/projects99/adda/index.html[3]. BUILDING INTERNET APPLICATION WITH VISUAL C++

Kate Gregogy - Paul Robichaux - Brady Merkel - Markus Pope[4]. DIGITAL SIGNAL PROCESSINGJohn G.Proakis - Dimitris G.Manolakis - Prentice Hall[5]. INTERNET WORKING VỚI TCP/IP

 Nhà xuất bản giáo dục, 2001[6]. Thư viện MSDN

Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ