Tài liệu Đề tài Tìm hiểu xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ: LỜI NÓI ĐẦU
Trong những năm gần đây, mạng máy tính ngày càng trở nên phổ biến. Việc liên kết các máy tính trên môi trường mạng cũng như liên kết các mạng lại với nhau đem lại cho chúng ta nhiều lợi ích trong công việc cũng như trong việc học tập nghiên cứu, giải trí. Chúng ta có thể sử dụng các tài nguyên sẵn có được chia xẻ như file server, printer, máy fax, ... môi trường mạng còn là một môi trường thông tin nhanh chóng và tiện lợi nhờ vào các cơ chế truyền thông trên mạng như : e-mail, www ...
Bên cạnh đó, tốc độ phát triển của máy tính PC cũng rất nhanh chóng. Các kỹ thuật hiện đại đã giúp tạo ra các máy PC với tốc độ tính toán nhanh hơn, bộ nhớ lớn hơn và khả năng xử lý của nó cũng ngày càng đa dạng hơn trong khi giá thành ngày càng rẻ hơn. Một trong những khả năng ưu việt của máy PC hiện nay là hỗ trợ multimedia. Các máy PC ngày nay giao tiế...
68 trang |
Chia sẻ: haohao | Lượt xem: 1135 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tìm hiểu xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LÔØI NOÙI ÑAÀU
Trong nhöõng naêm gaàn ñaây, maïng maùy tính ngaøy caøng trôû neân phoå bieán. Vieäc lieân keát caùc maùy tính treân moâi tröôøng maïng cuõng nhö lieân keát caùc maïng laïi vôùi nhau ñem laïi cho chuùng ta nhieàu lôïi ích trong coâng vieäc cuõng nhö trong vieäc hoïc taäp nghieân cöùu, giaûi trí. Chuùng ta coù theå söû duïng caùc taøi nguyeân saün coù ñöôïc chia xeû nhö file server, printer, maùy fax, ... moâi tröôøng maïng coøn laø moät moâi tröôøng thoâng tin nhanh choùng vaø tieän lôïi nhôø vaøo caùc cô cheá truyeàn thoâng treân maïng nhö : e-mail, www ...
Beân caïnh ñoù, toác ñoä phaùt trieån cuûa maùy tính PC cuõng raát nhanh choùng. Caùc kyõ thuaät hieän ñaïi ñaõ giuùp taïo ra caùc maùy PC vôùi toác ñoä tính toaùn nhanh hôn, boä nhôù lôùn hôn vaø khaû naêng xöû lyù cuûa noù cuõng ngaøy caøng ña daïng hôn trong khi giaù thaønh ngaøy caøng reû hôn. Moät trong nhöõng khaû naêng öu vieät cuûa maùy PC hieän nay laø hoã trôï multimedia. Caùc maùy PC ngaøy nay giao tieáp vôùi con ngöôøi khoâng chæ baèng text maø coøn keát hôïp taát caû caùc phöông tieän khaùc nhö tieáng noùi, hình aûnh.
Vieäc ñöa kyõ thuaät multimedia vaøo caùc öùng duïng truyeàn thoâng treân maïng giuùp chuùng ta taïo ra nhieàu öùng duïng phong phuù hôn. Chaúng haïn hoäp thö ñieän töû ngaøy nay coù theå khoâng chæ laø vaên baûn maø coøn bao goàm tieáng noùi, hình aûnh. Caùc trang web trôû neân sinh ñoäng hôn haún khi keøm theo kyõ thuaät multimedia. Beân caïnh ñoù, chuùng ta coù theå thieát keá caùc öùng duïng tieän ích nhö Video conference, voice mail...
Thoâng qua chöông trình naøy, ngöôøi söû duïng coù theå trao ñoåi thoâng tin vôùi nhau baèng tieáng noùi. Chöông trình naøy ñaõ ñöôïc hieän thöïc raát nhieàu trong caùc lónh vöïc thoâng tin nhö ñieän thoaïi, vieãn thoâng, maùy tính . . . Tuy nhieân noù chöa ñöôïc aùp duïng vaø phaùt trieån roïâng raõi nhö treân caùc lónh vöïc thoâng tin khaùc do söï haïn cheá cuûa thieát bò. Ngaøy nay, khi coâng ngheä thoâng tin ñaõ phaùt trieån thì vieäc hieän thöïc chöông trình naøy laø hoaøn toaøn coù theå. ÖÙng duïng trong nhieàu lónh vöïc khaùc nhau nhö :
•Vieäc daïy hoïc töø xa.
•Vieäc chaån ñoaùn, chöõa beänh töø xa.
•Hoäi thaûo, thaûo luaän theo nhoùm.
•Coâng cuï trao ñoåi thoâng tin baèng hình aûnh vaø aâm thanh.
Muïc tieâu cuûa ñoà aùn toát nghieäp laø tìm hieåu caùc moâ hình vaø coâng ngheä truyeàn aâm thanh treân maïng maùy tính, treân cô sôû ñoù xaây döïng öùng duïng truyeàn thoâng aâm thanh thoaïi treân maïng cuïc boä. Ñoà aùn seõ xaây döïng thöû nghieäm moät heä thoáng cho pheùp trao ñoåi thoâng tin baèng tieáng noùi thoaïi, töông taùc ñieåm – ñieåm treân maïng LAN. Ñoà aùn ñöôïc trình baøy goàm 5 chöông vôùi boá cuïc nhö sau :
Chöông I : Tìm hieåu caùc moâ hình ñieän thoaïi qua maïng, Töø ñoù ñöa ra moâ hình seõ thöïc thi trong ñoà aùn naøy.
Chöông II: Giôùi thieäu chung veà caùc giao thöùc truyeàn thoâng treân maïng Internet vaø vaøo khaûo saùt cuï theå caùc giao thöùc naøy.
Chöông III : Giôùi thieäu caùc chuaån maõ hoaù vaø neùn aâm thanh.
Chöông IV : Tìm hieàu moâi tröôøng laäp trình SDK Windows vaø öùng duïng treân maïng.
Chöông V : Thieát keá chöông trình truyeàn tieáng noùi qua maïng LAN thoâng qua söï trôï giuùp cuûa coâng cuï SDK. Ñaùnh giaù vaø caùc keát quaû thöû nghieäm.
Phaàn keát luaän : Neâu nhöõng keát quaû cuûa ñeà taøi vaø höôùng nghieân cöùu höôùng phaùt trieån tieáp theo.
Vieäc nghieân cöùu lyù thuyeát moät caùch heä thoáng vaø xaây döïng chöông trình phaàn meàm ñoøi hoûi phaûi ñaàu tö nhieàu thôøi gian. Vôùi thôøi gian coù haïn cho neân baøi luaän vaên naøy cuûa em khoâng traùnh khoûi nhöõng thieáu soùt, em raát mong ñöôïc söï chæ daãn theâm cuûa thaày coâ vaø caùc baïn.
Nhaân ñaây, em xin chaân thaønh caùm ôn ñeán PGS - TS Nguyeãn Thò Hoaøng Lan, ngöôøi tröïc tieáp höôùng daãn em hoaøn thaønh cuoán luaän vaên naøy. Em xin chaân thaønh caùm ôn caùc thaày coâ trong khoa Coâng ngheä thoâng tin Tröôøng ÑH Baùch Khoa HN, Tröôøng ÑH Thuûy Saûn vaø toaøn theå caùc baïn ñaõ giuùp ñôõ em hoaøn thaønh cuoán luaän vaên naøy.
CHÖÔNG I
TÌM HIEÅU MOÂ HÌNH ÑIEÄN THOAÏI QUA MAÏNG
I.1 CAÙC MOÂ HÌNH ÑIEÄN THOAÏI
I.1.1 MAÙY TÍNH ÑEÁN MAÙY TÍNH
Trong moâ hình naøy caû hai thueâ bao ñeàu söû duïng maùy tính ñöôïc noái vaøo maïng IP nhö moät thieát bò ñaàu cuoái. Tieáng noùi ñöôïc maõ hoaù sau ñoù laø neùn vaø quaù trình nhaän döõ lieäu hoaøn toaùn gioáng nhöng vôùi quy trình ngöôïc laïi laø giaûi neùn, giaûi maõ baèng phaàn meàm. Trong moâ hình naøy ñoøi hoûi caû hai thueâ bao caàn phaûi coù soundcard, microphone, loa vaø phaàn meàm gioáng nhau.[1]
Maùy tính
Maùy tính
IP
Hình I.1 : Moâ hình PC - PC
I.1.2 MAÙY TÍNH ÑEÁN ÑIEÄN THOAÏI HOAËC ÑIEÄN THOAÏI ÑEÁN MAÙY TÍNH
Trong moâ hình naøy, moät thueâ bao söû duïng maùy tính noái maïng vôùi maïng coøn thueâ bao kia söû duïng ñieän thoaïi trong maïng PSTN/ISDN/GSM/TDM. Söû duïng moät gateway ñeå chuyeån tieáng noùi treân maïng IP thaønh tieáng noùi treân maïng PSTN vaø trao ñoåi thoâng tin giöõa hai maïng treân. Nhö vaäy, ôû ñaây maùy tính phaûi ñaày ñuû caùc thieát bò nhö Soundcard, loa, microphone vaø phaàn meàm thoâng qua server cuûa maïng IP ñeå coù theå keát noái vôùi maïng PSTN thoâng qua Geteway.
Maùy tính
Ñieän thoaïi
IP
Gateway
PSTN
Hình I.2 : Moâ hình Maùy tính – Ñieän thoaïi
I.1.3 ÑIEÄN THOAÏI ÑEÁN ÑIEÄN THOAÏI
Trong moâ hình naøy, caû hai thueâ bao ñeàu söû duïng ñieän thoaïi bình thöôøng vaø maïng IP ñöôïc söû duïng trong tröôøng hôïp cuoäc goïi ñöôøng daøi. Gateway ñöôïc söû duïng ôû caû hai ñaàu ñeå chuyeån ñoåi döõ lieäu giöõa caùc maïng vôùi nhau.[1]
Ñieän thoaïi
IP
Gateway
PSTN
PSTN
Gateway
Ñieän thoaïi
Hình I.3 : Moâ hình Ñieän thoaïi – Ñieän thoaïi
I.2 YEÂU CAÀU ÖÙNG DUÏNG TRUYEÀN AÂM THANH TREÂN MAÏNG LAN
Trong phaàn naøy seõ phaân tích caùc yeâu caàu xaây döïng öùng duïng truyeàn aâm thanh treân maïng LAN : Töø ba moâ hình treân em nhaän thaáy moâ hình 2 vaø 3 ñoøi hoûi quaù trình nghieân cöùu vaø thieát bò phöùc taïp, ñoøi hoûi phaûi ñaàu tö coâng ngheä môùi coù theå thöïc hieän ñöôïc. Neân trong ñoà aùn naøy chæ coù theå thöùc hieän theo moâ hình 1 laø PC – PC, noù ñôn giaûn hôn vaø khoâng caàn ñaàu tö thieát bò môùi, coù theå taän duïng caùc thieát bò coù saün vaø ñieàu quan troïng coù theå thöû nghieäm hoaøn chænh trong phaïm vi ñoà aùn.
Vaán ñeà ñaët ra laø vôùi moät heä thoáng maïng LAN, WAN cuøng vôùi taøi nguyeân saün coù cuûa noù xaây döïng moät chöông trình truyeàn tieáng noùi vôùi thôøi gian thöïc cho pheùp töø maùy naøy sang maùy khaùc (point to point) vôùi moät soá caùc yeâu caàu thích hôïp gioáng nhö vieäc xöû lyù vaø truyeàn tieáng noùi trong thoâng tin lieân laïc (ñieän thoaïi höõu tuyeán). Chöông trình söû duïng giao thöùc TCP/IP laø moät giao thöùc phoå bieán vaø tin caäy hieän nay ñeå keát noái vaø truyeàn tieáng noùi. Do söû duïng giao thöùc TCP laø giao thöùc coù lieân keát neân daãn ñeán ñoä treã raát lôùn nhöng vôùi öùng duïng trong maïng LAN thì vaãn coù theå chaáp nhaän ñöôïc. Ngay khi tieáng noùi ñöôïc thu vaø coù theå qua moät soá caùc xöû lyù nhö maõ hoaù tieáng noùi hoaëc neùn treân moät maùy, tieáng noùi ñöôïc truyeàn tôùi maùy caàn keát noái vaø qua caùc xöû lyù ngöôïc so vôùi luùc thu nhö giaûi neùn vaø giaûi maõ ñeå ñöôïc phaùt ra loa. Chöông trình cho pheùp keát noái hai maùy vaø taïo moät moâ hình ñieän thoaïi treân maùy tính nhö ñieän thoaïi höõu tuyeán thoâng thöôøng. Baát kyø maùy naøo trong maïng cuõng coù theå ôû cheá ñoä chôø hay cheá ñoä chaïy neàn (background) goïi maùy laø P-SERVER; maùy ôû cheá ñoä goïi (active) goïi laø P-CLIENT. Nhö vaäy moät maùy trong maïng coù theå laø P-SERVER hoaëc P-CLIENT. Treân moâi tröôøng maïng, khi chuùng ta muoán noùi chuyeän moät ngöôøi treân moät maùy naøo ñoù, chuùng ta seõ tieán haønh vieäc goïi lieân keát. Vieäc goïi lieân keát ñöôïc tieán haønh baèng vieäc xaùc ñònh ñòa chæ IP cuûa maùy maø chuùng ta caàn lieân keát. Sau ñoù chuùng ta seõ chôø vieäc xaùc laäp lieân keát. ÔÛ maùy ñöôïc goïi seõ coù thoâng baùo cho ngöôøi söû duïng bieát raèng coù moät ngöôøi khaùc muoán noùi chuyeän. Tuøy theo ngöôøi ñoù quyeát ñònh coù chaáp nhaän hay khoâng. Neáu chaáp nhaän thì lieân keát seõ ñöôïc xaùc laäp vaø hai beân seõ coù theå tieán haønh trao ñoåi thoâng tin vôùi nhau.
Trong quaù trình trao ñoåi thoâng tin, caùc maùy seõ truyeàn tieáng noùi cuûa ngöôøi söû duïng ñoàng thôøi nhaän döõ lieäu aâm thanh cuûa maùy lieân keát. Khi noùi chuyeän xong, lieân keát seõ bò huûy boû vaø chöông trình keát thuùc. Neáu maùy ñöôïc goïi khoâng coù ngöôøi traû lôøi thì sau thôøi gian chôø vöôït quaù giôùi haïn thì lieân keát cuõng seõ bò huyû boû. Vì döõ lieäu truyeàn nhaän trong chöông trình laø döõ lieäu daïng lieân tuïc cuûa aâm thanh cho neân coù caùc yeâu caàu ñaët ra nhö sau: Baûo ñaûm tính maïch laïc cuûa döõ lieäu. Tieáng noùi trong quaù trình thoâng tin phaûi roõ raøng, lieàn laïc, khoâng bò ngaét quaõng.
Caùc yeâu caàu treân ñaët ra caùc nhieäm vuï maø chuùng ta phaûi giaûi quyeát trong vieäc xaây döïng chöông trình. Ñoái vôùi döõ lieäu laø aâm thanh, chuùng ta phaûi xem xeùt caùc thoâng soá trong quaù trình laáy maãu ôû ñaàu vaøo. Caùc thoâng soá ñaëc tröng nhö : taàn soá laáy maãu, soá bit bieåu dieãn cho moät ñieåm laáy maãu, keânh laáy maãu ñöôïc söû duïng 1 keânh (mono) hay hai keânh (stereo). Do ñoù chuùng ta phaûi toå chöùc kích thöôùc buffer aâm thanh sao cho phuø hôïp vôùi vieäc truyeàn nhaän ñaït toác ñoä cao. Moät vaán ñeà khaùc ñöôïc ñaët ra vôùi döõ lieäu aâm thanh laø vieäc nhaän vaø phaùt ôû ñaàu ra, chuùng ta phaûi quan taâm ñeán vieäc xöû lyù vaø loaïi boû caùc tín hieäu nhieãu giuùp cho aâm thanh ñöôïc roõ raøng, trung thöïc. Do vieäc truyeàn nhaän döõ lieäu laø treân moâi tröôøng maïng neân chuùng ta phaûi quan taâm ñeán toác ñoä, löu löôïng trao ñoåi döõ lieäu, thôøi gian truyeàn nhaän ñeå ñöa ra caùch giaûi quyeát cho phuø hôïp. Ngoaøi caùc vaán ñeà chính ôû treân, moät soá yeâu caàu khaùc ñaët ra cho öùng duïng nhö : cô cheá taïo laäp lieân keát, vieäc choïn löïa caùc daïng format döõ lieäu, ñònh caùc thoâng soá thôøi gian. Taát caû caùc nhieäm vuï thöïc thi ñeàu phaûi ñöôïc thöïc hieän thoâng qua giao dieän deã daøng cho ngöôøi söû duïng.[3]
Tröôøng hôïp môû roäng heä thoáng cho maïng Internet caàn moät keát noái giöõa server maïng vôùi toång ñaøi maïng PABX, yeâu caàu naøy ñoøi hoûi phöùc taïp hôn vaø caàn coù caùc trang thieát bò ñeå thöû nghieäm. Bôûi vaäy trong ñoà aùn naøy em chæ nghieân cöùu caùch thöùc truyeàn tieáng noùi treân maïng noäi boä.
CHÖÔNG II
KHAÛO SAÙT CAÙC GIAO THÖÙC TRUYEÀN THOÂNG
II.1 KHAÙI NIEÄM CÔ BAÛN GIAO THÖÙC TCP/IP
Trong heä thoáng maïng Internet, moãi maùy coù moät teân vaø moät ñòa chæ IP (Internet Protocol). Teân hay ñòa chæ IP ñeàu xaùc ñònh duy nhaát moät maùy trong heä thoáng maïng Internet. Giöõa teân maùy vaø ñòa chæ IP ñeàu coù theå chuyeån ñoåi thoâng qua caùc haøm. Ñòa chæ IP ñeàu ñöôïc bieåu dieãn baèng moät soá 32 bits. Moãi giao dieän maïng trong moät nuùt neáu coù hoã trôï moät ngaên xeáp IP ñeàu ñöôïc gaùn moät ñòa chæ IP. Ñòa chæ IP goàm 2 phaàn : chæ soá maïng(netid) vaø chæ soá cuûa maùy chuû (hostid). Nhöõng bits quan troïng nhaát ñöôïc duøng ñeå xaùc ñònh soá löôïng bits duøng cho netid vaø hostid. Coù 5 lôùp ñòa chæ ñöôïc xaùc ñònh laø A,B,C,D vaø E. Trong ñoù, lôùp A,B,C chöùa ñòa chæ coù theå giaùn ñöôïc. Lôùp D daønh rieâng cho kyõ thuaät Multicasting vaø ñöôïc söû duïng trong caùc giao thöùc ñaëc bieät ñeå truyeàn thoâng ñieäp ñeán moät nhoùm nuùt ñöôïc choïn loïc. Lôùp E daønh rieâng cho nhöõng öùng duïng trong töông lai.[5]
Hình II.1 Caùc lôùp ñaïi chæ IP
Hình II.2 TCI/IP vaø moâ hình OSI
Netid nhaän daïng cho töøng maïng rieâng bieät. Caùc kieåu lôùp ñòa chæ IP cho thaáy soá löôïng maïng vaø soá löôïng nuùt cuûa moãi lôùp khaùc nhau. Baûng döôùi cho thaáy soá löôïng maïng vaø soá löôïng nuùt coù theå cuûa moãi lôùp ñòa chæ :
Lôùp ñòa chæ
Soá löôïng maïng
Soá löôïng nuùt
A
127
16.777.241
B
16.383
65.534
C
2.097.151
254
Maïng lôùp A duøng cho maïng dieän roäng. Tröôøng netid coù 7 bits neân coù theå coù 127 maïng. Maïng lôùp B laø maïng coù kích thöôùc trung bình vaø thích hôïp cho caùc toå chöùc coù quy moâ lôùp vaø vöøa. Maïng lôùp C duøng trong cô quan nhoû, trong ñoù moãi maïng chæ coù khoâng hôn 254 nuùt.
Con soá 32 bits bieåu thò 4 chöõ soá thaäp phaân töông öùng giaù trò 4 byte taïo thaønh ñòa chæ IP. Nhöõng soá thaäp phaân caùch nhau bôûi daáu chaám (.). Moät ví duï veà teân maùy vaø ñòa chæ IP cuûa maùy :
Hostname : viethung
IP Address : 192.168.0.55
II.1.1 KHAÙI NIEÄM SOCKET
Socket laø moät ñôn vò caáu truùc truyeàn thoâng 2 chieàu. Chuùng coù theå ñoïc hay ghi leân noù. Tuy nhieân moãi socket laø moät thaønh phaàn cuûa moät moái naøo ñoù giöõa caùc maùy treân maïng maùy tính vaø caùc thao taùc ñoïc ghi chính laø caùc thao taùc trao ñoåi döõ lieäu giöõa caùc öùng duïng treân nhieàu maùy khaùc nhau. Socket laø ñieåm keát noái cuoái cuøng cho pheùp nhöõng öùng duïng gaén vaøo maïng. Khaùi nieäm socket ñöôïc cung caáp bôûi moät thö vieän chöùa taát caû caùc haøm yeâu caàu cho baát kyø chöông trình maïng naøo. Khi moät öùng duïng yeâu caàu caùc dòch vuï maïng, noù goïi quaù trình töï taäp hôïp caùc thö vieän ñeå quaûn lyù hoaït ñoäng maïng. Hai loaïi socket coù saün stream vaø datagram.[5]
Nhöõng socket stream duøng cho TCP (Transmission Control Protocol), nhöõng socket datagram duøng UDP (User Datagram Protocol).
Maùy A
Maùy B
Port Moái noái Port
TCI/IP Interface
Hình II.3 Caùc socket vaø port trong moái noái TCP/IP
Soá hieäu coång
Moâ taû
0
Reserved
2
Management Entry
5
Remote Job Entry
7
Echo
9
Discard
11
Systat
13
Daytime
15
Netstat
17
Quoted(quote of the day)
20
FTP data
21
FTP control
23
Telnet
25
SMTP
37
Time
42
Host name server
49
Login host protocol
53
Domain name server
80
World wide web HTTP
102
ISO-TSAP
103
x.4000
104
X.4000 sending server
111
Sun RPC
139
NetBIOS session source
160-223
Reserved
Ghi chuù :
Trò soá cuûa coång trong caùc öùng duïng :
Caùc öùng duïng chuaån : 0 – 999
Caùc öùng duïng khoâng chuaån : 1000 – 64000
II.1.2 GIAO THÖÙC IP
Internet protocol (IP) laø moät daïng giao thöùc truyeàn tin ñöôïc thieát keá cho maïng chuyeån maïng goùi. Vai troø cuûa IP töông ñöông vôùi vai troø cuûa taàng maïng trong moâ hình OSI. Giao thöùc IP ñaûm nhieäm vieäc chuyeån nhöõng goùi maïch döõ lieäu (datagram) töø ñòa chæ nguoàn ñeán ñòa chæ ñích. Ñòa chæ IP coù ñòa chæ coá ñònh (4 byte) duøng ñeå xaùc ñònh duy nhaát caùc traïm laøm vieäc ñang tham gia vaøo vieäc truyeàn, nhaän döõ lieäu. Trong tröôøng hôïp maïng truyeàn tin chæ coù theå truyeàn nhöõng goùi döõ lieäu coù kích thöùc nhoû, giao thöùc IP cuõng ñaûm nhieäm chöùc naêng chia nhoû caùc goùi döõ lieäu coù kích thöôùc lôùn tröôùc khi truyeàn vaø goäp chuùng laïi chuùng sau khi nhaän ñöôïc.[5]
Giao thöùc IP ñöôïc thieát keá vôùi chöùc naêng chuyeån 1 goùi caùc bit, goïi laø internet datagram töø ñòa chæ nguoàn ñeán ñòa chæ ñích. Ñaây laø moät giao thöùc theo kieåu khoâng lieân keát, nghóa laø khoâng coù giai ñoaïn thieát laäp lieân keát tröôùc khi truyeàn döõ lieäu, noù cuõng khoâng coù caùc cô cheá baûo ñaûm thoâng tin tôùi ñích an toaøn, khoâng coù cô cheá ñieàu khieån luoàng döõ lieäu. Treân thöïc teá vieäc thoâng baùo veà loãi ñöôøng truyeàn coù theå ñöôïc thöïc hieän nhôø moät giao thöùc khaùc coù teân ICMP( Internet Control Message Protocol).
Ñòa chæ IP nhö ñaõ noùi ôû treân, laø moät chuoãi bit coù ñoä daøi 4 byte, ñöôïc phaân chia laøm 5 lôùp vaø caùc bit ñaàu tieân ñöôïc duøng laøm ñònh danh lôùp ñòa chæ.
II.2 GIAO THÖÙC TCP
Giao thöùc TCP laø giao thöùc duøng cho taàng ngay treân taàng IP. Ñoái vôùi moâ hình OSI, ta coù theå thaáy taàng TCP coù vai troø töông öùng vôùi caùc taàng giao vaän vaø taàng phieân .
Khaùc vôùi IP, TCP laø giao thöùc coù lieân keát (connection oriented), nghóa laø nhaát thieát phaûi coù giai ñoaïn thieát laäp lieân keát giöõ caùc caëp thöïc theå TCP tröôùc khi chuùng coù trao ñoåi döõ lieäu vôùi nhau. Giao thöùc TCP cung caáp moät khaû naêng truyeàn döõ lieäu moät caùch an toaøn giöõa caùc thöïc theå treân maïng. Noù cung caáp caùc chöùc naêng nhaèm kieåm tra tính chính xaùc cuûa döõ lieäu khi göûi ñeán vaø göûi laïi döõ lieäu khi coù loãi xaûy ra.[5]
Ñôn vò döõ lieäu cô baûn cuûa TCP goïi laø segment. Trong segment coù moät caëp tham soá laø soá hieäu coång cuûa traïm nguoàn vaø soá hieäu coång cuûa traïm ñích. Moãi moät tieán trình öùng duïng taïi moät traïm seõ truy caäp caùc dòch vuï TCP thoâng qua moät coång. Moät coång nhö vaäy keát hôïp vôùi moät ñòa chæ IP seõ taïo thaønh moät socket duy nhaát trong maïng. Dòch vuï TCP ñöôïc cung caáp nhôø lieân keát logic giöõa moät caëp socket, moãi socket coù theå tham gia lieân keát vôùi nhieàu socket ôû xa khaùc nhau. Tröôùc khi truyeàn döõ lieäu chuùng thieát laäp lieân keát vaø khi khoâng coù nhu caàu truyeàn döõ lieäu nöõa thì lieân keát seõ ñöôïc giaûi phoøng.
Moãi öùng duïng TCP goàm hai phaàn laø client vaø server.
Löu ñoà sau minh hoïa caùc böôùc caàn thieát ñeå caùc öùng duïng client vaø server giao tieáp vôùi nhau :
Hình II.4 Taïo keát noái giöõa client vaø server theo giao thöùc TCP
II.2.1 CAÙCH THÖÙC CAØI ÑAËT ÖÙNG DUÏNG TCP SERVER
ÖÙng duïng TCP server laøm vieäc theo qui trình sau:
Goïi haøm socket ñeå taïo moät socket.
Goïi haøm bind ñeå keát buoäc socket vôùi moät port, ñoái vôùi moãi giao thöùc öùng duïng chuaån thì seõ coù moät haèng soá ñöôïc ñònh nghóa saün trong winsock cho port cuûa giao thöùc ñoù.
Goïi haøm listen ñeå chôø ñeán khi coù moät client noái vaøo port.
Khi coù moät client noái vaøo thì haøm listen traû ñieàu khieån veà, öùng duïng server goïi haøm accept ñeå xaùc nhaän moái noái cuûa client.
Goïi caùc haøm göûi hay nhaän döõ lieäu ñeå trao ñoåi thoâng tin vôùi client, ví duï send, recv.
Sau khi ñaõ hoaøn taát quaù trình trao ñoåi döõ lieäu, öùng duïng server goïi haøm closesocket ñeå ñoùng socket ñaõ taïo.
Hình II.5 Sô ñoà giao tieáp giöõa server vôùi client
II.2.2 CAÙCH THÖÙC CAØI ÑAËT ÖÙNG DUÏNG CLIENT TCP ÖÙng duïng client TCP laøm vieäc theo qui trình sau :
Goïi haøm socket ñeå taïo moät socket .
Goïi haøm connect ñeå noái vaøo server.
Goïi haøm göûi hay nhaän döõ lieäu ñeå trao ñoåi thoâng tin vôùi server, ví duï nhö haøm send, recv.
Sau khi ñaõ hoaøn taát quaù trình trao ñoåi döõ lieäu, öùng duïng client goïi haøm closesocket ñeå ñoùng socket ñaõ taïo.
Hình II.6 Sô ñoà giao tieáp cuûa client vôùi server
Ghi chuùù:
Caùc böôùc treân cô baûn laø gioáng nhau cho caùc öùng duïng client vaø server vieát treân Windows NT vaø UNIX. Tuy nhieân, vôùi öùng duïng vieát treân UNIX thì khoâng caàn goïi caùc haøm WSAStartup, WSACleanup ñeå khôûi taïo thö vieän quaûn lyù socket vaø ñoùng boä phaän naøy. Lyù do, vôùi UNIX thì boä phaän quaûn lyù socket ñaõ ñöôïc heä ñieàu haønh naïp saün.
II.3 GIAO THÖÙC UDP
Giao thöùc UDP cung caáp khaû naêng broadcast treân heä thoáng maïng TCP/IP . Chuùng ta cuõng caàn caøi ñaët öùng duïng client vaø server. ÖÙng duïng client coù nhieäm vuï göûi thoâng baùo ñeán taát caû caùc instance cuûa öùng duïng server ñang chaïy treân heä thoáng maïng.[5]
II.3.1 CAÙCH CAØI ÑAËT ÖÙNG DUÏNG SERVER UDP
ÖÙng duïng server UDP ñöôïc caøi ñaët ñôn giaûn hôn öùng duïng TCP. Chuùng ta caàn caùc böôùc chính sau ñaây :
Goïi haøm socket ñeå taïo moät socket .
Goïi haøm bind ñeå keát buoäc socket vôùi moät port, ñoái vôùi moãi giao thöùc öùng duïng chuaån thì seõ coù moät haèng soá ñöôïc ñònh nghóa saün trong winsock cho port cuûa giao thöùc ñoù.
Goïi caùc haøm göûi hay nhaän döõ lieäu ñeå trao ñoåi thoâng tin vôùi client, ví nhö haøm sendto, recvfrom.
Sau khi ñaõ hoaøn taát quaù trình trao ñoåi döõ lieäu, öùng duïng server goïi haøm closesocket ñeå ñoùng socket ñaõ taïo.
II.3.2 CAÙCH CAØI ÑAËT ÖÙNG DUÏNG CLIENT UDP
ÖÙng duïng client UDP thöïc hieän caùc böôùc sau :
Goïi haøm socket ñeå taïo moät socket.
Goïi haøm setsockopt ñeå laøm cho socket coù khaû naêng broadcoast .
Goïi caùc haøm göûi hay nhaän döõ lieäu ñeå trao ñoåi thoâng tin vôùi server, ví duï haøm sendto, recvfrom.
Sau khi ñaõ hoaøn taát quaù trình trao ñoåi döõ lieäu, öùng duïng client goïi haøm closesocket ñeå ñoùng socket ñaõ taïo.
Ghi chuù:
Ngoaøi caùc böôùc treân, caùc öùng duïng vieát treân Windows NT (keå caû client vaø server) phaûi goïi haøm WSAStartup ñeå khôûi taïo thö vieän lieân keát ñoäng Windows Socket DLL vaø haøm WSACleanup ñeå ñoùng thö vieän naøy. Tuy nhieân, ñoái vôùi öùng duïng vieát treân UNIX thì boä phaän quaûn lyù socket ñaõ ñöôïc heä ñieàu haønh naïp saün vaø do ñoù khoâng caàn goïi caùc haøm nhö WSAStartup, WSACleanup cuûa Windows NT.
CHÖÔNG III
PHÖÔNG PHAÙP MAÕ HOAÙ VAØ NEÙN AÂM THANH
III.1 CAÙC PHÖÔNG PHAÙP MAÕ HOAÙ
III.1.1 GIÔÙI THIEÄU CHUNG
Trong heä thoáng xöû lyù aâm thanh, aâm thanh ñöôïc maõ hoaù PCM. Caùc maõ hoaù naøy cho pheùp khoâi phuïc moät caùch töông ñoái trung thöïc tín hieäu aâm thanh trong daûi taàn nghe ñöôïc. Tuy nhieân trong moät öùng duïng ñaëc bieät nhö truyeàn döõ lieäu aâm thanh treân maïng, aâm thanh ñöôïc truyeàn vôùi toác ñoä thaáp hôn nhieàu. Töø ñoù xuaát hieän moät soá kyõ thuaät maõ hoaù vaø neùn tín hieäu aâm thanh nhö ADPCM, LPC, GSM….
Caùc loaïi phaàn meàm vaø phaàn cöùng thöïc hieän maõ hoaù vaø neùn aâm thanh sang caùc loaïi döõ lieäu soá thöôøng ñöôïc goïi laø codec(Coder-Decoder). Coù theå phaân loaïi caùc phöông phaùp maõ hoaù aâm thanh thaønh 3 loaïi :
Maõ hoaù daïng soùng(waveform codec) : Giöõ nguyeân hình daïng nguyeân thuyû cuûa soùng aâm. Phöông phaùp maõ hoaù naøy ñoøi hoûi toác ñoä döõ lieäu raát cao nhöng laïi cho chaát löôïng aâm thanh raát toát. Öu ñieåm cuûa boä maõ hoaù naøy laø ñoä phöùc taïp, giaù thaønh thieát keá, ñoä treã vaø coâng suaát tieâu thuï thaáp. Boä maõ hoaù soùng ñôn giaûn nhaát laø ñieàu bieân xung maõ (PCM)…Tuy nhieân nhöôïc ñieåm cuûa boä maõ hoaù laø khoâng taïo ñöôïc aâm thanh chaát löôïng cao taïi toác ñoä döôùi 16 kbps, boä maõ nguoàn khaéc phuïc ñöôïc nhöôïc ñieåm naøy.[4]
Maõ hoaù nguoàn (Source codec) : Cho pheùp ñaït ñöôïc toác ñoä truyeàn döõ lieäu thaáp, coù theå thöïc hieän taïi toác ñoä bit > 2kbps, nhöng chaát löôïng aâm thanh khoâng cao.
Maõ hoaù hoãn hôïp (hybrid codec) : Söû duïng caû hai phöông phaùp treân ñeå taïo ra tín hieäu aâm thanh coù chaát löôïng toát ôû toác ñoä döõ lieäu trung bình.
Raát toát
Toát
Trung bình
Chaát löôïng tieáng noùi
Maõ hoaù hoãn hôïp
Maõ hoaù daïng soùng
Maõ hoaù döï ñoaùn tuyeán tính LPC
Toác ñoä
2 4 8 16 32 64
Hình III.1 Bieåu ñoà so saùnh caùc phöông phaùp maõ hoaù
Maõ hoaù daïng soùng
Ñoøi hoûi toác ñoä bit raát cao nhöng taïo ra chaát löôïng aâm thanh hoaøn haûo vaø thôøi gian xöû lyù raát ít, bôûi vì phöông phaùp naøy chæ ñôn giaûn laáy maãu tín hieäu ôû toác ñoä naøo ñoù vaø löôïng töû hoaù töøng maãu duøng löôïng töû hoaù tuyeán tính. Caùch tieáp caän naøy goïi laø ñieàu bieán xung maõ(PCM). Aâm thanh maõ hoaù theo phöông phaùp PCM, laáy maãu toác ñoä 8KHz, löôïng töû 8bit/maãu, cho toác ñoä bit ra laø 64 kbps.
Phöông phaùp ñieàu bieân xung maõ vi phaân (DPCM) döï ñoaùn giaù trò hieän taïi döïa vaøo caùc giaù trò tröôùc cuûa caùc maãu quaù khöù, chæ löu tröõ giaù trò sai soá löôïng töû. Giaù trò sai soá naøy seõ nhoû hôn giaù trò thöïc cuûa maãu, do ñoù cho pheùp löu tröõ giaûm ñi moät phaàn.
Moät caûi tieán cuûa DPCM laø ñieàu bieán xung maõ vi phaân thích nghi(ADPCM). Boä tieán ñoaùn vaø löôïng töû hoaù trong phöông phaùp naøy coù khaû naêng thích nghi vôùi tín hieäu caàn maõ hoaù. ADPCM hoaït ñoäng toác ñoä 32 kbps cho chaát löôïng töông ñoái vôùi PCM 64 kbps.
Maõ hoaù döï ñoaùn tuyeán tính LPC
Moät vaán ñeà ñaùng quan taâm laø phöông phaùp maõ hoaù daïng soùng laø khi laáy maãu tín hieäu töông ñöông seõ cho ra doøng döõ lieäu khaù lôùn. Caùc phöông phaùp maõ hoaù nguoàn ñi theo moät caùch tieáp caän khaùc, ngöôøi ta phaûi qua taâm ñeán vieäc aâm thanh ñöôïc taïo ra nhö theá naøo, neáu coù theå moâ hình hoaù caùch taïo ra aâm thanh thì khoâng phaûi truyeàn ñi caùc maãu cuûa tín hieäu aâm thanh maø chæ caàn göûi ñi caùch thöùc taïo ra aâm ñoù treân ñeán boä maõ. Nhö vaäy theo phöông phaùp naøy thay vì maõ hoaù vaø truyeàn tröïc tieáp aâm thanh thì ngöôøi ta chæ maõ hoaù caùc tham soá taïo ra aâm thanh taïi nôi nhaän, töø caùc tham soá naøy boä toång hôïp tieáng noùi seõ toång hôïp neân tieáng noùi nhaân taïo. Nhöõng phöông phaùp ñi theo caùch tieáp caän naøy goïi laø Vocoder. Moâ taû ñôn giaûn nhaát cuûa moâ hình naøy laø maõ hoaù döï ñoaùn tuyeán tính (LPC). Phöông phaùp maõ hoaù Vocoder cho toác ñoä bit raát thaáp (>2 kbps) nhöng ñoä phöùc taïp cao hôn vôùi phöông phaùp maõ hoaù daïng soùng vaø chaát löôïng aâm thanh khoâng trung thöïc .
Maõ hoaù hoãn hôïp
Ñeå giaûi quyeát vaán ñeà cuûa phöông phaùp maõ hoaù daïng soùng vaø cuûa phöông phaùp maõ hoaù döï ñoaùn, moät nhoùm caùc phöông phaùp maõ hoaù söû duïng phöông phaùp AbS (Analysis by Synthesis) ñeå taïo ra moâ hình maùy phaùt aâm phöùc taïp hôn. Trong khi Vocoder söû duïng boä loïc tuyeán tính kích thích bôûi chuoãi xung tuaàn haøo hay chuoài nhieãu traéng ñeå taïo ra aâm höõu thanh hay voâ thanh, AbS söû duïng moät daõy caùc traïng thaùi ñöôïc löu tröõ trong codebook. Khi xem xeùt moät khung aâm thanh, AbS kieåm tra khung ñoù vôùi raát nhieàu tín hieäu kích thöôùc roài seõ choïn tín hieäu naøo ñöa ra keát quaû gaàn ñuùng nhaát vôùi aâm thanh ban ñaàu. Boä giaûi maõ chæ caàn bieát chæ soá cuûa xung kích thöôùc ñoù, sau ñoù tra codebook roài taùi taïo laïi aâm thanh. Moät soá caùc tham soá khaùc nhau nhö naêng löôïng cuûa söï kích thích vaø giaù trò chu kyø cuõng caàn ñeán khi giaûi maõ. Caùc phöông phaùp maõ ñi theo caùch naøy ñoøi hoûi quaù trình tính toaùn phöùc taïp, coù theå taát caû caùc muïc trong töø ñieån ñeàu phaûi thöû ñeå ñöa ra giaù trò toát nhaát.
Heä thoáng thoâng tin toaøn caàu GMS : GSM laø moä chuaån ñieän thoaïi ñöôïc Vieän Tieâu Chuaån Vieãn Thoâng Chaâu Aâu ETSI ñeå ra. Ñaàu vaøo cuûa boä neùn GMS 06.10 bao goàm caùc khung 160 maãu caùc tín gieäu PCM tuyeán tính laáy maãu taïi taàn soá 8 kHz. Chu kyø moãi khung laø 20 ms, ñaây laø khoaûng thôøi gian raát ngaén vaø trong khoaûng thôøi gian naøy cho pheùp ñöôïc coi tín hieäu aâm thanh oån ñònh. Ñoä treã truyeàn daãn thoâng tin ñöôïc tính baèng toång thôøi gian xöû lyù vaø kích thöôùc khung cuûa thuaät toaùn.
Boä maõ hoaù thöïc hieän vieäc neùn moät khung tín hieäu ñaàu vaøo 160 maãu (20 ms) vaøo moät khung 260 bit. Nhö vaäy moät giaây noù seõ thöïc hieän neùn ñöôïc 13.133 bit ( töông ñöông vôùi 1625 byte). Do vaäy ñeå neùn moät megabyte tín hieäu chæ caàn moät thôøi gian chöa ñaày 10 phuùt.[4]
Trung taâm cuûa quaù trình xöû lyù tín hieäu laø boä loïc. Ñaàu ra cuûa boä loïc phuï thuoäc raát nhieàu vaøo giaù trò ñaàu vaøo ñôn cuûa noù. Khi coù moät daõy caùc giaù trò ñöa qua boä loïc thì daõy tín hieäu naøy seõ ñöôïc duøng ñeå kích thích boä loïc. Daïng cuûa boä neùn GMS 06.10 duøng ñeå neùn tín hieäu aâm thanh bao goàm 2 boä loïc vaø moät giaù trò kích thöôùc ban ñaàu. Boä loïc ngaén haïn döï ñoaùn tuyeán tính ñöôïc ñaët taïi taàng ñaàu tieân cuûa quaù trình neùn vaø taïi taàng cuoái cuøng trong suoát quaù trình daõn. Noù ñöôïc kích thích bôûi ñaàu ra cuûa boä loïc döï ñoaùn daøi haïn (LTP).
III.1.2 PHÖÔNG PHAÙP ÑIEÀU BIEÁN XUNG MAÕ PCM
Maõ hoaù tín hieäu aâm thanh lieân qua tôùi caùc böôùc sau ñaây :
Tín hieäu aâm thanh ñöôïc laáy maãu vôùi taàn soá toái thieåu laø :
fs : taàn soá laáy maãu
fmax : taàn soá lôùn nhaát trong tín hieäu ñöôïc laáy maãu.
Vieäc laáy maãu nhö vaäy laø ñaûm baûo hoaøn toaøn khoâi phuïc laïi ñöôïc tín hieäu töông ñöông ban ñaàu bôûi thieát bò khoâi phuïc thieát bò. Taàn soá laáy maãu nhoû nhaát cuõng coù theå nhoû hôn 2fmax neáu taàn soá thaáp nhaát cuûa tín hieäu khaùc khoâng.
Bieân ñoä cuûa töøng maãu tín hieäu ñöôïc löôïng töû hoaù thaønh moät trong soá 2B möùc. Ñieàu naøy coù nghóa duøng B bit treân moät maãu vaø thoâng löôïng laø 2fsB bit/giaây vôùi tín hieäu ñöôïc loïc thoâng thaáp.
Caùc möùc bieân ñoä rieâng bieät ñöôïc theå hieän baèng caùc töø nhò phaân rieâng bieät coù chieàu daøi B. ví duï : vôùi B =2 thì moät töø coù theå theå hieän cho 4 möùc rieâng bieät baèng caùch söû duïng caùc töø maõ 00, 01, 10 vaø 11.
Ñoái vôùi vieäc giaûi maõ, caùc töøu nhò phaân ñöôïc öùng thaønh caùc möùc bieân ñoä vaø chuoãi xung bieân ñoä – thôøi gian ñöôïc loïc thoâng thaáp vôùi moät boä loïc coù daûi taàn giôùi haïn laø fs. Baây giôø chuùng ta giaû söû laø caùc böôùc a, c vaø d coù theå thöïc hieän moät caùch hoaøn toaøn chính xaùc, chuùng ta taäp trung vaøo vieäc xaùc ñònh caùc loãi löôïng töû xuaát hieän trong böôùc b.
Cho böôùc löôïng töû (kí hieâu : ). Neáu soá löôïng caùc möùc löôïng töû raát lôùn, ngöôøi ta giaû söû raèng sai soá löôïng töû coù phaân boá ñoàng nhaát nhö sau :
, - (1)
Ñieàu naøy seõ khoâng ñuùng neáu tín hieäu laø baõo hoaø boä löôïng tö. Ví du nhö bieåu dieãn hình 1, ñaàu ra cuûa boä löôïng töû coù theå baõo hoaø taïi 5 vôùi taàn soá ñaàu vaø vöôït qua soá löôïng vaø moãi löôïng töû trong tröôøng hôïp naøy seõ laø moät haøm taêng tuyeán tính.[4]
Hình III.2 a.Ñaëc tuyeán löôïng töû hoaù;b.Ñaëc tuyeát sai soá löôïng töû; c.VD löôïng töû ñeàu
Neáu nhö ta cho raèng boä löôïng töû khoâng bò baõo hoaø. Theo coâng thöùc (1) thì giaù trò bình phöông trung bình cuûa sai soá löôïng töû laø :
(2)
Neáu giaù trò ñoä roäng cuûa ñaàu vaøo X laø Xrms, thì tyû soá tín hieäu/nhieãu ñöôïc tính bôûi :
(3)
Ví duï, cho boä löôïng töû coù khoaûng bieân ñoä töø – 4Xrms ñeán + 4Xrms( ñeå thuaän tieän veà maët lyù thuyeát, thì ñoä roäng 8Xrms cuûa boä löôïng töû khoâng coù raøng buoäc rieâng, ngoaïi tröø caùc tröôøng hôïp ñaëc bieät. Ví duï, neáu tín hieäu PDF p(x) ñöôïc bieán ñoåi baèng haøm Gaussian trung bình – khoâng, thì caùc maãu tín hieäu seõ rôi beân ngoaøi khoaûng 8Xrms cuûa boä löôïng töû vôùi xaùc xuaát nhoû hôn 1/10.000). böôùc löôïng töû ñeàu coù theå ñöôïc thöïc hieän tyû soá cuûa khoaûng bieân ñoä treân soá löôïng caùc böôùc löôïng töû (soá caùc möùc ñaàu ra).
(4)
Töø (3) vaø (4) ta coù :
(5)
Coâng thöùc treân mieâu taû raát toát veà PCM vôùi caùc ñieàu kieän sau :
1.Heä thoáng hoaït ñoäng vôùi keânh saïch(khoâng nhieãu), chæ giôùi haïn veà sai soá löôïng töû( vaø khoâng gaây ra loãi caùc töø maõ khi keânh coù nhieãu).
2.Tín hieäu ñaàu vaøo ñuû phöùc taïp ñeå loaïi tröø caáu truùc thôøi gian hieån nhieân trong daïng tín hieäu loãi, nhö vaäy bieåu dieãn tónh cuûa loãi trong 1 ñöôïc theå hieän ñaày ñuû.
3.löôïng töû hoaù ñuû mòn(B>6) ñeå ngaên chaën nhöõng thaønh phaåm lieân quan ñeán tín hieäu trong daïng tín hieäu loãi, sai soá coù theå ñöôïc ño trong bieåu thöùc coâng suaát nhieãu hay laø bieán sai soá 2.
4.Boä löôïng töû ñöôïc saép vôùi thanh bieân ñoä töø (-4Xrms;+4Xrms)
nhö vaäy trong löôïng töû ñeàu, cöù theâm 1 bit thì ñöôïc lôïi 6 dB vaø ñeå coù chaát löôïng thích hôïp thì B >11 do ñoù thoâng löôïng töông ñoái lôùn.
III.2 CAÙC PHÖÔNG PHAÙP NEÙN TIEÁNG NOÙI
III.2.1 GIÔÙI THIEÄU CHUNG
Y Ùtöôûng neùn tieáng noùi laø ñeå giaûm kích thöôùc nhaèm giuùp ít toán baêng thoâng truyeàn qua maïng. Doøng döõ lieäu tieáng noùi ñöôïc giaûi neùn ôû toác ñoä laáy maãu maëc ñònh ( 8bits/maãu, 8 khz, keânh mono) seõ yeâu caàu ñöôøng truyeàn coù toác ñoä 8000 maãu/giaây * 8 bits/ maãu = 64 Kbits/giaây ñeå truyeàn döõ lieäu qua maïng. Do ñoù, tuøy theo toác ñoä ñöôøng truyeàn thöïc teá treân moãi maïng maø choïn giaûi phaùp neùn hay khoâng neùn döõ lieäu tröôùc khi truyeàn döõ lieäu aâm thanh qua maïng, cuõng nhö choïn tæ leä neùn laø bao nhieâu cho phuø hôïp (choïn giaûi thuaät neùn). Vì neáu döõ lieäu ñöôïc neùn thì phaûi giaûi neùn khi ñöôïc truyeàn ñeán maùy nhaän, do ñoù cuõng toán thôøi gian ñeå neùn vaø giaûi neùn döõ lieäu, ñieàu naøy daãn ñeán aûnh höôûng thôøi gian thöïc cuûa heä thoáng.
Ñoái vôùi caùc maïng cuïc boä, thöôøng coù toác ñoä truyeàn cuûa maïng cao neân coù theå khoâng caàn phaûi neùn tieáng noùi tröôùc khi truyeàn.
Ngöôïc laïi, ñoái vôùi maïng Internet, heä thoáng ñöôïc keát noái vôùi Internet thoâng qua caùc modem chuaån coù toác ñoä thaáp 14,4 Kbits/s hoaëc 28,8Kbits/s thì nhaát thieát phaûi neùn tieáng noùi tröôùc khi truyeàn vaø giaûi neùn tröôùc khi phaùt. Hai phöông phaùp neùn aâm thanh thöôøng ñöôïc duøng nhaát ñeå giaûm baêng thoâng laø GSM vaø ADPCM.[2]
III.2.2 CAÙC PHÖÔNG PHAÙP NEÙN CUÏ THEÅ
III.2.2.1 Phöông phaùp neùn tieáng noùi theo chuaån GSM
Phaùt trieån taïi Ñaïi hoïc Kyõ thuaät Berlin vaøo naêm 1992, GSM laø moät trong nhöõng phöông phaùp neùn aâm thanh phöùc taïp nhaát ñang ñöôïc söû duïng, cho tæ leä neùn 1:10. Giaûi thuaät GSM döïa treân giao thöùc truyeàn thoâng Mobile Phone, hieän taïi laø giao thöùc phoå bieán nhaát taïi Chaâu AÂu ñoái vôùi ñieän thoaïi di ñoäng.
Ñaàu vaøo cuûa GSM bao goàm caùc frames 160 tín hieäu, nhöõng tín hieäu PCM tuyeán tính 13 bits laáy maãu ôû 8 Khz. GSM coù saün trong thö vieän C coù theå ñöôïc duøng ñeå taïo ra moät ñoái töôïng gsm giöõ traïng thaùi caàn thieát hoaëc ñeå maõ hoùa nhöõng maãu PCM tuyeán tính thaønh caùc frames GSM, hoaëc giaûi maõ caùc frames GSM thaønh caùc frames PCM tuyeán tính. Boä maõ hoùa neùn 160 frames PCM 16 bits thaønh caùc frames GSM 260 bits. Töông öùng moät giaây tieáng noùi thaønh 1625 bytes. Bôûi vì maãu 260 bits khoâng chaün ñeå gaén vaøo caùc bytes 8 bits, neân boä maõ hoùa seõ maõ hoùa frame 160 bytes thaønh frame GSM 264 bits. Moät buffer GSM neùn 1 Mb coù theå löu tieáng noùi gaàn 10 phuùt.[2]
Moät doøng döõ lieäu tieáng noùi giaûi neùn 16 bits/maãu ôû 8Khz yeâu caàu baêng thoâng toác ñoä 128 Kbits/s, trong khi ñoù baêng thoâng ñeå truyeàn qua maïng neáu duøng giaûi thuaät neùn GSM , tieáng noùi 16 bits/maãu chæ caàn:
( 264 bits * 8.000 maãu/giaây)/160 maãu = 13,2 Kbits/giaây
Cho tæ leä neùn 128/13,2 = 9,7 töông ñöông 10 :1.
III.2.2.2 Phöông phaùp neùn ADPCM
Nguyeân taéc :
Laø moät phöông phaùp coù theå ñöôïc duøng ñeå neùn caùc khoái döõ lieäu tieáng noùi tröôùc khi chuùng ñöôïc truyeàn ñeán caùc maùy nhaän vaø giaûi neùn chuùng ñeå phaùt laïi sau khi ñöôïc nhaän töø ñöôøng truyeàn.
Hình sau laø moät giaûn ñoà khoái ñôn giaûn cuûa boä maõ hoùa vaø giaûi maõ ADPCM :
Hình III.3 Sô ñoà khoái boä maõ hoaù vaø giaûi maõ ADPCM
Boä maõ hoùa ADPCM giaû söû raèng nhöõng maãu aâm thanh keá caän nhau seõ gioáng nhau, vì theá thay vì bieåu dieãn moãi maãu ñoäc laäp nhö PCM. ADPCM tính toaùn söï cheânh leäch giöõa caùc maãu aâm thanh vaø giaù trò tieân ñoaùn cuûa noù vaø taïo ra nhöõng giaù trò vi phaân PCM. Coù nhieàu giaûi thuaät ADPCM khaùc nhau ñöôïc ñeà nghò. Trong phaïm vi luaän vaên naøy em tìm hieåu vaø öùng duïng giaûi thuaät ñöa ra bôûi IMA (Interactive Multimedia Association) .
Giaûi thuaät IMA ADPCM neùn nhöõng maãu PCM tuyeán tính thaønh caùc möùc löôïng hoùa 4 bits, trong ñoù moãi maãu DPCM ñöôïc bieåu dieãn baèng caùc giaù trò aâm thanh 16 bits, do ñoù giaûi thuaät naøy cung caáp moät tæ leä neùn laø 4:1. Ví duï tieáng noùi 16 bits/maãu, 8 Khz, keânh mono yeâu caàu toác ñoä truyeàn döõ lieäu laø 128 Kbits/s , khi neùn vôùi giaûi thuaät IMA_ADPCM chæ caàn toác ñoä truyeàn döõ lieäu 32 Kbits/s laø ñuû.
Quaù trình thöïc hieän cuûa giaûi thuaät IMA_ADPCM laø ñoïc töø nhöõng boä ñeäm coù giaù trò kieåu nguyeân vaø neùn chuùng thaønh moät maãu aâm thanh 16 bits ñöôïc bieåu dieãn baèng caùc möùc löôïng hoùa 4 bit. Bôûi vì khoâng coù giôùi haïn trong kích thöôùc buffers tieáng noùi neân nhöõng maõ ADPCM ñöôïc keát hôïp moät caùch deã daøng vôùi caùc phaàn coøn laïi cuûa chöông trình ñeå neùn tieáng noùi khi thu vaø giaûi neùn trôû laïi khi phaùt.
Giaûi thuaät neùn IMA ADPCM :
Theo sô ñoà maõ hoùa treân chuùng ta thaáy giaûi thuaät IMA ADPCM tính toaùn söï cheânh leäch giöõa maãu aâm thanh hieän taïi X[n] vaø maãu ñaõ tieân ñoaùn tröôùc Xp[n-1] vaø söû duïng söï cheânh leäch ñoù ñeå tính toaùn möùc löôïng hoùa D[n] cho moãi maãu. Giaù trò Xp[n-1] chæ laø giaù trò treã thôøi gian cuûa giaù trò X[n]. Hình sau chæ ra sô ñoà khoái cuûa quaù trình löôïng hoùa duøng giaûi thuaät IMA. Moãi möùc ñaàu ra cuûa boä löôïng hoùa ñöôïc bieåu dieãn baèng boán bits. Bit thöù tö laø bit daáu cuûa möùc ñoä löôïng hoùa.[2]
Hình III.4 Sô ñoà giaûi thuaät maõ hoaù neùn IMA ADPCM
Töø sô ñoà giaûi thuaät ta thaáy raèng bit thöù ba ñöôïc caøi ñaët leân 1 neáu ñoä cheânh leäch giöõa X[n] vaø Xp[n-1] laø lôùn hôn hay baèng step_size. Sau ñoù step_size ñöôïc chia 2 vaø so saùnh trôû laïi vôùi ñoä cheânh leäch (ñoä cheânh leäch seõ ñöôïc tính laïi Maãu = maãu-kích thöôùc maãu taïi böôùc giaûi thuaät neáu bit thöù ba ñöôïc caøi leân1). Bit thöù hai cuõng ñöôïc caøi leân 1 khi ñoä cheânh leäch môùi ≥ kích thöôùc maãu taïi böôùc giaûi thuaät/2. Boä maõ hoùa moät laàn nöõa laò chia kích thöôùc maãu taïi böôùc giaûi thuaät cho 2 vaø so saùnh vôùi ñoä cheânh leäch môùi vaø thieát laäp giaù trò cho bit moät töông töï nhö caùc böôùc tröôùc.
CHÖÔNG IV
TÌM HIEÅU HOÃ TRÔÏ CUÛA WINDOWS SDK
TRONG XÖÛ LYÙ VAØ TRUYEÀN NHAÄN AÂM THANH
IV.1 MOÂI TRÖÔØNG LAÄP TRÌNH SDK ÑOÁI VÔÙI TRUYEÀN AÂM THANH
Moâi tröôøng Windows SDK laø moâi tröôøng laäp trình ña phöông tieän döôùi Windows, cung caáp caùc haøm caáp thaáp raát thích hôïp cho caùc öùng duïng treân maïng. Moät caùch thöùc ñôn giaûn nhaát trong vieäc xuaát döõ lieäu waveform ra loa laø duøng haøm PlaySound. Chuùng ta coù theå thao taùc vôùi daïng döõ lieäu waveform baèng caùc haøm caáp thaáp do heä thoáng cung caáp. Ngoaøi ra heä thoáng coøn cung caáp moät cô cheá giuùp ngöôøi laäp trình giao tieáp deã daøng hôn vôùi thieát bò, ñoù laø caùc haøm MCI.[6]
IV.1.1 CAÁU TRUÙC FILE WAVE VAØ HAØM PLAYSOUND
IV.1.1.1 Caáu truùc file aâm thanh wave
Moät file wave thaät söï laø moät phaàn cuûa moät lôùp file lôùn hôn duøng bôûi caùc haøm multimedia cuûa windows laø caùc file RIFF ( Resource Interchange File Format). Moät file Riff bao goàm moät hoaëc nhieàu chunk. Trong moãi chunk coù con troû chæ ñeán chunk keá tieáp. Moãi chunk coù moät moâ taû kieåu theo sau bôûi moät soá döõ lieäu. Moät öùng duïng ñeå ñoïc caùc file RIFF coù theå böôùc qua moät soá chunk, ñoïc caùc chunk caàn quan taâm vaø boû qua caùc chunk khoâng lieân quan. Chunk file RIFF luoân luoân baét ñaàu baèng header sau:
Typedef struct {
FOURCC ckID;
DWORD cksize;
}CK;
Trong ñoù:
FOURCC laø moät vuøng 4 bytes ñònh nghóa loaïi chunk. Vuøng naøy seõ chöùa töø WAVE ñoái vôùi file wave.
ckSize ñaëc taû kích thöôùc döõ lieäu trong chunk, sau header naøy chuùng ta seõ tìm thaáy cSize bytes döõ lieäu.
Caùc chunk coù theå chöùa caùc subchunks. Caáu truùc thaät söï moät file wave cô baûn bao goàm moät chunk fmt theo sau laø moät chunk döõ lieäu. Coù theå coù nhöõng chunk khaùc phía sau chunk WAVE nhöng thieát bò söû duïng file WAVE seõ boû qua caùc chunk naøy. Hình sau moâ taû caáu truùc file RIFF chöùa döõ lieäu WAVE.
ID
SIZE
FROM TYPE
"fmt"
SIZE
"data"
SIZE
Hai subchunk trong chunk wave ñaëc taû thoâng tin veà moät aâm thanh file wave vaø sau ñoù laø chính döõ lieäu aâm thanh. Chunk fmt chöùa chuû yeáu ñoái töôïng WAVEFORMAT vaø moät soá döõ lieäu theâm vaøo gaén ôû cuoái chunk. Moät ñoái töôïng WAVEFORMAT ñöôïc ñònh nghóa nhö sau :
Typedef struct waveformar_tag{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
} WAVEFORMAT;
Trong ño ù:
wFormatTag : Chöùa haèng WAVE_FORMAT_PCM ñöôïc ñònh nghóa trong MMSYSTEM.H nhö sau:
# define WAVE_FORMAT_PCM 1
Giaù trò WAVE_FORMAT_PCM baùo cho phaàn meàm ñoïc file wave bieát caùch aâm thanh trong noù ñöôïc maõ hoaù.
nChannels : Cuûa ñoái töôïng WAVEFORMAT coù 2 giaù trò :
1 ñoái vôùi aâm thanh mono.
2 ñoái vôùi aâm thanh stereo.
nSamplePerSec : Cho bieát taàn soá laáy maãu cuûa aâm thanh ñeå coù theå thu vaø phaùt cuøng moät toác ñoä, giaù trò thoâng thöôøng cuûa field naøy nhaän moät nhöõng giaù trò sau:
11025 - 11,025Khz
22055 - 22,050Khz
44100 - 44,1 Khz
nAvgBytesPerSec : Cho bieát soá bytes trung bình trong moãi giaây ñeå thu vaø phaùt döõ lieäu wave.
nBlockAlign : Xaùc ñònh soá bytes yeâu caàu chöùa trong moät maãu
Nhöõng maãu coù ñoä phaân giaûi nhoû hôn hoaëc baèng 8 bits coù theå löu vaøo 1 bytes.
Nhöõng maãu coù ñoä phaân giaûi töø 9 ñeán 16 bits yeâu caàu 2 bytes.
Nhöõng maãu stereo yeâu caàu soá bytes gaáp ñoâi nhöõng mono.
Trong caáu truùc treân khoâng ñònh nghóa soá bits thaät söï trong moät maãu döõ lieäu aâm thanh file wave, ñeå ñònh nghóa soá bits trong moät maãu ta duøng caáu truùc sau:
Typedef struct pvmwaveformat_tag{
WAVEFORMAT wf;
WORD wBitsPerSample;
} PCMWAVEFORMAT;
Trong ñoù:
wf: Ñoái vôùi döõ lieäu subchunk fmt cuûa moät chunk WAVE chuùng ta thaät söï laøm vieäc vôùi ñoái töôïng PCMWAVEFORMAT.
nBitsPerSample: Xaùc ñònh soá bits thaät söï trong moät maãu .
Trong moät maãu mono 8 bits döõ lieäu cuûa chunk döõ lieäu goàm moät chuoãi daøi coù giaù trò 1 byte. Nhöõng maãu stereo ñöôïc chia ra vôùi byte ñaàu duøng cho keânh beân traùi vaø byte thöù hai duøng cho keânh beân phaûi, nhö vaäy moãi maãu stereo 8 bits seõ caàn 2 bytes.[6]
Ñeå laøm vieäc vôùi moät file RIFF bao goàm caùc böôùc sau :
Môû file.
Vaøo chunk caàn thieát.
Chuyeån con troû file vaøo vò trí baét ñaàu döõ lieäu cuûa chunk.
Hoaøn taát, ra khoûi chunk.
Vaøo chunk keá tieáp.
IV.1.1.2 Haøm Playsound
Chuùng ta duøng haøm PlaySound ñeå play döõ lieäu daïng waveform hoaëc chuùng ta coù theå duøng haøm sndPlaySound. Tuy nhieân trong moâi tröôøng Win32 thì neân duøng haøm PlaySound.
Haøm PlaySound cho pheùp chuùng ta chæ ñònh caùc thoâng soá nguoàn aâm thanh theo caùc caùch sau:
Duøng teân alias khai baùo trong file WIN.INI
Duøng teân file.
Duøng chæ soá nhaän daïng taøi nguyeân
Waveform-Audio Files
Trong moâi tröôøng Windows, phaàn lôùn caùc file aâm thanh daïng waveform ñeàu coù phaàn môû roâng laø .WAV
Ví duï döôùi ñaây minh hoïa cho vieäc phaùt file aâm thanh “AmThanh.WAV”
PlaySound("C:\\SOUNDS\\AmThanh.WAV", NULL, SND_SYNC);
Play sound theo caùc hieän töôïng
Haøm PlaySound coøn cho pheùp chuùng ta xuaát aâm thanh tuøy theo moät söï kieän naøo ñoù xaûy ra trong heä thoáng nhö click mouse hay nhaán moät phím naøo ñoù. Heä thoáng seõ phaùt aâm thanh tuøy theo hieäc töôïng xaûy ra ñeå caûnh baùo ngöôøi söû duïng. Aâm thanh daïng naøy ñöôïc goïi laø sound events.
Ñeå xaùc ñònh sound event, haøm PlaySound seõ ñöôïc goïi vôùi thoâng soá pszSound troû ñeán baûng ñaêng kyù söï kieän. Ví duï chuùng ta seõ goïi haøm PlaySound öùng vôùi söï kieän mouse click nhö sau:
PlaySound("MouseClick", NULL, SND_SYNC);
IV.1.2 GIAO TIEÁP AUDIO VÔÙI BAÈNG CAÙC DÒCH VUÏ CAÁP THAÁP
Trong phaàn naøy chuùng ta seõ khaûo saùt vieäc giao tieáp vôùi thieát bò audio baèng caùc haøm caáp thaáp, caùc haøm naøy phuø hôïp vôùi caùc öùng duïng caàn giao tieáp. Caùc haøm vaø caáu truùc caáp thaáp naøy ñeàu coù prefix laø wave.[6]
Thieát bò vaø döõ lieäu
Khi muoán giao tieáp vôùi thieát bò, chuùng ta phaûi môû thieát bò ñeå söû duïng vaø sau khi söû duïng xong thì phaûi ñoùng thieát bò laïi. Trong khi söû duïng chuùng ta seõ truy xuaát caùc tính naêng cuûa thieát bò vaø theo doõi thieát bò thöïc thi baèng caùc handles vaø Identifiers.
IV.1.3 SÖÛ DUÏNG CAÙC THIEÁT BÒ XUAÁT NHAÄP, HOÃ TRÔÏ WAVEFORM AUDIO
Chuùng ta duøng haøm waveOutOpen ñeå môû thieát bò ñaàu ra nhaèm xuaát döõ lieäu daïng waveform. Haøm seõ môû thieát bò waveOut vaø traû handle veà cho öùng duïng. Heä thoáng multimedia seõ hoã trôï nhieàu daïng output döõ lieäu khaùc nhau do ñoù khi môû thieát bò neáu caàn chuùng ta phaûi chæ ñònh roõ thoâng soá döõ lieäu. Ví duï chuùng ta duøng côø WAVE_MAPPER ñeå xaùc ñònh thieát bò output seõ xuaát aâm thanh daïng waveform.
Doø tìm thieát bò
Windows cung caáp caùc haøm sau giuùp chuùng ta xaùc ñònh caùc thieát bò trong heä thoáng phuø hôïp cho yeâu caàu cuûa mình.
Haøm
Chöùc naêng
AuxGetNumDevs
Truy xuaát soá löôïng caùc thieát bò saün coù trong heä thoáng
WaveInGetNumDevs
Truy xuaát soá löôïng caùc thieát bò nhaäp hoã trôï waveform audio saün coù trong heä thoáng
WaveOutGetNumDevs
Truy xuaát soá löôïng caùc thieát bò xuaát hoã trôï waveform audio saün coù trong heä thoáng
Caùc thieát bò khai baùo trong heä thoáng ñöôïc ñaùnh caùc chæ soá nhaän daïng baét ñaàu töø 0. Sau khi xaùc ñònh soá löôïng caùc thieát bò saün coù trong heä thoáng, chuùng ta coù theå doø tìm khaû naêng cuûa töøng thieát bò baèng caùc haøm sau:
Haøm
Chöùc naêng
AuxGetDevCaps
Truy xuaát khaû naêng cuûa thieát bò xuaát
WaveInGetDevCaps
Truy xuaát khaû naêng cuûa thieát bò nhaäp daïng waveform
WaveOutGetDevCaps
Truy xuaát khaû naêng cuûa thieát bò xuaát daïng waveform
Caùc haøm truy xuaát naøy seõ truy xuaát naøy seõ laáy caùc caáu truùc lieân quan ñeán khaû naêng cuûa thieát bò. Caùc caáu truùc döôùi ñaây seõ töông öùng vôùi caùc haøm lieät keâ ôû treân:
Haøm
Structure
AuxGetDevCaps
AUXCAPS
WaveInGetDevCaps
WAVEINCAPS
WaveOutGetDevCaps
WAVEOUTCAPS
Thieát bò waveform coù khaû naêng hoã trôï caùc daïng format khoâng chuaån. Daïng format khoâng chuaån naøy ñöôïc duøng trong caáu truùc WAVEFORMATEX.
Handle vaø Identifier cuûa thieát bò
Khi môû thieát bò, chuùng ta seõ nhaän ñöôïc handle hay thoâng soá Identify cuûa thieát bò. Chuùng ta seõ ñieàu khieån thieát bò qua caùc thoâng soá naøy.
Söï khaùc bieät giöõa handle vaø identify laø khoù thaáy nhöng raát quan troïng.
Identitier cuûa thieát bò ñöôïc chæ ñònh ngaàm ñònh töø soá löôïng caùc thieát bò saün coù trong heä thoáng. Identifier seõ ñöôïc traû veà khi chuùng ta duøng caùc haøm auxGetNumDevs, waveInGetNumDevs, or waveOutGetNumDevs Haøm.
Handle cuûa thieát bò laø thoâng soá traû veà cuûa device driver khi chuùng ta duøng caùc haøm waveInOpen hay waveOutOpen.
Waveform-Audio Output Data Types
Caùc thoâng soá döôùi ñaây ñöôïc duøng cho thieát bò waveform output
Caáu truùc
Chöùc naêng
HWAVEOUT
Handle cuûa thieát bò waveform output
WAVEFORMATEX
Caáu truùc duøng chæ ñònh daïng format thieát bò output/ input
WAVEHDR
Caáu truùc duøng laøm header cho khoái döõ lieäu waveform. Caáu truùc ñöôïc duøng cho caû thieát bò output vaø input
WAVEOUTCAPS
Caáu truùc doø hoûi khaû naêng cuûa thieát bò output.
Chæ ñònh daïng format cuûa döõ lieäu waveform audio
Khi chuùng ta môû thieát bò output baèng haøm waveOutOpen, thoâng soá pwfx seõ chæ ñònh caáu truùc WAVEFORMATEX xaùc ñònh daïng format cuûa döõ lieäu waveform. Ñaây laø caáu truùc môû roâng cuûa caáu truùc WAVEFORMAT.
Ghi döõ lieäu waveform
Sau khi môû thieát bò xuaát, chuùng ta coù theå xuaát döõ lieäu baèng caùch goïi haøm waveOutWrite. Haøm seõ göûi khoái döõ lieäu aâm thanh ra thieát bò xuaát. Chuùng ta duøng caáu truùc WAVEHDR ñeå chæ ñònh header cuûa khoái döõ lieäu ñöôïc göûi ra. Header naøy goàm con troû tôùi khoái döõ lieäu ñaõ lock, chieàu daøi khoái döõ lieäu vaø moät soá thoâng soá côø. Khoái döõ lieäu phaûi ñöôïc prepare tröôùc khi ñem ra söû duïng.
Sau khi göûi khoái döõ lieäu ñeán thieát bò output, chuùng ta phaûi chôø driver hoaøn taát vieäc xöû lyù khoái döõ lieäu tröôùc khi giaûi phoùng noù. Khi chuùng ta caàn göûi nhieàu khoái döõ lieäu lieân tuïc, chuùng ta seõ phaûi theo doõi vieäc xöû lyù hoaøn taát khoái döõ lieäu ñeå coù theå göûi khoái tieáp theo.
PCM Waveform-Audio Data Format
Thoâng soá lpData trong caáu truùc WAVEHDR seõ troû ñeán döõ lieäu ñaõ ñöôïc laáy maãu. Ñoái vôùi döõ lieäu PCM 8-bit, moãi giaù trò laáy maãu ñöôïc bieåu dieãn baèng moät soá 8 bit khoâng daáu. Ñoái vôùi döõ lieäu PCM 16-bit, moãi giaù trò laáy maãu ñöôïc bieåu dieãn baèng moät soá 16 bit khoâng daáu. Baûng döôùi ñaây cho chuùng ta thaáy caùc giaù trò cao nhaát, thaáp nhaát cuõng nhö giaù trò trung bình cuûa döõ lieäu PCM:
Data format
Maximum value
Minimum value
Midpoint value
8-bit PCM
255(0xFF)
0
128 (0x80)
16-bit PCM
32,767 (0x7FFF)
-32,768 (0x8000)
0
Caùc goùi döõ lieäu PCM
Thöù töï cuûa döõ lieäu thay ñoåi tuøy theo daïng format 8-bit hay 16-bit, stereo hay mono. Baûng döôùi ñaây trình baøy caùc goùi döõ lieäu cuûa caùc daïng PCM khaùc nhau:
PCM waveform
Chöùc naêng
8-bit mono
Moãi giaù trò laáy maãu laø 1 byte töông öùng moät keânh. Caùc giaù trò maãu xeáp theo thöù töï 1, 2, 3, 4 . . .
8-bit stereo
Moãi giaù trò laáy maãu laø 2 byte. Caùc giaù trò maãu xeáp theo thöù töï 1, 2, 3, 4 . . . Vôùi moãi giaù trò maãu byte ñaàu laø keânh 0 (traùi) coøn byte sau laø keânh 1 (phaûi).
16-bit mono
Moãi giaù trò laáy maãu laø 2 byte. Caùc giaù trò maãu xeáp theo thöù töï 1, 2, 3, 4 . . . Vôùi moãi giaù trò maãu byte ñaàu laø byte thaáp cuûa keânh 0 coøn byte sau laø byte cao cuûa keânh 0.
16-bit stereo
Moãi giaù trò laáy maãu laø 4 byte. Caùc giaù trò maãu xeáp theo thöù töï 1, 2, 3, 4 . . . Vôùi moãi giaù trò maãu byte ñaàu laø byte thaáp cuûa keânh 0 (traùi), byte thöù 2 laø byte cao cuûa keânh 0, byte thöù 3 laø byte thaáp cuûa keânh 1 (phaûi) coøn byte thöù 4 laø byte cao cuûa keânh 1.
Ñoùng thieát bò waveform-Audio Output
Sau khi thöïc thi coâng vieäc xong, chuùng ta seõ goïi haøm waveOutClose ñeå ñoùng thieát bò. Khi thieát bò ñang thöïc thi maø goïi haøm naøy thì loãi seõ xaûy ra. Neáu chuùng ta muoán ñoùng thieát bò giöõa chöøng thì ñaàu tieân chuùng ta neân goïi haøm waveOutReset tröôùc khi ñoùng thieát bò. Nhöng tröôùc ñoù cuõng caàn goïi haøm waveOutUnprepareHeader ñeå unprepare taát caû caùc khoái döõ lieäu.
Playing Waveform-Audio Files
Chuùng ta coù theå duøng caùc haøm sau ñaây ñeå xuaát döõ lieäu daïng aâm thanh ra loa:
Haøm
Chöùc naêng
MessageBeep
Xuaát aâm thanh döôùi daïng thoâng baùo cuûa heä thoáng
SndPlaySound
Xuaát aâm thanh döôùi daïng ñaêng kyù tröôùc trong heä thoáng hay laø noäi dung cuûa moät file wave
PlaySound
Gioáng nhö haøm treân vaø theâm cô cheá truy xuaát tröïc tieáp taøi nguyeân.
Caùc haøm PlaySound vaø sndPlaySound seõ naïp hoaøn toaøn noäi dung file wave vaøo boä nhôù vaø xuaát ra ngoõ output. Khaû naêng boä nhôù cuûa chuùng coù giôùi haïn neân chuùng chæ quaûn lyù ñöôïc caùc noäi dung döôùi 100KB. Khi laøm vieäc vôùi caùc file coù noäi dung lôùn hôn thì chuùng ta coù theå söû duïng caùc dòch vuï do MCI cung caáp.
Söû duïng Windows message trong vieäc quaûn lyù khi playback
Caùc Thoâng baùo döôùi ñaây coù theå ñöôïc söû duïng trong quaù trình xuaát döõ lieäu:
Thoâng baùo
Chöùc naêng
MM_WOM_CLOSE
Ñöôïc göûi ñi khi ñoùng thieát bò baèng haøm waveOutClose
MM_WOM_DONE
Ñöôïc göûi ñi sau khi driver hoaøn taát vieäc xuaát döõ lieäu baèng haøm wafveOutWrite.
MM_WOM_OPEN
Ñöôïc göûi ñi khi thieát bò ñöôïc môû baèng haøm waveOutOpen.
Caùc thoâng soá wParam vaø lParam cuõng raát caàn thieát. Thoâng soá wParam luoân luoân xaùc ñònh handle cuûa thieát bò waveform-audio. Ñoái vôùi thoâng soá lParam, Thoâng baùo MM_WOM_DONE duøng thoâng soá naøy troû tôùi caáu truùc WAVEHDR chæ ñònh suï hoaøn taát cuûa döõ lieäu trong khi thoâng soá naøy khoâng ñöôïc hai Thoâng baùo coøn laïi duøng. Vieäc duøng naøy raát höõu hieäu, Thoâng baùo MM_WOM_DONE seõ laø tín hieäu ñöôïc baùo veà sau khi vieäc playback khoái döõ lieäu hoaøn taát. Ta seõ tieáp nhaän Thoâng baùo naøy vaø giaûi phoùng caùc bieán coù lieân quan.
Thay ñoåi volume cuûa quaù trình playback döõ lieäu waveform audio
Chuùng ta seõ duøngcaùc haøm sau ñaây ñeå laáy thoâng soá volume cuõng nhö thieát laäp caùc thoâng soá naøy theo yeâu caàu.
Haøm
Chöùc naêng
WaveOutGetVolume
Truy xuaát möùc volume cuûa thieát bò xuaát
WaveOutSetVolume
Thieát laäp möùc volume cho thieát bò
Giaù trò volume laø moät soá doubleword. Khi audio format laø stereo, 16 bit cao chæ giaù trò volume cuûa channel phaûi vaø 16 bits thaáp chæ giaù trò volume cuûa channel traùi. Coøn neáu ôû caùc thieát bò khoâng hoã trôï 2 keânh thì 16 bit thaáp seõ ñöôïc söû duïng chæ giaù trò volume coøn 16 bit cao seõ khoâng duøng ñeán.
Giaù trò volume thay ñoåi töø giaù trò 0x0 (silence) cho ñeán möùc 0xFFFF (maximum)
Recording Waveform Audio
Chuùng ta coù theå söû duïng dòch vuï thu aâm thanh theo chuaån MCI. Tuy nhieân neáu thaáy caàn thieát, chuùng ta coù theå söû duïng caùc haøm thu aâm thanh caáp thaáp.
Caùc thoâng soá döõ lieäu döôùi ñaây seõ ñaëc tröng cho daïng döõ lieäu waveform audio input
Structure
Chöùc naêng
HWAVEIN
Handle cuûa thieát bò input
WAVEFORMATEX
Caáu truùc cuûa daïng döõ lieäu ñöôïc thieát bò input hoã trôï
WAVEHDR
Caáu truùc duøng laøm header cuûa khoái döõ lieäu input. Noù cuõng ñöôïc duøng khi xuaát döõ lieäu ra Output
WAVEINCAPS
Caáu truùc duøng doø hoûi caùc khaû naêng cuûa thieát bò input
Tröôùc khi baét ñaàu coâng vieäc thu döõ lieäu, chuùng ta phaûi duøng haøm waveInGetDevCaps ñeå doø hoûi khaû naêng cuõng nhö xaùc ñònh caùc thuoâïc tính cuûa thieát bò. Haøm seõ traû veà caáu truùc WAVEINCAPS xaùc ñònh caùc thoâng soá mong muoán.
Opening Waveform-Audio Input Devices
Ñeå thu döõ lieäu, tröôùc heát chuùng ta duøng haøm waveInOpen ñeå môû thieát bò waveform input. Neáu thöïc thi thaønh coâng, haøm seõ traû veà cho chuùng ta handle cuûa thieát bò.
Managing Waveform-Audio Recording
Sau khi môû thieát bò, chuùng ta coù theå tieán haønh vieäc thu döõ lieäu. Daïng döõ lieäu waveform thu ñöôïc seõ ñöôïc ñöa vaøo buffer, buffer naøy ñöôïc troû ñeán trong caáu truùc WAVEHDR. Tröôùc khi ñöôïc söû duïng, chuùng ta phaûi prepare buffer naøy.
Windows cung caáp cho chuùng ta caùc haøm sau ñaây duøng thu döõ lieäu waveform:
Haøm
Chöùc naêng
WaveInAddBuffer
Göûi moät buffer cho device driver, thieát bò seõ thu döõ lieäu vaøo khoái naøy
WaveInReset
Ngöøng thu döõ lieäu vaø ñaùnh daáu taát caû caùc buffer ñaõ thu xong
WaveInStart
Baét ñaàu thu döõ lieäu.
WaveInStop
Keát thuùc vieäc thu döõ lieäu
Chuùng ta duøng haøm waveInAddBuffer ñeå göûi caùc khoái buffer tôùi device driver. Khi döõ lieäu ñöôïc ñieàn ñaày vaøo buffer, öùng duïng seõ ñöôïc thoâng baùo baèng window Thoâng baùo, callback Thoâng baùo, thread Thoâng baùo, hay event, tuøy theo côø thoâng baùo ñöôïc chæ ñònh trong haøm open device.
Tröôùc khi baét ñaàu thu döõ lieäu, chuùng ta phaûi göûi ít nhaát moät buffer döõ lieäu cho thieát bò input vaø khi ñoùng thieát bò, chuùng ta goïi haøm waveInReset ñeå ñaùnh daáu caùc buffer ñaõ ñöôïc thu xong.
Using Window Messages to Manage Waveform-Audio Recording
Caùc Thoâng baùo sau ñaây seõ ñöôïc duøng ñeå quaûn lyù vieäc thu döõ lieäu daïng waveform audio:
Thoâng baùo
Chöùc naêng
MM_WIM_CLOSE
Ñöôïc göûi ñi khi thieát bò ñoùng laïi khi goïi haøm waveInClose
MM_WIM_DATA
Ñöôïc göûi ñi khi thieát bò thu ñaày moät buffer khi goïi haøm waveInAddBuffer
MM_WIM_OPEN
Ñöôïc göûi ñi khi thieát bò ñöôïc open khi goïi haøm waveInOpen
Thoâng soá lParam cuûa MM_WIM_DATA laø pointer troû ñeán caáu truùc WAVEHDR ñeå nhaän daïng buffer döõ lieäu. Buffer coù theå khoâng chöùa ñaày döõ lieäu vì vieäc thu döõ lieäu coù theå keát thuùc tröôùc khi buffer ñöôïc thu ñaày. Chuùng ta coù theå bieát ñöôïc kích thöôùc thaät söï cuûa döõ lieäu baèng thoâng soá dwBytesRecorded.
Audio data block
Haøm waveInAddBuffer vaø waveOutWrite coù thoâng soá yeâu caàu öùng duïng chæ ñònh khoái döõ lieäu caàn cho thieát bò söû duïng cho vieäc thu hay playback. Caùc haøm treân söû duïng caáu truùc WAVEHDR ñeå mieâu taû khoái döõ lieäu treân.
Tröôùc khi söû duïng caùc haøm treân ñeå göûi khoái döõ lieäu cho thieát bò. Chuùng ta phaûi caáp phaùt vuøng nhôù cho khoái döï lieäu vaø khoái header. Khoái header phaûi ñöôïc prepare vaø unprepare baèng caùc haøm sau:
Haøm
Chöùc naêng
WaveInPrepareHeader
Prepare khoái döõ lieäu input
WaveInUnprepareHeader
Unprepare khoái döõ lieäu input
WaveOutPrepareHeader
Prepare khoái döõ lieäu output
WaveOutUnprepareHeader
Unprepare khoái döõ lieäu output
Tröôùc khi göûi khoái döõ lieäu cho driver input hay output, chuùng ta phaûi prepare chuùng. Sau khi thieát bò söû duïng xong, caùc khoái döõ lieäu phaûi ñöôïc unprepare tröôùc khi giaûi phoùng caùc vuøng nhôù ñaõ cung caáp.
Khi kích thöôùc döõ lieäu lôùn, chuùng ta phaûi cung caáp caùc buffer lieân tuïc cho thieát bò, quaù trình naøy phaûi dieãn ra lieân tuïc cho ñeán khi hoaøn taát coâng vieäc vaø thieát bò ñöôïc ñoùng laïi.
ÖÙng duïng phaûi xaùc ñònh vaø quaûn lyù thôøi ñieåm maø thieát bò hoaøn taát vieäc thöï thi treân caùc khoái döõ lieäu ñeå ñöa ra caùc taùc ñoäng thích hôïp. Caùc caùch sau ñaây ñöôïc ñöa ra:
Chiû ñònh haøm callback nhaän Thoâng baùo maø thieát bò göûi khi noù hoaøn taát moät khoái döõ lieäu.
Söû duïng caùc event callback
Chæ ñònh window hay thread nhaän Thoâng baùo göûi töø thieát bò.
Xaùc ñònh bit WHDR_DONE trong côø dwFlags cuûa caáu truùc WAVEHDR ñi keøm vôùi moãi khoái döõ lieäu.
Khi öùng duïng khoâng ñaùp öùng ñöôïc toác ñoä xöû lyù caùc buffer thì chieán löôïc buffer keùp coù theå ñöôïc ñöa ra ñeå taêng toác ñoä thöïc thi.
Chuùng ta seõ khaûo saùt moät soá phöông thöùc xöû lyù sau khi thieát bò hoaøn taát moät khoái döõ lieäu.
Duøng haøm callback ñeå xöû lyù caùc driver messages
Ñeå chæ ñònh haøm callback xöû lyù öùng vôùicaùc driver message, chuùng tachæ ñònh côø CALLBACK_FUNCTION trong bieán fdwOpen vaø ñòa chæ haøm xöû lyù trong bieán dwCallback khi goïi haøm waveInOpen hay waveOutOpen.
Messages göûi cho haøm callback töông töï nhö Thoâng baùo göûi cho window, ngoaïi tröø vieäc noù coù hai thoâng soá DWORD thay vì moät thoâng soá DWORD vaø moät thoâng soá UINT.
Ñeå göûi döõ lieäu cho haøm callback chuùng ta coù theå duøng moät trong hai caùch sau:
Duøng thoâng soá dwInstance trong haøm open device
Duøng field dwUser trong caáu truùc WAVEHDR ñeå chæ ñònh khoái döõ lieäu göûi cho device driver.
Duøng event callback xöû lyù caùc driver message
Ñeå dung event callback, chuùng ta duøng haøm CreateEventñeå truy xuaát handle cuûa event. Trong haøm open thieát bò, chæ ñònh côø CALLBACK_EVENT cho thoâng soá fdwOpen. Sau khi goïi haøm waveOutPrepareHeader nhöng tröôùc khi göûi döõ lieäu cho thieát bò, chuùng ta taïo ra moät nonsignal event baèng caùch goïi haøm ResetEvent, chæ ñònh event handle ñöôïc laáy töø haøm CreateEvent. Trong voøng loop ñeå kieåm tra khi bit WHDR_DONE ñöôïc set trong caáu truùc WAVEHDR, chuùng ta goïi haøm WaitForSingleObject, chæ ñònh thoâng soá event handle vaø giaù trò time-out laø INFINITE. Giaù trò event callback laø giaù trò duøng goïi haøm callback.
Bôûi vì event callback khoâng xaùc ñònh ñöôïc thoâng baùo xaùc ñònh close, done hay open. ÖÙng duïng phaûi kieåm tra tình traïng cuûa heä thoáng ñang chôø söï kieän gì xaûy ra ñeå ñöa ra caùc ñaùp öùng chính xaùc.
Duøng window hay thread ñeå xöû lyù caùc message driver
Ñeå duøng haøm window callback, chuùng ta chæ ñònh thoâng soá CALLBACK_ WINDOW trong bieán fdwOpen vaø chæ ñònh handle cuûa window trong thoâng soá dwCallback khi goïi haøm open thieát bò. Driver message seõ ñöôïc göûi tôùi window procedure.
Töông töï nhö vaäy, chuùngta seõchæ ñònh thoâng soá CALLBACK_THREAD vaø thread handle trong haøm open khi chuùng ta muoán thread xöû lyù caùc driver message.
Ngoaøi caùch thöùc duøng haøm callback, chuùng ta coù theå döïa vaøo thoâng soá dwFlags trong WAVEHDR ñeå xaùc ñònh xem thieát bò coù hoaøn taát vieäc xöû lyù khoái döõ lieäu hay chöa.
Caùc haøm kieåm tra loãi
Caùc haøm waveform audio seõ traû veà giaù trò khaùc 0 khi coù loãi xaûy ra. Windows cung caáp cho chuùng ta caùc haøm xaùc ñònh loãi döïa treân caùc thoâng soá naøy. ÖÙng duïng seõ döïa vaøo caùc thoâng soá xaùc ñònh loãi ñeå quyeát ñònh coâng vieäc thöïc thi tieáp tuïc. Caùc haøm sau ñöôïc duøng ñeå xaùc ñònh caùc loãi xaûy ra:
Haøm
Chöùc naêng
WaveInGetErrorText
Traû veà chuoãi text xaùc ñònh loãi xaûy ra cuûa input device
WaveOutGetErrorText
Traû veà chuoãi text xaùc ñònh loãi xaûy ra cuûa output device
IV.2 KYÕ THUAÄT TRUYEÀN NHAÄN AÂM THANH TREÂN MAÏNG IP
IV.2.1 MOÂ HÌNH LIEÂN KEÁT VAØ TRAO ÑOÅI DÖÕ LIEÄU
Chöông trình duøng giao thöùc TCP/IP laøm giao thöùc giao tieáp. Vieäc thieát laäp lieân keát cuõng nhö trao ñoåi döõ lieäu ñeàu tuaân theo caùc caáp cuûa giao thöùc naøy. Vieäc goïi vaø thieát laäp lieân keát ñöôïc thöïc hieän theo moâ hình client/server, vieäc trao ñoåi döõ lieäu ñöôïc thöïc hieän thoâng qua socket theo giao thöùc TCP.
Coù hai yù töôûng ñöôïc ñöa ra trong vieäc duøng socket ñeå trao ñoåi döõ lieäu.
Duøng 1 socket :
Moãi maùy duøng moät socket ñeå truyeàn nhaän döõ lieäu. Theo giao thöùc TCP sau khi hai socket connect ñöôïc vôùi nhau thì vieäc tieán haønh trao ñoåi döõ lieäu seõ baét ñaàu. Chuùng ta seõ duøng caëp socket naøy. Nhö vaäy, moät socket treân moät maùy ñoàng thôøi ñaûm nhaän vieäc truyeàn döõ lieäu ñi cuõng nhö nhaän döõ lieäu veà.[3]
socket
socket
Yeâu caàu truyeàn döõ lieäu
Yeâu caàu nhaän döõ lieäu
socket
Hình IV.1 Moâ hình duøng 1 socket
Caùch duøng naøy coù ñaëc ñieåm laø vieäc taïo lieân keát ñôn giaûn, quaù trình taïo lieân keát hoaøn toaøn gioáng nhö caùc böôùc trong vieäc taïo lieân keát giöõa caùc socket duøng giao thöùc TCP. Chöông trình chaïy vaø laéng nghe ôû moät port xaùc ñònh. Khi coù moät yeâu caàu goïi lieân keát ñeán, chöông trình seõ taïo ra moät socket ñeå noái keát vôùi socket goïi. Sau khi thieát laäp lieân keát thì caùc socket baét ñaàu göûi nhaän döõ lieäu. Socket seõ göûi döõ lieäu aâm thanh ñi ñoàng thôøi nhaän döõ lieäu truyeàn tôùi vaø chuyeån cho heä thoáng xöû lyù.
Socket laøm vieäc theo caùch naøy seõ nhaän hai thoâng baùo cuøng moät luùc. Khi coù döõ lieäu töø maïng truyeàn tôùi, heä thoáng seõ thoâng baùo cho socket ñeå tieán haønh vieäc nhaän döõ lieäu. Cuõng töông töï nhö vaäy, khi coù döõ lieäu aâm thanh saün saøng, heä thoáng cuõng seõ goïi socket ñeå truyeàn ñi.
Nhö vaäy, khi thöïc thi socket seõ nhaän ñöôïc hai thoâng baùo cuûa heä thoáng. Vì vieäc truyeàn nhaän döõ lieäu aâm thanh laø daïng döõ lieäu lieân tuïc cho neân taàn suaát maø heä thoáng thoâng baùo cho socket laø raát thöôøng xuyeân. Vì vaäy, socket trong cuøng moät luùc coù theå nhaän ñöôïc caû hai yeâu caàu truyeàn döõ lieäu ñi vaø nhaän döõ lieäu veà. Theâm vaøo ñoù caùc hoaït ñoäng truyeàn nhaän döõ lieäu laø caùc hoaït ñoäng bò taéc ngheõn. Do ñoù chuùng ta phaûi löu yù ñeán hieän töôïng naøy, socket coù theå ñaùp öùng khoâng kòp nhu caàu cuûa heä thoáng.
Chuùng ta laáy moät tröôøng hôïp ví duï. Khi socket nhaän ñöôïc yeâu caàu truyeàn döõ lieäu ñi, noù seõ laáy döõ lieäu töø caùc buffer vaø truyeàn ñi. Do quaù trình truyeàn döõ lieäu coù theå bò taéc ngheõn, socket seõ phaûi chôø. Ñoàng thôøi trong luùc naøy, noù laïi nhaän ñöôïc tín hieäu thoâng baùo coù buffer keá tieáp caàn truyeàn ñi vaø tín hieäu thoâng baùo coù döõ lieäu treân maïng truyeàn veà. Vôùi caùc yeâu caàu doàn daäp nhö vaäy, heä thoáng coù theå seõ ñaùp öùng khoâng kòp vaø chöông trình coù theå bò treo.
Vì vaäy, khi duøng moät socket ñeå truyeàn nhaän döõ lieäu, chuùng ta phaûi tính toaùn caân ñoái thôøi gian giöõa vieäc truyeàn döõ lieäu ñi vaø vieäc nhaän döõ lieäu veà sao cho hôïp lyù ñeå heä thoáng coù theå laøm vieäc lieân tuïc ñöôïc. Chuùng ta coù theå qui ñònh thôøi gian cho vieäc truyeàn nhaän. Trong moät thôøi ñieåm socket coù theå chæ laøm vieäc truyeàn döõ lieäu ñi, caùc yeâu caàu nhaän döõ lieäu seõ bò ngöng laïi. Sau ñoù socket seõ chæ xöû lyù caùc yeâu caàu nhaän döõ lieäu. Chieán löôïc naøy giuùp giaûm nheï hoaït ñoäng cuûa socket. Tuy nhieân, chuùng ta caàn aùp duïng cho caû hai socket lieân keát. Trong moät thôøi ñieåm, moät socket seõ truyeàn coøn socket coøn laïi seõ nhaän döõ lieäu, vaø thôøi ñieåm sau thì quaù trình seõ dieãn ra theo chieàu ngöôïc laïi.
Duøng 2 socket :
Xuaát phaùt töø yù töôûng treân, chuùng ta coù theå duøng hai socket trong vieäc trao ñoåi döõ lieäu. Moät lieân keát hình thaønh giöõa hai maùy seõ goàm hai caëp socket lieân keát vôùi nhau. Moät socket chæ ñaûm nhaän vieäc truyeàn döõ lieäu trong khi socket coøn laïi ñaûm nhaän vieäc nhaän döõ lieäu.[3]
Socket truyeàn
Socket truyeàn
Socket nhaän
Socket nhaän
Yeâu caàu truyeàn
döõ lieäu
Yeâu caàu nhaän
döõ lieäu
Socket truyeàn
Socket nhaän
Hình IV.2 Moâ hình duøng 2 socket
Vì moãi socket chæ nhaän moät tín hieäu nhaát ñònh. Socket truyeàn seõ chæ chuù yù tôùi tín hieäu baùo coù döõ lieäu cuûa heä thoáng ñeå tieán haønh truyeàn döõ lieäu ñi. Trong khi ñoù, socket nhaän seõ chæ löu yù ñeán tín hieäu baùo coù döõ lieäu cuûa heä thoáng. Hai socket seõ hoaït ñoäng ñoäc laäp vôùi nhau vaø coâng vieäc cuûa moät socket seõ nheï nhaøng hôn moâ hình treân.
Tuy nhieân, trong moâ hình naøy, vieäc thieát laäp lieân keát giöõa hai maùy seõ trôû neân phöùc taïp hôn. Theo moâ hình client/server, khi moät socket goïi vaø thieát laäp lieân keát vôùi chöông trình ôû maùy remote xong thì maùy remote cuõng phaûi taïo ra moät socket vaø tieán haønh lieân keát ngöôïc laïi. Sau khi caëp socket hoaøn toaøn lieân keát xong thì hai maùy môùi coi nhö ñaõ connect vaø tieán haønh truyeàn nhaän döõ lieäu.
Moät khía caïnh khaùc caàn löu yù laø tuy hai socket hoaït ñoäng ñoäc laäp vôùi nhau nhöng chuùng ñeàu thuoäc cuøng moät chöông trình vaø chuùng ñeàu tieán haønh vieäc göûi nhaän döïa treân caùc giao thöùc lôùp döôùi chung. Do ñoù, trong moät thôøi ñieåm chæ coù moät hoaït ñoäng dieãn ra hoaëc laø truyeàn döõ lieäu hoaëc laø nhaän döõ lieäu. Vì vaäy thaät ra hai socket cuõng phaûi hoaït ñoäng phuï thuoäc nhau. Socket göûi döõ lieäu phaûi chôø socket nhaän nhaän xong döõ lieäu roài môùi baét ñaàu truyeàn ñi vaø ngöôïc laïi vieäc truyeàn döõ lieäu phaûi ñöôïc hoaøn taát thì vieäc nhaän döõ lieäu môùi coù theå tieán haønh ñöôïc.
Moät vaán ñeà khaùc naåy sinh do ñaëc ñieåm cuûa döõ lieäu. Döõ lieäu tieáp nhaän laø daïng döõ lieäu lieân tuïc do ñoù, caùc tín hieäu maø heä thoáng baùo cho hai socket cuõng xaûy ra lieân tuïc, vì vaäy thöïc söï raèng tuy chæ laøm moät coâng vieäc nhöng khoái löôïng coâng vieäc maø socket phaûi ñaûm nhaän laø raát lôùn. Theâm vaøo ñoù, hai socket ñeàu phuï thuoäc vaøo moät process do ñoù thaät söï xeùt veà maët thöïc thi cuûa quaù trình thì khaû naêng giaûm nheï coâng vieäc laø khoâng bao nhieâu. Vaø khaû naêng heä thoáng bò treo do quaù taûi cuõng vaãn coù theå xaûy ra.
Chuùng ta coù nhöõng caùch giaûi quyeát ñeå giaûm nheï vieäc thöïc thi cuûa chöông trình nhö duøng cô cheá xöû lyù song song (thread) hay duøng cô cheá phaân chia thôøi gian cho caùc hoaït ñoäng nhö ñaõ noùi ôû treân.
IV.2.2 CÔ CHEÁ GOÏI VAØ XAÙC LAÄP LIEÂN KEÁT
Khi lieân keát ñöôïc xaùc laäp, chuùng ta seõ baét ñaàu tieán haønh trao ñoåi döõ lieäu. Tuy nhieân tröôùc heát chuùng ta caàn khaûo saùt phöông phaùp goïi cuõng nhö thieát laäp lieân keát. Chöông trình ñöôïc hieän thöïc döïa treân cô cheá client/server cho neân vieäc taïo lieân keát cuõng döïa treân cô cheá naøy. YÙ töôûng chính laø: khi chöông trình baét ñaàu thöïc thi, noù cuõng baét ñaàu laéng nghe lôøi goïi lieân keát ôû moät port xaùc ñònh. Thöïc söï, trong chöông trình chuùng ta seõ taïo ra moät socket server vaø laéng nghe ôû moät port qui öôùc tröôùc. Khi moät socket khaùc muoán taïo lieân keát, noù seõ tieán haønh goïi lieân keát vôùi socket server ôû giaù trò port naøy.[3]
Trong giao thöùc TCP/IP, moät quaù trình giao tieáp thoâng qua moâi tröôøng maïng phaûi coù moät chæ soá port xaùc ñònh. Caùc quaù trình khaùc nhau phaûi coù port khaùc nhau. Khi thieát keá moâ hình client/server, caùc nhaø thieát keá ñaõ taïo ra moät soá dòch vuï thoâng duïng treân maïng nhö: finger, echo, mail, ftp . . . Caùc server cuûa caùc dòch vuï naøy ñöôïc daønh saün caùc port xaùc ñònh maø khoâng moät quaù trình naøo ñöôïc pheùp söû duïng. Caùc port naøy ñöôïc goïi laø well-known port vaø do heä thoáng caáp phaùt vaø quaûn lyù. Thoâng thöôøng, caùc chæ soá well-known port coù giaù trò töø 0 ñeán 1023. Caùc öùng duïng khoâng ñöôïc pheùp söû duïng giaù trò port trong khoaûng naøy. ÖÙng duïng coù theå duøng caùc giaù trò port töø 1024 trôû ñi. Ví duï: khi chuùng ta caàn taïo moät socket maø khoâng caàn quan taâm ñeán giaù trò port, chuùng ta coù theå nhôø heä thoáng caáp cho moät giaù trò port coøn troáng. Thoâng thöôøng caùc giaù trò port maø heä thoâng cung caáp cho öùng duïng khi coù yeâu caàu naèm trong khoaûng töø 1024 ñeán 5000. Coøn khi chuùng ta muoán chæ ñònh moät giaù trò port cho socket, chuùng ta seõ coù theå choïn giaù trò töø 5000 trôû ñi. Vì trong vuøng naøy xaùc suaát maø port ñoù ñaõ bò chieám laø raát hieám.
Vì vaäy, khi thieát keá chuùng ta muoán taïo moät port coá ñònh thì neân choïn socket laéng nghe ôû moät port coù giaù trò lôùn hôn 5000. Giaù trò ñöôïc choïn laø 7699 nhöng moâ hình cuûa chuùng ta laø : trong moät chöông trình vöøa coù ñoùng vai troø laø client vöøa laø server neân ta choïn port coù theå thay ñoåi ñöôïc trong khoaûng töø 1024 ñeán 5000.
Khi muoán taïo lieân keát, chuùng ta seõ taïo moät socket vaø tieán haønh connect vaøo socket ñang laéng nghe ôû moät ñòa chæ vaø port laéng nghe. Khi socket listen nhaän thaáy coù yeâu caàu lieân keát, noù seõ thoâng baùo cho ngöôøi söû duïng bieát. Neáu nguôøi söû duïng ñoàng yù thì noù seõ tieán haønh connect vaø vieäc trao ñoài döõ lieäu baét ñaàu. Neáu ngöôøi söû duïng töø choái thì öùng duïng seõ thoâng baùo cho phía goïi lôøi töø choái vaø ñoùng lieân keát laïi.
Chuùng ta noùi theâm veà ñòa chæ khi lieân keát. Do chöông trình hieän thöïc treân moâi tröôøng maïng Windows laø moâi tröôøng maïng workgroup. Moãi maùy ñöôïc xem nhö moät host rieâng leû. Neáu treân maïng khoâng coù caùc server nhö server novell hay server NT thì chuùng ta khoâng theå bieát ñöôïc caùc thoâng tin veà moät maùy remote neáu chuùng ta khoâng taïo lieân keát vôùi maùy ñoù. Vì vaäy, trong cô cheá lieân keát, chuùng ta choïn vieäc ñònh ñòa chæ ñeå lieân keát. Moät maùy muoán thieát laäp lieân keát vôùi moät maùy khaùc thì phaûi nhaäp thoâng soá laø ñòa chæ IP cuûa maùy ñoù.
IV.2.3 CÔ CHEÁ TRUYEÀN NHAÄN DÖÕ LIEÄU
Khi vieát moät öùng duïng treân moâi tröôøng Windows, chuùng ta phaûi löu yù ñeán ñaëc ñieåm cuûa moâi tröôøng Windows laø moâi tröôøng coù kieán truùc message-driven. Windows ñöôïc xem laø moät moâi tröôøng coù kieán truùc message-driven hay event-driven vì khoâng moät chöông trình naøo treân windows coù theå thöïc thi neáu khoâng coù moät Thoâng baùo hay moät söï kieän kích khôûi noù. Trong moâi tröôøng Windows luoân toàn taïi moät voøng laëp message loop. Voøng message loop naøy seõ truy xuaát caùc Thoâng baùo töø caùc haøng chôø cuûa caùc chöông trình vaø tuøy theo loaïi Thoâng baùo hay söï kieän, noù cho pheùp window procedure töông öùng thöïc thi. Vì vaäy treân moâi tröôøng Windows coù theå toàn taïi nhieàu öùng duïng cuøng moät luùc moãi öùng duïng coù moät haøng chôø Thoâng baùo rieâng. Khi coù moät söï kieän xaûy ra, heä thoáng seõ xaùc ñònh xem söï kieän ñoù tuông öùng vôùi öùng duïng naøo vaø chuyeån Thoâng baùo ñeán haøng chôø cuûa öùng duïng töông öùng ñoù. Tuøy theo loaïi Thoâng baùo maø öùng duïng seõ goïi chöông trình töông öùng thöïc thi.
Moâi tröôøng windows 16 bits laø moâi tröôøng nonpreemptive, coù nghóa laø khi moät öùng duïng ñang xöû lyù moät Thoâng baùo thì khoâng moät öùng duïng naøo coù theå thöïc thi ñöôïc. Phaûi chôø cho ñeán khi procedure cuûa öùng duïng tieán haønh xong coâng vieäc vaø traû veà thì luùc ñoù procedure töông öùng vôùi Thoâng baùo tieáp theo trong haøng chôø môùi ñöôïc thöïc thi. Trong khi ñoù caùc moâi tröôøng Win32 nhö Windows98, WindowsNT laïi thöïc thi theo cô cheá preemptive. Trong moâi tröôøng naøy, vieäc procedure naøo ñöôïc thöïc thi laø do heä thoáng quyeát ñònh. Thaät ra, trong moâi tröôøng Win32, heä thoáng ñònh thôøi cho caùc thread thöïc thi. Thread chính laø ñoaïn maõ thöïc thi cuûa moät chöông trình neân caùc chöông trình ñeàu coù cô hoäi thöïc thi.
Khi winsock ñöôïc thieát keá laàn ñaàu tieân, caùc moâ hình thieát keá ñöôïc laøm cho phuø hôïp vôùi cô cheá “ message-driven” vaø “ nonpreemptive” cuûa Windows 16bits. Moät soá haøm socket nguyeân thuûy khi thöïc thi caàn moät khoaûng thôøi gian töông ñoái. Khi haøm thöïc thi rôi vaøo tình traïng naøy, noù ñöôïc goïi laø bò taéc ngheõn. Khi moät haøm bò taéc ngheõn, noù seõ ngaên trôû vieäc thöïc thi cuûa caùc haøm khaùc trong heä thoáng. Trong heä thoáng UNIX, moâi tröôøng maø socket ñöôïc thieát keá ñaàu tieân, caùc haøm blocking naøy khoâng gaây trôû ngaïi cho heä thoáng vì heä thoáng seõ chieám giöõ caùc quaù trình bò blocking vaø cho pheùp caùc quaù trình khaùc thöïc thi.
Trong khi ñoù, heä thoáng Windows 16 bits khoâng coù khaû naêng chieám giöõ caùc quaù trình blocking. Daãn ñeán vieäc heä thoáng khoâng tieáp tuïc thöïc thi ñöôïc vì caùc quaù trình khaùc khoâng coù cô hoäi thöïc thi. Heä thoáng phaûi chôø cho ñeán khi quaù trình blocking hoaøn taát coâng vieäc thì môùi tieáp tuïc thöïc thi ñöôïc. Khi thieát keá winsock, caùc nhaø thieát keá ñaõ tính ñeán khaû naêng naøy. Vì vaäy hoï coù moät giaûi phaùp laø ñöa moät ñoaïn maõ ñaëc bieät vaøo haøm blocking ñeå cho pheùp caùc quaù trình khaùc kieåm tra ñöôïc haøng chôø Thoâng baùo cuûa mình. Tuy nhieân ñaây khoâng phaûi laø moät giaûi thuaät hieäu quaû.
Trong heä thoáng socket cuûa Berkeley caùc nhaø nghieân cöùu cuõng ñaõ löu yù ñeán vaán ñeà naøy khi thieát keá, vaø hoï ñaõ thieát keá caùc haøm nonblocking beân caïnh caùc haøm blocking. Chuùng ta xeùt moät ví duï laø haøm send() cuûa socket. Khi hoaït ñoäng ôû cheá ñoä blocking, haøm send() seõ göûi döõ lieäu ñi, haøm seõ bò taéc ngheõn vaø noù chæ traû veà khi hoaøn taát vieäc truyeàn döõ lieäu, töùc laø döõ lieäu ñaõ ñöôïc nhaän hoaøn toaøn. Coøn neáu socket ñöôïc taïo ra ôû cô cheá baát ñoàng boä, haøm send() seõ hoaït ñoäng ôû cheá ñoä non-blocking. Haøm send() sau khi göûi döõ lieäu ñi seõ traû veà ngay laäp töùc. Vaø heä thoáng seõ phaûi goïi moät haøm khaùc nhö select() ñeå quan saùt tình traïng cuûa vieäc göûi döõ lieäu. Treân moâi tröôøng Windows chuùng ta cuõng coù theå söû duïng caùc haøm non-blocking. Tuy nhieân caùc nhaø thieát keá winsock coøn ñöa ra caùc haøm baát ñoàng boä.[3]
Caùc haøm baát ñoàng boä ñöôïc ñöa ra döïa treân cô cheá hoaït ñoäng message-driven cuûa moâi tröôøng Windows. Chuùng ta laáy ví duï laø caùc haøm göûi nhaän döõ lieäu. Vieäc göûi döõ lieäu khoâng nhaát thieát phaûi dieãn ra ngay laäp töùc, vaø vieäc nhaän döõ lieäu seõ baét buoäc chöông trình phaûi chôø tröø phi noù nhaän ñöôïc moät haèng ñaëc bieät. Baèng caùch taïo socket ôû cheá ñoä non-blocking ñeå duøng caùc haøm non-blocking vaø keát hôïp vôùi haøm WSAAssyncSelect(), öùng duïng seõ nhaän ñöôïc caùc message thoâng baùo söï kieän ñeå baùo cho chöông trình bieát khi naøo chöông trình coù theå göûi döõ lieäu ñi hoaëc ñaõ coù döõ lieäu truyeàn ñeán caàn ñoïc ra töø socket. Trong caùc khoaûng thôøi gian coøn laïi, khi khoâng coù thoâng baùo caùc phaàn khaùc cuûa heä thoáng coù theå thöïc thi ñöôïc.
Caùc haøm baát ñoàng boä raát phuø hôïp cho caùc hoaït ñoäng dieãn ra treân moâi tröôøng Windows 16 bits laø moâi tröôøng nonpreemptive. Trong moâi tröôøng Win32 nhö Windows NT hay Windows98 laø moâi tröôøng preemptive caùc haøm blocking vaãn coù theå söû duïng ñöôïc. Tuy nhieân vieäc duøng caùc haøm baát ñoàng boä treân moâi tröôøng Win32 giuùp chöông trình ñaùp öùng toát hôn cho vieäc töông taùc vôùi ngöôøi söû duïng. Moät haøm blocking seõ ngaên trôû heä thoáng ñaùp öùng kòp thôøi cho caùc thao taùc cuûa ngöôøi söû duïng. Ñieàu naøy raát quan troïng treân moät moâi tröôøng giao dieän nhö Windows. Vì vaäy caùc haøm baát ñoàng boä vaãn ñöôïc söû duïng.
Vì moâi tröôøng Windows98 coù hoã trôï cô cheá laäp trình song song thoâng qua vieäc ñònh thôøi thöïc thi cho caùc thread, do ñoù trong vieäc thieát keá, chuùng ta choïn duøng cô cheá blocking vaø thöïc hieän vieäc laäp trình socket baèng caùc ñoái töôïng do MFC cung caáp laø caùc lôùp CAsyncSocket, CSocket, CSocketFile, CArchive. Vieäc choïn laäp trình baèng coâng cuï naøy vì coù nhöõnh ñaëc ñieåm sau:
Caùc lôùp ñoái töôïng ñeàu do MFC hoã trôï, phuø hôïp vôùi caáu truùc chöông trình ñöôïc xaây döïng döïa treân caùc lôùp ñoái töôïng MFC. ÖÙng duïng ñöôïc xaây döïng treân caùc lôùp ñoái töôïng MFC baèng caùc coâng cuï AppWizard, ClassWizard. Vieäc vieát öùng duïng seõ deã daøng vaø ñôn giaûn hôn. Vaø khi öùng duïng coù hoã trôï socket thoâng qua caùc lôùp ñoái töôïng socket cuûa MFC ôû treân, vieäc laäp trình seõ trôû neân tieân lôïi hôn.
Vieäc laäp trình socket treân caùc lôùp ñoái töôïng thöôøng deã daøng vaø ñôn giaûn hôn so vôùi vieäc laäp trình baèng caùc haøm socket nguyeân thuûy ñöôïc hoã trôï bôûi Windows SDK. Chuùng ta laáy moät ví duï nhö sau: taïo moät socket vaø laéng nghe ôû moät port xaùc ñònh.[6]
Laäp trình baèng coâng cuï do Windows SDK hoã trôï:
// Taïo Socket
SOCKET hSocket = socket ( int af = PF_INET, int type = SOCK_STREAM,
int protocol = 0);
// Raøng buoäc socket vaøo moät port coá ñò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. */
}
}
// Laéng nghe lôøi goïi lieân keát
int listen ( hSocket, int backlog = 5 );
Trong khi ñoù neáu chuùng ta laäp trình baèng caùc lôùp socket do MFC hoã trôï thì caùc coâng vieäc phaûi thöïc thi nhö sau:
// Taïo lôùp ñoái töôïng
CSocket* m_pSocket = new CSocket;
// Taïo socket vaø raøng buoäc vaøo moät port xaùc ñònh
m_pSocket->Create(nPort);
// Laéng nghe lôøi goïi lieân keát
m_pSocket->Listen();
Khi laäp trình chuùng ta choïn caùc haøm blocking vì chuùng ñöôïc hoã trôï bôûi coâng cuï laäp trình serialize. Cô cheá serialize cho pheùp heä thoáng ñaûm baûo vieäc truyeàn nhaän döõ lieäu treân socket. Vieäc laäp trình socket thoâng qua cô cheá serialize cuõng ñôn giaûn vaø deã daøng hôn. Vì chöông trình ñöôïc hieän thöïc treân moâi tröôøng Windows98 cho neân chuùng ta seõ thöïc thi vaøo caùc haøm truyeàn nhaän cuûa socket. Vì vaäy caùc haøm blocking cuõng khoâng aûnh höôûng nhieàu ñeán vieäc thöïc thi cuûa chöông trình cuõng nhö trong toaøn heä thoáng.
Ngoaøi ra vieäc duøng cô cheá Serialize (Serialization laø moät quaù trình ñoïc moät ñoái töôïng döõ lieäu töø ñóa hay ngöôïc laïi, ghi chuùng leân dóa. MFC hoã trôï cô cheá serialization trong class object vì vaäy baát cöù ñoái töôïng naøo daãn xuaát töø object ñeàu thöøa höôûng cô cheá serialization) cuõng ñoàng nghóa vôùi vieäc chuùng ta duøng giao thöùc TCP trong vieäc truyeàn nhaän döõ lieäu. Vieäc duøng giao thöùc naøy giuùp quaù trình trao ñoåi döõ lieäu ñöôïc dieãn ra tin caäy hôn. Dó nhieân phí toån heä thoáng phaûi boû ra cuõng cao hôn.
CHÖÔNG V
THIEÁT KEÁ CHÖÔNG TRÌNH
TRUYEÀN AÂM THANH TREÂN MAÏNG LAN
V.1 MOÂI TRÖÔØNG VAØ COÂNG CUÏ LAÄP TRÌNH
V.1.1 MOÂI TRÖÔØNG WINDOWS
Heä ñieàu haønh Windows laø heä ñieàu haønh ña nhieäm , töùc laø nhieàu chöông trình coù theå chaïy moät luùc. Trong moâi tröôøng ña nhieäm, chöông trình coù theå chia laøm nhieàu phaàn nhoû goïi laø caùc nhaùnh(thread) chaïy ñoàng thôøi vôùi nhau. Moät chöông trình khi chaïy bao giôø cuõng coù moät nhaùnh chính, sau ñoù chöông trình coù theå taïo ra caùc nhaùnh con baèng caùch goïi ñeán caùc haøm CreateThread. Heä ñieàu haønh seõ laøm nhieäm vuï ñieàu khieån caùc nhaùnh naøy. Windows cho pheùp ñaët caùc möùc öu tieân cho caùc nhaùnh. Nhaùnh luoân ñöôïc khôûi taïo ôû möùc öu tieân bình thöôøng, chöông trình coù theå thay ñoåi caùc möùc öu tieân cuûa caùc nhaùnh baèng caùch duøng haøm SetThreadPriority tuyø theo möùc yeâu caàu. Coù caùc möùc öu tieân sau ñaây :
Idle
Below Normal
Normal
Above Normal
High
Readtime
Möùc öu tieân daønh cho caùc öùng duïng chæ hoaït ñoäng khi heä thoáng roãi, möùc cuoái cuøng daønh cho caùc öùng duïng ñoøi hoûi thôøi gian thöïc.
IV.1.2 COÂNG CUÏ LAÄP TRÌNH
Do ñaëc ñieåm cuûa chöông trình laø truyeàn nhaänh aâm thanh treân maïng. Do ñoù laäp trình lieân qua raát nhieàu ñeán winsock. Hieän nay coù raát nhieàu ngoân ngöõ hoã trôï cho vieäc laäp trình treân maïng. Qua tìm hieåu em thaáy raèng ngoân ngöõ Visual C++ 6.0 coù nhöõng haøm WinSock vaø nhöõng caáu truùc ñöôïc khai baùo trong WINSOCK.H cho caû moâi tröôøng 16 cuõng nhö 32 bit. Nhöõng haøm Winsock ñöôïc hieän thöïc trong WINSOCK.DLL (hay WSOCK32.DLL öùng vôùi baûn 32 bit). Chöông trình öùng duïng seõ ñöôïc link vôùi WINSOCK.LIB (hay WSOCK32.LIB). Chính vì vaäy raát thích hôïp cho laäp trình caùc öùng duïng treân maïng.
Caùc Haøm TCP/IP
Sau ñaây laø yù nghóa chi tieát caùc tham soá cuûa caùc haøm TCP/IP. Ñeå söû duïng caùc haøm naøy, trong chöông trình caàn coù chæ thò [6] :
# include
Haøm accept :
·Cuù phaùp:
SOCKET PASCAL FAR accept (
SOCKET s,
struct sockaddr FAR * addr,
int FAR &addrlen);
·Chöùc naêng:
Xaùc nhaän moái noái cuûa client. Neáu thaønh coâng, seõ traû veà socket ñöôïc noái vaøo, ngöôïc laïi traû veà giaù trò INVALID_SOCKET. YÙ nghóa caùc tham soá :
Tham soá
YÙ nghóa
S
Socket ñang chôø client noái vaøo
Addr
Boä ñeäm nhaän veà ñòa chæ client noái vaøo
Addrlen
Chieàu daøi cuûa ñòa chæ traû veà trong addr
Haøm bind :
·Cuù phaùp:
int PASCAL FAR bind (
SOCKET s,
const struct sockaddr FAR * name,
int namelen);
·Chöùc naêng:
Keát buoäc socket vôùi port, ñoái vôùi moãi nghi thöùc öùng duïng chuaån thì seõ coù moät haèng soá ñònh nghóa saün trong winsock cho port cuûa nghi thöùc ñoù. Neáu thaønh coâng traû veà 0, ngöôïc laïi traû veà trò SOCKET_ERROR. YÙ nghóa caùc tham soá :
Tham soá
YÙ nghóa
S
Socket ñang chôø keát buoäc
Name
Ñòa chæ port maø socket seõ ñöôïc keát buoäc
Namelen
Chieàu daøi cuûa tham soá name
Haøm closesocket :
·Cuù phaùp:
int PASCAL FAR closesocket ( SOCKET s);
·Chöùc naêng:
Sau khi hoaøn taát quaù trình trao ñoåi döõ lieäu, öùng duïng goïi haøm closesocket ñeå ñoùng socket ñaõ taïo.
Haøm connect :
·Cuù phaùp:
int PASCAL FAR connect (
SOCKET s,
const struct sockaddr FAR * name,
int namelen);
·Chöùc naêng:
Goïi haøm connect ñeå noái client vaøo server. Neáu thaønh coâng traû veà 0, ngöôïc laïi traû veà giaù trò SOCKET_ERROR. YÙ nghóa caùc tham soá :
Tham soá
YÙ nghóa
s
Socket ñang chôø ñöôïc noái vôùi server
Name
Ñòa chæ server seõ noái
Namelen
Chieàu daøi cuûa tham soá name
Haøm inet_ntoa :
·Cuù phaùp:
char FAR* PASCAL FAR inet_ntoa (struct in_addr iadddr );
·Chöùc naêng:
Nhaän vaøo moät ñòa chæ internet iaddr vaø ñoåi thaønh ñòa chæ internet döôùi daïng chuoãi.
Haøm listen :
·Cuù phaùp:
int PASCAL FAR listen (
SOCKET s,
int backlog);
·Chöùc naêng:
Taïo moät haøng ñôïi toái ña backlog client treân port chôø ñöôïc keát buoäc vôùi socket s.
Haøm recv :
·Cuù phaùp:
int PASCAL FAR revc (
SOCKET s,
char FAR* buf,
int len,
int flags);
·Chöùc naêng:
Nhaän döõ lieäu töø socket. Söû duïng cho nghi thöùc TCP. YÙ nghóa caùc tham soá :
Tham soá
YÙ nghóa
s
Socket ñeå nhaän döõ lieäu
buf
Boä ñeäm chöùa döõ lieäu ñoïc ñöôïc
len
Kích thöôùc boä ñeäm
flags
Caùch thöïc hieän thao taùc
Haøm recvfrom :
·Cuù phaùp:
int PASCAL FAR recvfrom( SOCKET s,
char FAR* buf,
int len,
int flags,
struct sockaddr* from,
int fromlen);
·Chöùc naêng:
Nhaän döõ lieäu töø socket UDP, xaùc ñònh ñòa chæ cuûa socket ñaõ göûi döõ lieäu. YÙ nghóa caùc tham soá :
Tham soá
YÙ nghóa
s
Socket ñeå nhaän döõ lieäu
buf
Boä ñeäm chöùa döõ lieäu ñoïc ñöôïc
len
Kích thöôùc boä ñeäm
flags
Caùch thöïc hieän thao taùc, nhaän giaù trò MSG_PEEK hay MSG_OOB
from
Ñòa chæ nôi döõ lieäu ñöôïc göûi ñi
fromlen
Chieàu daøi cuûa fromlen
Haøm send :
·Cuù phaùp:
int PASCAL FAR send (
SOCKET s,
const char FAR* buf,
int len,
int flags);
·Chöùc naêng:
Göûi döõ lieäu qua socket. Söû duïng cho nghi thöùc TCP .YÙ nghóa caùc tham soá:
Tham soá
YÙ nghóa
S
Socket ñeå göûi döõ lieäu
Buf
Boä ñeäm chöùa döõ lieäu seõ truyeàn
Len
Kích thöôùc boä ñeäm
Flags
Cach thöïc hieän thao taùc
Haøm sendto :
·Cuù phaùp:
int PASCAL FAR sendto (
SOCKET s,
const char FAR* buf,
int len,
int flags,
const struct sockaddr *to,
int tolen);
·Chöùc naêng:
Göûi döõ lieäu ñeán moät socket xaùc ñònh. Söû duïng cho nghi thöùc UDP.YÙ nghóa caùc tham soá:
Tham soá
YÙ nghóa
s
Socket ñeå göûi döõ lieäu
buf
Boä ñeäm chöùa döõ lieäu seõ truyeàn
len
Kích thöôùc boä ñeäm
Flags
Caùch thöïc hieän thao taùc
to
Ñòa chæ maùy phaûi göûi döõ lieäu
Tolen
Chieàu daøi cuûa tolen
Haøm setsockopt :
·Cuù phaùp:
int PASCAL FAR setsockopt (
SOCKET s,
int level,
int optname);
const char FAR* optval,
int optlen);
·Chöùc naêng:
Ñaët caùc thuoäc tính tuøy choïn cho socket.YÙù nghóa caùc tham soá nhö sau:
Tham soá
YÙ nghóa
s
Socket caàn ñöôïc ñaët thuoäc tính
level
Möùc ñònh nghóa thuoäc tính, chæ coù theå nhaän giaù trò SOL_SOCKET hay IPPROTO_TCP
optname
Teân option muoán ñaët, moät soá giaù trò thoâng duïng :
-SO_BROADCAST: Cho pheùp truyeàn thoâng broadcast treân socket.
-SO_LINGER : Chôø tröôùc khi ñoùng socket neáu coøn döõ lieäu chöa göûi.
Optval
Boä ñeäm chöùa giaù trò seõ gaùn cho option, coù theå laø BOOL hay struct, int tuøy thuoäc vaøo optname cuï theå
Optlen
Chieàu daøi cuûa optlen
Haøm socket :
·Cuù phaùp:
SOCKET PASCAL FAR socket (
int addr,
int type,
int protocol);
·Chöùc naêng:
Taïo moät socket vaø traû veà handle cuûa socket neáu thaønh coâng, tröôøng hôïp coù loãi traû veà giaù trò INVALID_SOCKET.YÙ nghóa caùc tham soá nhö sau:
Tham soá
YÙ nghóa
addr
Ñaëc taû daïng löu tröõ ñòa chæ, hieän nay chæ coù theå nhaän giaù trò AF_INET cho Internet
type
Qui ñònh löïa choïn TCP hay UDP
SOCKET_STREAM: öùng vôùi TCP
SOCKET_DGRAM : öùng vôùi UDP
Protocol
Qui ñònh nghi thöùc ñaëc bieät ñöôïc duøng vôùi socket, nhaän giaù trò 0 neáu khoâng muoán söû duïng moät nghi thöùc ñaëc bieät
Haøm WSAStartup :
·Cuù phaùp:
int PASCAL FAR WSAStartup(
WORD version,
LPWSADATA lpWSAData);
·Chöùc naêng:
Ñaây laø haøm phaûi goïi ñaàu tieân khi söû duïng socket. Haøm coù nhieäm vuï khôûi taïo thö vieän lieân keát ñoäng Windows socket DLL.YÙ nghóa caùc tham soá nhö sau :
Tham soá
YÙ nghóa
version
Version cao nhaát cuûa Windows sockets API coù theå söû duïng
LpWSAData
Chæ ñeán caáu truùc WSADATA nhaän veà chi tieát thöïc hieän cuûa Windows Socket
Haøm WSACleanup :
·Cuù phaùp:
int PASCAL FAR WSACleanup(void);
·Chöùc naêng:
Khi chaám döùt söû duïng caùc haøm socket phaûi goïi WSACleanup ñeå ñoùng thö vieän lieân keát ñoäng Windows Socket DLL.
V.2 THIEÁT KEÁ CHÖÔNG TRÌNH CPHONE
Töø nhöõng lyù thuyeát ôû treân em xin xaây döïng chöông trình CPhone vôùi muïc ñích chính laø truyeàn aâm thanh treân maïng LAN nhö sau :
Coâng ngheä ñieän thoaïi ngaøy nay tuy phaùt trieån maïnh vaø coù nhieàu phöông phaùp neùn tín hieäu aâm thanh coù hieäu quaû. Nhöng ôû Vieät Nam hieän nay môùi chæ baét ñaàu ñöa vaøo söû duïng. Trong ñieàu kieän thôøi gian vaø trình ñoä coù haïn neân ñoà aùn naøy khoâng theå ñöa ra moät moâ hình ñieän thoaïi Internet hoaøn chænh vôùi ñaày ñuû caùc phöông phaùp neùn tieáng noùi hieäu quaû maø chæ ñöa ra moâ hình truyeàn nhaän tieáng noùi ñôn giaûn nhaát giöõa hai thöïc theå maùy tính.
V.2.1 MOÂ HÌNH TRUYEÀN AÂM THANH PC – PC TREÂN MAÏNG
Vieäc xaäy döïng moät heä thoáng söû duïng coâng ngheä ñieän thoaïi Internet theo moâ hình thöù 2 vaø thöù 3 ñaõ trình baày trong phaàn môû ñaàu ñoøi hoûi quaù trình nghieân cöùu vaø thieát bò kyõ caøng, ñaàu tö coâng ngheä, voán thích ñaùng môùi coù theå thöïc hieän ñöôïc. Trong ñoà aùn naøy thöïc hieän theo moâ hình thöù nhaát laø PC – PC, noù ñôn giaûn hôn vaø khoâng caàu ñaàu tö thieát bò môùi, coù theå taän duïng ñöôïc caùc thieát bò coù saün, coù theå thieát keá. Thöû nghieäm hoaøn chænh trong phaïm vì ñoà aùn toát nghieäp.
Moâ hình PC – PC thöùc hieän haàu heát caùc thao taùc baèng phaàn meàm, 2 maùy tính chaïy cuøng moät phaàn meàm nhö vaäy coù theå deã daøng môû roäng daàn töøng böôùc, coù theå thöû nghieäm treân maïng LAN, sau ñoù coù theå thöû nghieäm treân maïng Internet.
Caùc böôùc cô baûn cho moâ hình PC – PC goàm :
¢m thanh anolog töø microphone ñöôïc chuyeån thaønh digital taïi soundcard(PCM,8kHz,8bits/maãu).
Caùc maãu ñöôïc sao cheùp vaøo vuøng ñeäm thaønh caùc khoái coù ñoä lôùn nhaát ñònh.
Duøng caùc thuaät neùn PCM ñeå neùn caùc khoái ñoù.
Theâm vaøo khoái ñaõ neán caùc thoâng tin khaùc
Göûi khoái döõ lieäu sau khi doøng goi ñoù qua socket(TCP/UDP)
Goùi tín ñöôïc truyeàn qua maïng vaät lyù ñeán ñaàu kia
Loaïi boû caùc thoâng tin theâm vaøo, giaûi neùn caùc khoái döõ lieäu ñoù, ghi khoái döõ lieäu aâm thanh ñöôïc giaûi maõ vaøo vuøng ñeäm
Cheùp caùc maãu treân vaøo vuøng ñeäm cuûa soundcard
Soundcard chuyeån ñoåi caùc maãu ñoù thaønh aâm thanh.
V.2.2 XAÂY DÖÏNG MOÂ HÌNH CPHONE
Phaàn naøy trình baày moâ hình öùng duïng truyeàn aâm thanh thoaïi cho pheùp trao ñoåi aâm thanh treân maïng LAN, goïi teân laø CPhone.
Hinh V.1 Caáu truùc cuûa moâ hình CPhone
Moâ hình naøy goàm caùc yeáu toá chính nhö sau:
Thieát bò ngoaïi vi vaø caùc keát noái vaät lyù (Physical transport) : Moät soá caùc thieát bò ngoaïi vi caàn thieát nhö : micro, loa, sound card. Caùc thieát bò naøy ñaûm nhaän vieäc thu , moät phaàn cuûa quaù trình xöû lyù tieáng noùi vaø phaùt tieáng noùi. Caùc keát noái vaät lyù cung caáp phöông tieän treân ñoù caùc bit döõ lieäu ñöôïc truyeàn. Keát noái vaät lyù CPhone trong maïng LAN, WAN, Internet coù theå laø caùp ñoàng truïc, caùp quang, ñöôøng ñieän thoaïi v.v...
Giao thöùc lieân laïc (TCP/IP) : Goàm moät soá caùc qui luaät vaø nguyeân taéc maø caùc thieát bò treân maïng coù theå lieân laïc vaø laøm vieäc vôùi nhau. Giao thöùc söû duïng caùc keát noái vaät lyù cuûa maïng ñeå truyeàn döõ lieäu. Heä thoáng CPhone söû duïng giao thöùc TCP/IP.
Heä thoáng phaàn meàm : Phaïm vò nghieân cöùu cuûa ñoà aùn naøy thì chöông trình ñöôïc thieát keá coù caáu hình toái thieåu laø chæ 2 maùy tính cuøng chaïy moät chöông trình keát noái vôùi nhau qua maïng. Tín hieäu aâm thanh töø Microphone qua soundcard ñöôïc maõ hoaù baèng phöông phaùp PCM,8kHz, 8bits/maãu, ñöôïc chia nhoû thaønh töøng ñoaïn coù ñoä daøi nhaát ñònh(frame), caùc frame naøy ñöôïc maõ hoaù theo caùc thuaät toaùn, cuoái cuøng göûi goùi döõ lieäu ñaõ maõ hoaù ñeán socket cuûa maïng vaø truyeàn goùi naøy ñeán nôi nhaän.
Theo caùc moâ hình ñöa ra ôû treân vaø phaïm vò nghieân cöùu cuûa ñoà aùn naøy thì chöông trình ñöôïc thieát keá coù caáu hình toái thieåu laø chæ 2 maùy tính cuøng chaïy moät chöông trình keát noái vôùi nhau qua maïng. Tín hieäu aâm thanh töø Microphone qua soundcard ñöôïc maõ hoaù baèng phöông phaùp PCM,8kHz, 8bits/maãu, ñöôïc chia nhoû thaønh töøng ñoaïn coù ñoä daøi nhaát ñònh(frame), caùc frame naøy ñöôïc maõ hoaù theo caùc thuaät toaùn, cuoái cuøng göûi goùi döõ lieäu ñaõ maõ hoaù ñeán socket cuûa maïng vaø truyeàn goùi naøy ñeán nôi nhaän.
Coù theå chia thaønh 3 modul chính :
Modul xöû lyù aâm thanh
Modul maõ hoaù(giaûi maõ) aâm thanh
Modul truyeàn nhaän aâm thanh.
Modul xöû lyù aâm thanh
Modul maõ hoaù
(giaûi maõ)
Modul truyeàn nhaän
Maãu tieáng noùi thu ñöôïc
Goùi döõ lieäu sau khi maõ hoaù
Maãu tieáng noùi ñaõ giaûi maõ
Goùi döõ lieäu nhaän töø remote
Hình V.2 Caùc modul cuûa chöông trình CPhone
Khi chöông trình naøy ñöa vaøo thöïc teá seõ goùp phaàn vaøo giaûi quyeát caùc coâng vieäc giöõa caùc phoøng ban trong cô quan ñöôïc nhanh choùng vaø thuaän tieän. Muïc ñích cuoái cuøng maø chöông trình coù theå thöïc hieän ñöôïc laø coù theå tröïc tieáp noùi truyeän vôùi nhau trong maïng LAN cuûa cô quan hay coâng ty naøo ñoù...
V.2.3 MODUL THU VAØ PHAÙT AÂM THANH
Modul xöû lyù aâm thanh laøm nhieäm vuï giao tieáp vôùi soundcard, ghi vaøo boä nhôù vaø truyeàn cho modul II ñeå maõ hoaù, ñoàng thôøi nhaän caùc maãu ñaõ giaûi maõ ôû modul II ñeå ñöa ra soundcard trong quaù trình nhaän.
Quaù trình thu vaø phaùt tieáng noùi thoâng qua vuøng ñeäm (buffer), coù 2 loaïi vuøng ñeäm trong Direct sound : Primary buffer vaø Secondary buffer. Primary buffer chöùa tieáng noùi maø ngöôøi nghe seõ nghe thaáy. Chæ coù duy nhaát moät Primary buffer vaø buffer naøy do DirectSound taïo ra, secondary buffer chöùa tieáng noùi hoaëc ñoaïn tieáng caàn ñöa ra. Chöông trình coù theå taïo ra moät hoaëc nhieàu Secondary buffer. Khi phaùt tieáng noùi trong secondary buffer, DerectSound seõ chuyeån tieáng noùi sang Primary buffer vaø ñöa ra soundcard. Chöông trình öùng duïng coù theå duøng DirectSoundCapture ñeå ghi tieáng noùi vaøo moät Capturebuffer. Cuõng nhö khi phaùt tieáng noùi, chöông trình coù theå baùo con troû ñeán moät vò trí naøo ñoù vaø khi noù ñeán cuoái cuûa buffer thì noù töï ñoäng quay laïi vò trí ñaàu cuûa buffer.
Khi thao taùc vôùi caùc buffer, DirectSound cho pheùp khoù moät phaàn cuûa buffer laïi ñeå ñaûm baûo khoâng bò ghi ñeø leân phaàn naøy.
Modul thu vaø phaùt tieáng noùi naèm trong cuøng moät Record thread. Thread coù möùc öu tieân cao nhaát. Moãi khi coù moät doøng thoâng baùo töø DirectSound göûi ñeán töùc laø khi con troû Capture buffer ñi ñeán vò trí quy ñònh tröôùc thì thread naøy seõ ñöôïc goïi ñeán. Luùc naøy, modul thu tieáng noùi seõ khoaù phaàn Capture buffer vöøa ghi xong. Neùu trong buffer cuûa modul phaùt tieáng noùi coù tín hieäu tieáng noùi thì seõ cheùp vaøo Secondary buffer cuûa DirectSound.
Löu ñoà cuûa modul thu vaø phaùt tieáng noùi nhö sau :
Baét ñaàu
Khoaù buffer
DirectSound
Cheùp tín hieäu aâm thanh vöøa laáy maãu vaøo Record buffer
Play buffer
coù döõ lieäu
Cheùp play buffer vaøo Secondary buffer
Môû khoaù buffer DirectSound
Kích hoaït modul maõ hoaù
Keát thuùc
ñuùng
sai
Hình V.3 Löu ñoà cuûa modul thu vaø phaùt tieáng noùi
V.2.4 MODUL MAÕ HOAÙ VAØ GIAÛI MAÕ AÂM THANH
Modul maõ hoaù ñöôïc kích hoaït sau khi modul VAD xaùc ñònh tín hieäu aâm thanh coù chöùc tieáng noùi. Coâng vieäc cuûa modul maõ hoaù goïi ñeán caùc thuû tuïc maõ hoaù tieáng noùi(GSM,LPC…). Sau ñoù, chuyeån döõ lieäu ñaõ maõ hoaù vaøo Send buffer toài kích hoaït modul truyeàn. Modul nhaän naèm trong thread maõ hoaù, coù möùc öu tieân bình thöôøng.
Baét ñaàu
Keát thuùc
Laáy moät khung tieáng noùi töø Record buffer
Play buffer
coù döõ lieäu
Maõ hoaù theo phöông phaùp PCM
Cheùp khung tieáng noùi ñaõ maõ hoaù vaøo Sendbuffer
Kích hoaït modul truyeàn
ñuùng
sai
Sau ñaây laø löu ñoà giaûi thuaät modul maõ hoaù :
Hình V.4 Löu ñoà giaûi thuaät modul maõ hoaù
Modul giaûi maõ tieáng noùi ñöôïc kích hoaït sau khi modul nhaän ñöôïc döõ lieäu töø maùy ôû xa. Loaïi boû Header, caùc döõ lieäu thöøa vaø ñöa vaøo trong buffer nhaän. Modul giaûi maõ seõ xaù ñònh phöông phaùp giaûi maõ töông öùng vôùi phöông phaùp maõ hoaù ñöôïc söû duïng ôû beân truyeàn. Sau ñoù chuyeån döõ lieäu ñaõ maõ hoaù vaøo buffer phaùt tieáng noùi.
Baét ñaàu
Keát thuùc
Laáy moät khung tieáng noùi töø buffer nhaän
Buffer nhaän coù döõ lieäu
Maõ hoaù theo phöông phaùp PCM
Cheùp khung tieáng noùi vaøo buffer phaùt
ñuùng
sai
Löu ñoà giaûi thuaät modul giaûi maõ nhö sau :
Hình V.5 Löu ñoà giaûi thuaät modul maõ hoaù
V.2.5 MODUL TRUYEÀN, NHAÄN AÂM THANH
Modul naøy coù nhieäm vuï giao tieáng giöõa maùy tính vôùi maïng IP. Söû duïng giao thöùc TCP/IP.
Khi buffer truyeàn coù döõ lieäu caàn truyeàn ñi, modul truyeàn seõ kích hoaït . döõ lieäu caàn truyeàn seõ coù theâm caùc header vaø caùc thoâng tin caàn thieát khaùc. Modul truyeàn coù möùc öu tieân bình thöôøng.
Khi coù döõ lieäu ñeán, winsock seõ göûi thoâng baùo ñeán chöông trình, chöông trình nhaän ñöôïc thoâng baùo vaø kích hoaït modul nhaän. Modul naøu coù nhieäm vuï nhaän döõ lieäu, kieåm tra, loaïi boû döõ lieäu thöøa cuøng vôùi header. Sau khi chuyeån döõ lieäu vaøo buffer nhaän vaø kích hoaït modul giaûi maõ.
Baét ñaàu
Keát thuùc
Laáy moät khung tieáng noùi töø buffer truyeàn
Buffer truyeàn coù döõ lieäu
Truyeàn theo giao thöùc TCP
ñuùng
sai
Löu ñoà giaûi thuaät cuûa modul truyeàn vaø nhaän :
Hình V. 6 Löu ñoà giaûi thuaät modul truyeàn
Baét ñaàu
Keát thuùc
Duøng giao thöùc TCP
Laáy goùi tin
ñuùng
sai
Kích hoaït modul giaûi maõ
Coù goi tin chöa nhaän
Hình V.7 Löu ñoà giaûi thuaät modul nhaän
V.3 THIEÁT KEÁ GIAO DIEÄN CHÖÔNG TRÌNH CPHONE
Chöông trình thöïc hieän vôùi ñieàu kieän hai maùy ñaøm thoaïi phaûi cuøng chaïy chöông trình öùng duïng naøy.
Giao dieän chính cuûa chöông trình :
Hình V.8 Giao dieän chöông trình CPhone
Khi muoán baét ñaàu cuoäc ñaøm thoaïi, ngöôøi söû duïng vaøo menu keát noái vaø click vaøo nhaäp IP. Ñieàu naøy seõ goïi haøm taïo keát noái giöõa hai maùy PC, haøm naøy hieån thò cöûa soå yeâu caàu ngöôøi söû duïng nhaäp vaøo IP cuûa maùy caàn keát noái. Sau khi ñaõ nhaäp xong click connect, moät thoâng ñieäp yeâu caàu keát noái seõ göûi ñeán maùy caàn keát noái.
Hình V.9 Nhaäp ñòa chæ IP
Neáu khoâng coù tín hieäu thì chöa cho pheùp quaù trình ñaøm thoaïi. Khi coù tín hieäu phaûn hoài thì caùc haøm khôûi ñoäng sound card, card maïng vaø socket ñöôïc goïi vaø thöïc hieän cuoác ñaøm thoaïi.
Hình V.10 Cuoäc ñaøm thoaïi ñang ñöôïc thöïc hieän
IV.4 KEÁT QUAÛ THÖÏC NGHIEÄM&NHAÄN XEÙT ÑAÙNH GIAÙ CHÖÔNG TRÌNH
IV.4.1 KEÁT QUAÛ THÖÏC NGHIEÄM
Moâi tröôøng thöû nghieäm ñoà aùn naøy laø maïng LAN, söû duïng coâng ngheä Ethernet 10 Mbps. Hieän taïi truyeàn döõ lieäu giöõa caùc maùy tính trong maïng LAN coøn raát ít, phaàn lôùn caùc taøi nguyeân veà daûi thoâng cuûa maïng coøn chöa söû duïng. Phaàn giaûi thoâng coøn laïi naøy laø raát lôùn ñeå truyeàn tín hieäu tieáng noùi, cuõng vì lyù do naøy neân ñoä treã point – to – point trong maïng nhoû vaø töông ñoái ñoàng ñeàu (haàu heát < 10ms), giaù trò naøy raát nhoû so vôùi möùc chaáp nhaän ñöôïc laø 200ms. Vì chaát löôïng cuûa cuoäc ñaøm thoaïi trong tröôøng hôïp naøy haàu nhö chæ phuï thuoäc vaøo chaát löôïng cuûa sound card.
IV.4.2 ÑAÙNH GIAÙ KEÁT QUAÛ
Qua thöû nghieäm, em thaáy chaát löôïng tieáng noùi ñaàu ra khoâng coù gì khaùc bieät so vôùi chaát löôïng tieáng noùi ñaàu vaøo, chaát löôïng aâm thanh sau khi truyeàn laø coù theå chaáp nhaän ñöôïc. Nhö du sao ñoù chæ laø ñaùnh giaù qua caûm nhaän cuûa tai chuùng ta maø thoâi neân chöa theå khaûng ñònh ñöôïc chaát löôïng tieáng noùi sau khi truyeàn coù ñaït tieâu chuaån cho pheùp hay khoâng. Neáu söû duïng caùc maùy ño caùc thoâng soá lieân quan ñeán chaát löôïng tieáng noùi, phöông phaùp naøy ñaûm baûo ñaùnh giaù chính xaùc chaát löôïng tieáng noùi trong ñieàu kieän chaáp nhaän ñöôïc. Nhöng luaän vaên naøy môùi chæ döøng laïi ôû möùc ñoä ñoà aùn toát nghieäp vaø do ñieàu kieän khoâng cho pheùp neân chöa coù theå coù ñöôïc caùc thieát bò ño caùc thoâng soá cuûa tieáng noùi. Vì vaäy, chöa theå ñaùnh giaù chaát löôïng aâm thanh moät caùch chính xaùc ñöôïc.
So vôùi moät soá dòch vuï truyeàn aâm thanh thoaïi hieän nay nhö : VoIP (dòch vuï 171) , Internet Telephony thì chaát löôïng aâm thanh toát hôn. Vì moâ hình Cphone chæ öùng duïng treân maïng cuïc boä neân toác ñoä ñöôøng truyeàn raát cao, maët khaùc khoaûng caùch raát ngaén. Tuy nhieân ñoä treã coøn raát lôùn song vôùi maïng cuïc boä thì vaán ñeà naøy vaãn coù theå chaáp nhaän ñöôïc. Coøn ñoái vôùi caùc dòch vuï 171 hay Internet Telephony hieän nay thì chaát löôïng aâm thanh giai ñoaïn ñaàu noùi chung khoâng ñaït ñöôïc mong muoán ñoái vôùi ngöôøi söû duïng nhöng hieän taïi chaát löôïng aâm thanh ñaõ ñöôïc caûi thieän ñaùng keå vaø ñaëc bieät caùc öùng duïng naøy ngaøy caøng ñöôïc ñöa vaøo phuïc vuï cuoäc soáng.
KEÁT LUAÄN
Ñoà aùn toát nghieäp ñaõ hoaøn thaønh caùc nhieäm vuï ñeà ra trong phaïm vi cho pheùp. Do ñieàu kieän veà thôøi gian cuøng nhö trình ñoä coøn haïn cheá neân ñoà aùn naøy döøng laïi ôû möùc nghieân cöùu moät soá phöông phaùp maõ hoaù tieáng noùi vaø moät soá giao thöùc truyeàn tín hieäu treân maïng Internet nhö TCP/IP, UDP. Treân cô sôû ñoù xaây döïng phaàn meàm thöû nghieäm truyeàn tieáng noùi thoaïi treân maïng LAN.
Ñoà aùn naøy cuûa em söû duïng caùc haøm coù saün trong moâi tröôøng SDK töø ñoù xaây döïng öùng duïng CPhone coù theå lieân keát hai maùy laïi vaø thöïc hieän quaù trình trao ñoåi aâm thanh.
Phaàn thöû nghieäm môùi chæ döøng laïi ôû vieäc xaây döïng moät öùng duïng truyeàn tieáng noùi giöõa 2 thöïc theå PC theo giao thöùc TCP/IP vaø tieáng noùi môùi chæ ñöôïc maõ hoaù theo phöông phaùp PCM neân tyû soá neùn vaø toác ñoä truyeàn chöa cao. Maët khaùc, do môùi chæ ñaùnh giaù ñöôïc chaát löôïng tieáng noùi theo phöông phaùp chuû quan neân chöa khaûng ñònh ñöôïc ñieàu gì veà ñoä treã vaø chaát löôïng tieáng noùi sau khi truyeàn. Theá nhöng nhöõng gì ñaït ñöôïc trong ñ
Các file đính kèm theo tài liệu này:
- luanvan1234.doc