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

Tài liệu Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ: ... Ebook Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ

doc69 trang | Chia sẻ: huyen82 | Lượt xem: 1283 | Lượt tải: 0download
Tóm tắt tài liệu Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ, để xem tài liệu hoàn chỉnh 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. 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 s._.

Các file đính kèm theo tài liệu này:

  • docLV0923.doc