LUẬN VĂN TỐT NGHIỆP Trang 1
LỜI NÓI ĐẦU
Trong những năm gần đây, mạng máy tính ngày càng trở nên phổ biến. Việc liên
kết các máy tính trên môi trường mạng cũng như liên kết các mạng lại với nhau đem lại
cho chúng ta nhiều lợi ích trong công việc cũng như trong việc học tập nghiên cứu, giải
trí. Chúng ta có thể sử dụng các tài nguyên sẵn có được chia xẻ như file server, printer,
máy fax, ... môi trường mạng còn là một môi trường thông tin nhanh chóng và tiện lợi
nhờ vào các cơ chế truyền thông trên mạng như : e-mail, www ...
Bên cạnh đó, tốc độ phát triển của máy tính PC cũng rất nhanh chóng. Các kỹ
thuật hiện đại đã giúp tạo ra các máy PC với tốc độ tính toán nhanh hơn, bộ nhớ lớn
hơn và khả năng xử lý của nó cũng ngày càng đa dạng hơn trong khi giá thành ngày
càng rẻ hơn. Một trong những khả năng ưu việt của máy PC hiện nay là hỗ trợ
multimedia. Các máy PC ngày nay giao tiếp với con người không chỉ bằng text mà còn
kết hợp tất cả các phương tiện khác như tiếng nói, hình ảnh.
Việc đưa kỹ thuật multimedia vào các ứng dụng truyền thông trên mạng giúp
chúng ta tạo ra nhiều ứng dụng phong phú hơn. Chẳng hạn hộp thư điện tử ngày nay
có thể không chỉ là văn bản mà còn bao gồm tiếng nói, hình ảnh. Các trang web trở
nên sinh động hơn hẳn khi kèm theo kỹ thuật multimedia. Bên cạnh đó, chúng ta có thể
thiết kế các ứng dụng tiện ích như Video conference, voice mail...
Thông qua chương trình này, người sử dụng có thể trao đổi thông tin với nhau
bằng tiếng nói. Chương trình này đã được hiện thực rất nhiều trong các lĩnh vực thông
tin như điện thoại, viễn thông, máy tính . . . Tuy nhiên nó chưa được áp dụng và phát
triển rọng rãi như trên các lĩnh vực thông tin khác do sự hạn chế của thiết bị. Ngày
nay, khi công nghệ thông tin đã phát triển thì việc hiện thực chương trình này là hoàn
toàn có thể. Ứng dụng trong nhiều lĩnh vực khác nhau như :
•Việc dạy học từ xa.
•Việc chẩn đoán, chữa bệnh từ xa.
•Hội thảo, thảo luận theo nhóm.
•Công cụ trao đổi thông tin bằng hình ảnh và âm thanh.
Mục tiêu của đồ án tốt nghiệp là tìm hiểu các mô hình và công nghệ truyền âm
thanh trên mạng máy tính, trên cơ sở đó xây dựng ứng dụng truyền thông âm thanh
Trong mô hình này đòi hỏi cả hai thuê bao cần phải có soundcard, microphone, loa và
phần mềm giống nhau.[1]
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
Máy tính Máy tính
IP
LUẬN VĂN TỐT NGHIỆP Trang 3
Hình I.1 : Mô hình PC - PC
I.1.2 MÁY TÍNH ĐẾN ĐIỆN THOẠI HOẶC ĐIỆN THOẠI ĐẾN MÁY TÍNH
Trong mô hình này, một thuê bao sử dụng máy tính nối mạng với mạng còn thuê
bao kia sử dụng điện thoại trong mạng PSTN/ISDN/GSM/TDM. Sử dụng một gateway
để chuyển tiếng nói trên mạng IP thành tiếng nói trên mạng PSTN và trao đổi thông tin
giữa hai mạng trên. Như vậy, ở đây máy tính phải đầy đủ các thiết bị như Soundcard,
loa, microphone và phần mềm thông qua server của mạng IP để có thể kết nối với mạng
PSTN thông qua Geteway.
Hình I.2 : Mô hình Máy tính – Điện thoại
I.1.3 ĐIỆN THOẠI ĐẾN ĐIỆN THOẠI
Trong mô hình này, cả hai thuê bao đều sử dụng điện thoại bình thường và mạng
IP được sử dụng trong trường hợp cuộc gọi đường dài. Gateway được sử dụng ở cả hai
đầu để chuyển đổi dữ liệu giữa các mạng với nhau.[1]
Hình I.3 : Mô hình Điện thoại – Điện thoại
I.2 YÊU CẦU ỨNG DỤNG TRUYỀN ÂM THANH TRÊN MẠNG LAN
Trong phần này sẽ phân tích các yêu cầu xây dựng ứng dụng truyền âm thanh
trên mạng LAN : Từ ba mô hình trên em nhận thấy mô hình 2 và 3 đòi hỏi quá trình
nghiên cứu và thiết bị phức tạp, đòi hỏi phải đầu tư công nghệ mới có thể thực hiện
được. Nên trong đồ án này chỉ có thể thức hiện theo mô hình 1 là PC – PC, nó đơn giản
hơn và không cần đầu tư thiết bị mới, có thể tận dụng các thiết bị có sẵn và điều quan
trọng có thể thử nghiệm hoàn chỉnh trong phạm vi đồ án.
vậy một máy trong mạng có thể là P-SERVER hoặc P-CLIENT. Trên môi trường mạng,
khi chúng ta muốn nói chuyện một người trên một máy nào đó, chúng ta sẽ tiến hành
việc gọi liên kết. Việc gọi liên kết được tiến hành bằng việc xác định địa chỉ IP của máy
mà chúng ta cần liên kết. Sau đó chúng ta sẽ chờ việc xác lập liên kết. Ở máy được gọi
sẽ có thông báo cho người sử dụng biết rằng có một người khác muốn nói chuyện. Tùy
theo người đó quyết định có chấp nhận hay không. Nếu chấp nhận thì liên kết sẽ được
xác lập và hai bên sẽ có thể tiến hành trao đổi thông tin với nhau.
Trong quá trình trao đổi thông tin, các máy sẽ truyền tiếng nói của người sử
dụng đồng thời nhận dữ liệu âm thanh của máy liên kết. Khi nói chuyện xong, liên kết
sẽ bị hủy bỏ và chương trình kết thúc. Nếu máy được gọi không có người trả lời thì sau
thời gian chờ vượt quá giới hạn thì liên kết cũng sẽ bị huỷ bỏ. Vì dữ liệu truyền nhận
trong chương trình là dữ liệu dạng liên tục của âm thanh cho nên có các yêu cầu đặt ra
như sau: Bảo đảm tính mạch lạc của dữ liệu. Tiếng nói trong quá trình thông tin phải rõ
ràng, liền lạc, không bị ngắt quãng.
Các yêu cầu trên đặt ra các nhiệm vụ mà chúng ta phải giải quyết trong việc xây
dựng chương trình. Đối với dữ liệu là âm thanh, chúng ta phải xem xét các thông số
trong quá trình lấy mẫu ở đầu vào. Các thông số đặc trưng như : tần số lấy mẫu, số bit
biểu diễn cho một điểm lấy mẫu, kênh lấy mẫu được sử dụng 1 kênh (mono) hay hai
kênh (stereo). Do đó chúng ta phải tổ chức kích thước buffer âm thanh sao cho phù hợp
với việc truyền nhận đạt tốc độ cao. Một vấn đề khác được đặt ra với dữ liệu âm thanh
là việc nhận và phát ở đầu ra, chúng ta phải quan tâm đến việc xử lý và loại bỏ các tín
hiệu nhiễu giúp cho âm thanh được rõ ràng, trung thực. Do việc truyền nhận dữ liệu là
trên môi trường mạng nên chúng ta phải quan tâm đến tốc độ, lưu lượng trao đổi dữ
liệu, thời gian truyền nhận để đưa ra cách giải quyết cho phù hợp. Ngoài các vấn đề
chính ở trên, một số yêu cầu khác đặt ra cho ứng dụng như : cơ chế tạo lập liên kết, việc
chọn lựa các dạng format dữ liệu, định các thông số thời gian. Tất cả các nhiệm vụ thực
thi đều phải được thực hiện thông qua giao diện dễ dàng cho người sử dụng.[3]
Trường hợp mở rộng hệ thống cho mạng Internet cần một kết nối giữa server
mạng với tổng đài mạng PABX, yêu cầu này đòi hỏi phức tạp hơn và cần có các trang
thiết bị để thử nghiệm. Bởi vậy trong đồ án này em chỉ nghiên cứu cách thức truyền
LUẬN VĂN TỐT NGHIỆP Trang 7
Mạng lớp A dùng cho mạng diện rộng. Trường netid có 7 bits nên có thể có 127
mạng. Mạng lớp B là mạng có kích thước trung bình và thích hợp cho các tổ chức có
quy mô lớp và vừa. Mạng lớp C dùng trong cơ quan nhỏ, trong đó mỗi mạng chỉ có
không hơn 254 nút.
Con số 32 bits biểu thị 4 chữ số thập phân tương ứng giá trị 4 byte tạo thành địa
chỉ IP. Những số thập phân cách nhau bởi dấu chấm (.). Một ví dụ về tên máy và địa chỉ
IP của máy :
Hostname : viethung
IP Address : 192.168.0.55
II.1.1 KHÁI NIỆM SOCKET
Socket là một đơn vị cấu trúc truyền thông 2 chiều. Chúng có thể đọc hay ghi lên
nó. Tuy nhiên mỗi socket là một thành phần của một mối nào đó giữa các máy trên
mạng máy tính và các thao tác đọc ghi chính là các thao tác trao đổi dữ liệu giữa các
ứng dụng trên nhiều máy khác nhau. Socket là điểm kết nối cuối cùng cho phép những
ứng dụng gắn vào mạng. Khái niệm socket được cung cấp bởi một thư viện chứa tất cả
các hàm yêu cầu cho bất kỳ chương trình mạng nào. Khi một ứng dụng yêu cầu các
dịch vụ mạng, nó gọi quá trình tự tập hợp các thư viện để quản lý hoạt động mạng. Hai
loại socket có sẵn stream và datagram.[5]
Những socket stream dùng cho TCP (Transmission Control Protocol), những
socket datagram dùng UDP (User Datagram Protocol). Hình II.3 Các socket và port trong mối nối TCP/IP
Số hiệu cổng Mô tả
0 Reserved
2 Management Entry
5 Remote Job Entry
7 Echo
9 Discard
Internet protocol (IP) là một dạng giao thức truyền tin được thiết kế cho mạng
chuyển mạng gói. Vai trò của IP tương đương với vai trò của tầng mạng trong mô hình
OSI. Giao thức IP đảm nhiệm việc chuyển những gói mạch dữ liệu (datagram) từ địa
chỉ nguồn đến địa chỉ đích. Địa chỉ IP có địa chỉ cố định (4 byte) dùng để xác định duy
nhất các trạm làm việc đang tham gia vào việc truyền, nhận dữ liệu. Trong trường hợp
mạng truyền tin chỉ có thể truyền những gói dữ liệu có kích thức nhỏ, giao thức IP cũng
đảm nhiệm chức năng chia nhỏ các gói dữ liệu có kích thước lớn trước khi truyền và
gộp chúng lại chúng sau khi nhận được.[5]
Giao thức IP được thiết kế với chức năng chuyển 1 gói các bit, gọi là internet
datagram từ địa chỉ nguồn đến địa chỉ đích. Đây là một giao thức theo kiểu không liên
kết, nghĩa là không có giai đoạn thiết lập liên kết trước khi truyền dữ liệu, nó cũng
không có các cơ chế bảo đảm thông tin tới đích an toàn, không có cơ chế điều khiển
luồng dữ liệu. Trên thực tế việc thông báo về lỗi đường truyền có thể được thực hiện
nhờ một giao thức khác có tên ICMP( Internet Control Message Protocol).
Địa chỉ IP như đã nói ở trên, là một chuỗi bit có độ dài 4 byte, được phân chia
làm 5 lớp và các bit đầu tiên được dùng làm định danh lớp địa chỉ.
II.2 GIAO THỨC TCP
Giao thức TCP là giao thức dùng cho tầng ngay trên tầng IP. Đối với mô hình
OSI, ta có thể thấy tầng TCP có vai trò tương ứng với các tầng giao vận và tầng phiên .
Khác với IP, TCP là giao thức có liên kết (connection oriented), nghĩa là nhất
thiết phải có giai đoạn thiết lập liên kết giữ các cặp thực thể TCP trước khi chúng có
trao đổi dữ liệu với nhau. Giao thức TCP cung cấp một khả năng truyền dữ liệu một
cách an toàn giữa các thực thể trên mạng. Nó cung cấp các chức năng nhằm kiểm tra
tính chính xác của dữ liệu khi gửi đến và gửi lại dữ liệu khi có lỗi xảy ra.[5]
Đơn vị dữ liệu cơ bản của TCP gọi là segment. Trong segment có một cặp tham
số là số hiệu cổng của trạm nguồn và số hiệu cổng của trạm đích. Mỗi một tiến trình
ứng dụng tại một trạm sẽ truy cập các dịch vụ TCP thông qua một cổng. Một cổng như
vậy kết hợp với một địa chỉ IP sẽ tạo thành một socket duy nhất trong mạng. Dịch vụ
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP Trang 9
- Gọi hàm gửi hay nhận dữ liệu để trao đổi thông tin với server, ví dụ như hàm
send, recv.
- Sau khi đã hoàn tất quá trình trao đổi dữ liệu, ứng dụng client gọi hàm
closesocket để đóng socket đã tạo.
Hình II.6 Sơ đồ giao tiếp của client với server
Ghi chú:
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP Trang 12
Các bước trên cơ bản là giống nhau cho các ứng dụng client và server viết trên
Windows NT và UNIX. Tuy nhiên, với ứng dụng viết trên UNIX thì không cần gọi các
hàm WSAStartup, WSACleanup để khởi tạo thư viện quản lý socket và đóng bộ phận
này. Lý do, với UNIX thì bộ phận quản lý socket đã được hệ điều hành nạp sẵn.
II.3 GIAO THỨC UDP
Giao thức UDP cung cấp khả năng broadcast trên hệ thống mạng TCP/IP .
Chúng ta cũng cần cài đặt ứng dụng client và server. Ứng dụng client có nhiệm vụ gửi
thông báo đến tất cả các instance của ứng dụng server đang chạy trên hệ thống mạng.[5]
II.3.1 CÁCH CÀI ĐẶT ỨNG DỤNG SERVER UDP
Ứng dụng server UDP được cài đặt đơn giản hơn ứng dụng TCP. Chúng ta cần
các bước chính sau đây :
- Gọi hàm socket để tạo một socket .
- Gọi hàm bind để kết buộc socket với một port, đối với mỗi giao thức ứng
dụng chuẩn thì sẽ có một hằng số được định nghĩa sẵn trong winsock cho
port của giao thức đó.
- Gọi các hàm gửi hay nhận dữ liệu để trao đổi thông tin với client, ví như hàm
sendto, recvfrom.
- Sau khi đã hoàn tất quá trình trao đổi dữ liệu, ứng dụng server gọi hàm
closesocket để đóng socket đã tạo.
II.3.2 CÁCH CÀI ĐẶT ỨNG DỤNG CLIENT UDP
Ứng dụng client UDP thực hiện các bước sau :
- Gọi hàm socket để tạo một socket.
cao tại tốc độ dưới 16 kbps, bộ mã nguồn khắc phục được nhược điểm này.[4]
Mã hoá nguồn (Source codec) : Cho phép đạt được tốc độ truyền dữ liệu thấp, có
thể thực hiện tại tốc độ bit > 2kbps, nhưng chất lượng âm thanh không cao.
Mã hoá hỗn hợp (hybrid codec) : Sử dụng cả hai phương pháp trên để tạo ra tín
hiệu âm thanh có chất lượng tốt ở tốc độ dữ liệu trung bình.
Hình III.1 Biểu đồ so sánh các phương pháp mã hoá
Mã hoá dạng sóng
Đòi hỏi tốc độ bit rất cao nhưng tạo ra chất lượng âm thanh hoàn hảo và thời
gian xử lý rất ít, bởi vì phương pháp này chỉ đơn giản lấy mẫu tín hiệu ở tốc độ nào đó
và lượng tử hoá từng mẫu dùng lượng tử hoá tuyến tính. Cách tiếp cận này gọi là điều
biến xung mã(PCM). Am thanh mã hoá theo phương pháp PCM, lấy mẫu tốc độ 8KHz,
lượng tử 8bit/mẫu, cho tốc độ bit ra là 64 kbps.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
Rất tốt
Tốt
Trung
bình
Chất lượng tiếng nói
Mã hoá
hỗn hợp
Mã hoá dạng sóng
Mã hoá dự đoán
tuyến tính LPC
Tốc độ 2 4 8 16 32 64
LUẬN VĂN TỐT NGHIỆP Trang 14
Phương pháp điều biên xung mã vi phân (DPCM) dự đoán giá trị hiện tại dựa
vào các giá trị trước của các mẫu quá khứ, chỉ lưu trữ giá trị sai số lượng tử. Giá trị sai
số này sẽ nhỏ hơn giá trị thực của mẫu, do đó cho phép lưu trữ giảm đi một phần.
Một cải tiến của DPCM là điều biến xung mã vi phân thích nghi(ADPCM). Bộ
khung 160 mẫu các tín giệu PCM tuyến tính lấy mẫu tại tần số 8 kHz. Chu kỳ mỗi
khung là 20 ms, đây là khoảng thời gian rất ngắn và trong khoảng thời gian này cho
phép được coi tín hiệu âm thanh ổn định. Độ trễ truyền dẫn thông tin được tính bằng
tổng thời gian xử lý và kích thước khung của thuật toán.
Bộ mã hoá thực hiện việc nén một khung tín hiệu đầu vào 160 mẫu (20 ms) vào
một khung 260 bit. Như vậy một giây nó sẽ thực hiện nén được 13.13
3
bit ( tương
đương với 1625 byte). Do vậy để nén một megabyte tín hiệu chỉ cần một thời gian chưa
đầy 10 phút.[4]
Trung tâm của quá trình xử lý tín hiệu là bộ lọc. Đầu ra của bộ lọc phụ thuộc rất
nhiều vào giá trị đầu vào đơn của nó. Khi có một dãy các giá trị đưa qua bộ lọc thì dãy
tín hiệu này sẽ được dùng để kích thích bộ lọc. Dạng của bộ nén GMS 06.10 dùng để
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP Trang 15
nén tín hiệu âm thanh bao gồm 2 bộ lọc và một giá trị kích thước ban đầu. Bộ lọc ngắn
hạn dự đoán tuyến tính được đặt tại tầng đầu tiên của quá trình nén và tại tầng cuối
cùng trong suốt quá trình dãn. Nó được kích thích bởi đầu ra của bộ lọc dự đoán dài hạn
(LTP).
III.1.2 PHƯƠNG PHÁP ĐIỀU BIẾN XUNG MÃ PCM
Mã hoá tín hiệu âm thanh liên qua tới các bước sau đây :
a. Tín hiệu âm thanh được lấy mẫu với tần số tối thiểu là :
max
2 ff
s
≥
fs : tần số lấy mẫu
fmax : tần số lớn nhất trong tín hiệu được lấy mẫu.
Việc lấy mẫu như vậy là đảm bảo hoàn toàn khôi phục lại được tín hiệu tương
E
(1)
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP Trang 16
Điều này sẽ không đúng nếu tín hiệu là bão hoà bộ lượng tư. Ví du như biểu diễn
hình 1, đầu ra của bộ lượng tử có thể bão hoà tại 5 với tần số đầu và vượt qua số lượng
và mỗi lượng tử trong trường hợp này sẽ là một hàm tăng tuyến tính.[4]
Hình III.2 a.Đặc tuyến lượng tử hoá;b.Đặc tuyết sai số lượng tử; c.VD lượng tử đều
Nếu như ta cho rằng bộ lượng tử không bị bão hoà. Theo công thức (1) thì giá trị
bình phương trung bình của sai số lượng tử là :
∫
∆
−
∆
−
∆
=
2
2
2
2
12
)( dEEpE
(2)
Nếu giá trị độ rộng của đầu vào X là Xrms, thì tỷ số tín hiệu/nhiễu được tính bởi :
[ ]
12//
22
3.lượng tử hoá đủ mịn(B>6) để ngăn chặn những thành phẩm liên quan đến tín hiệu
trong dạng tín hiệu lỗi, sai số có thể được đo trong biểu thức công suất nhiễu hay là
biến sai số 2.
4.Bộ lượng tử được sắp với thanh biên độ từ (-4Xrms;+4Xrms)
như vậy trong lượng tử đều, cứ thêm 1 bit thì được lợi 6 dB và để có chất lượng thích
hợp thì B >11 do đó thông lượng tương đối lớn.
III.2 CÁC PHƯƠNG PHÁP NÉN TIẾNG NÓI
III.2.1 GIỚI THIỆU CHUNG
Y tưởng nén tiếng nói là để giảm kích thước nhằm giúp ít tốn băng thông truyền
qua mạng. Dòng dữ liệu tiếng nói được giải nén ở tốc độ lấy mẫu mặc định ( 8bits/mẫu,
8 khz, kênh mono) sẽ yêu cầu đường truyền có tốc độ 8000 mẫu/giây * 8 bits/ mẫu = 64
Kbits/giây để truyền dữ liệu qua mạng. Do đó, tùy theo tốc độ đường truyền thực tế trên
mỗi mạng mà chọn giải pháp nén hay không nén dữ liệu trước khi truyền dữ liệu âm
thanh qua mạng, cũng như chọn tỉ lệ nén là bao nhiêu cho phù hợp (chọn giải thuật
nén). Vì nếu dữ liệu được nén thì phải giải nén khi được truyền đến máy nhận, do đó
cũng tốn thời gian để nén và giải nén dữ liệu, điều này dẫn đến ảnh hưởng thời gian
thực của hệ thống.
Đối với các mạng cục bộ, thường có tốc độ truyền của mạng cao nên có thể
không cần phải nén tiếng nói trước khi truyền.
Ngược lại, đối với mạng Internet, hệ thống được kết nối với Internet thông qua
các modem chuẩn có tốc độ thấp 14,4 Kbits/s hoặc 28,8Kbits/s thì nhất thiết phải nén
tiếng nói trước khi truyền và giải nén trước khi phát. Hai phương pháp nén âm thanh
thường được dùng nhất để giảm băng thông là GSM và ADPCM.[2]
III.2.2 CÁC PHƯƠNG PHÁP NÉN CỤ THỂ
III.2.2.1 Phương pháp nén tiếng nói theo chuẩn GSM
Phát triển tại Đại học Kỹ thuật Berlin vào năm 1992, GSM là một trong những
phương pháp nén âm thanh phức tạp nhất đang được sử dụng, cho tỉ lệ nén 1:10. Giải
thuật GSM dựa trên giao thức truyền thông Mobile Phone, hiện tại là giao thức phổ biến
nhất tại Châu Âu đối với điện thoại di động.
do đó giải thuật này cung cấp một tỉ lệ nén là 4:1. Ví dụ tiếng nói 16 bits/mẫu, 8 Khz,
kênh mono yêu cầu tốc độ truyền dữ liệu là 128 Kbits/s , khi nén với giải thuật
IMA_ADPCM chỉ cần tốc độ truyền dữ liệu 32 Kbits/s là đủ.
Quá trình thực hiện của giải thuật IMA_ADPCM là đọc từ những bộ đệm có giá
trị kiểu nguyên và nén chúng thành một mẫu âm thanh 16 bits được biểu diễn bằng các
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP Trang 19
mức lượng hóa 4 bit. Bởi vì không có giới hạn trong kích thước buffers tiếng nói nên
những mã ADPCM được kết hợp một cách dễ dàng với các phần còn lại của chương
trình để nén tiếng nói khi thu và giải nén trở lại khi phát.
Giải thuật nén IMA ADPCM :
Theo sơ đồ mã hóa trên chúng ta thấy giải thuật IMA ADPCM tính toán sự
chênh lệch giữa mẫu âm thanh hiện tại X[n] và mẫu đã tiên đoán trước Xp[n-1] và sử
dụng sự chênh lệch đó để tính toán mức lượng hóa D[n] cho mỗi mẫu. Giá trị Xp[n-1]
chỉ là giá trị trễ thời gian của giá trị X[n]. Hình sau chỉ ra sơ đồ khối của quá trình
lượng hóa dùng giải thuật IMA. Mỗi mức đầu ra của bộ lượng hóa được biểu diễn bằng
bốn bits. Bit thứ tư là bit dấu của mức độ lượng hóa.[2]
Hình III.4 Sơ đồ giải thuật mã hoá nén IMA ADPCM
Từ sơ đồ giải thuật ta thấy rằng bit thứ ba được cài đặt lên 1 nếu độ chênh lệch
giữa X[n] và Xp[n-1] là lớn hơn hay bằng step_size. Sau đó step_size được chia 2 và so
sánh trở lại với độ chênh lệch (độ chênh lệch sẽ được tính lại Mẫu = mẫu-kích thước
mẫu tại bước giải thuật nếu bit thứ ba được cài lên1). Bit thứ hai cũng được cài lên 1
khi độ chênh lệch mới ≥ kích thước mẫu tại bước giải thuật/2. Bộ mã hóa một lần nữa
laị chia kích thước mẫu tại bước giải thuật cho 2 và so sánh với độ chênh lệch mới và
thiết lập giá trị cho bit một tương tự như các bước trước.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP Trang 20
CHƯƠNG IV
TÌM HIỂU HỖ TRỢ CỦA WINDOWS SDK
TRONG XỬ LÝ VÀ TRUYỀN NHẬN ÂM THANH
ID
SIZE
FROM TYPE
"fmt"
SIZE
"data"
SIZE
Hai subchunk trong chunk wave đặc tả thông tin về một âm thanh file wave và
sau đó là chính dữ liệu âm thanh. Chunk fmt chứa chủ yếu đối tượng WAVEFORMAT
và một số dữ liệu thêm vào gắn ở cuối chunk. Một đối tượng WAVEFORMAT được
định nghĩa như sau :
Typedef struct waveformar_tag{
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
} WAVEFORMAT;
Trong đo :
wFormatTag : Chứa hằng WAVE_FORMAT_PCM được định nghĩa trong
MMSYSTEM.H như sau:
# define WAVE_FORMAT_PCM 1
Giá trị WAVE_FORMAT_PCM báo cho phần mềm đọc file wave biết cách âm thanh
trong nó được mã hoá.
nChannels : Của đối tượng WAVEFORMAT có 2 giá trị :
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP Trang 22
1 đối với âm thanh mono.
2 đối với âm thanh stereo.
nSamplePerSec : Cho biết tần số lấy mẫu của âm thanh để có thể thu và phát
IV.1.1.2 Hàm Playsound
Chúng ta dùng hàm PlaySound để play dữ liệu dạng waveform hoặc chúng ta có
thể dùng hàm sndPlaySound. Tuy nhiên trong môi trường Win32 thì nên dùng hàm
PlaySound.
Hàm PlaySound cho phép chúng ta chỉ định các thông số nguồn âm thanh theo
các cách sau:
• Dùng tên alias khai báo trong file WIN.INI
• Dùng tên file.
• Dùng chỉ số nhận dạng tài nguyên
Waveform-Audio Files
Trong môi trường Windows, phần lớn các file âm thanh dạng waveform đều có phần
mở rông là .WAV
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ
LUẬN VĂN TỐT NGHIỆP Trang 23
Ví dụ dưới đây minh họa cho việc phát file âm thanh “AmThanh.WAV”
PlaySound("C:\\SOUNDS\\AmThanh.WAV", NULL, SND_SYNC);
Play sound theo các hiện tượng
Hàm PlaySound còn cho phép chúng ta xuất âm thanh tùy theo một sự kiện nào
đó xảy ra trong hệ thống như click mouse hay nhấn một phím nào đó. Hệ thống sẽ phát
âm thanh tùy theo hiệc tượng xảy ra để cảnh báo người sử dụng. Am thanh dạng này
được gọi là sound events.
Để xác định sound event, hàm PlaySound sẽ được gọi với thông số pszSound trỏ
đến bảng đăng ký sự kiện. Ví dụ chúng ta sẽ gọi hàm PlaySound ứng với sự kiện mouse
click như sau:
PlaySound("MouseClick", NULL, SND_SYNC);
IV.1.2 GIAO TIẾP AUDIO VỚI BẰNG CÁC DỊCH VỤ CẤP THẤP
Trong phần này chúng ta sẽ khảo sát việc giao tiếp với thiết bị audio bằng các
hàm cấp thấp, các hàm này phù hợp với các ứng dụng cần giao tiếp. Các hàm và cấu
trúc cấp thấp này đều có prefix là wave.[6]
Thiết bị và dữ liệu
Các hàm truy xuất này sẽ truy xuất này sẽ lấy các cấu trúc liên quan đến khả
năng của thiết bị. Các cấu trúc dưới đây sẽ tương ứng với các hàm liệt kê ở trên:
Hàm Structure
AuxGetDevCaps AUXCAPS
WaveInGetDevCaps WAVEINCAPS
WaveOutGetDevCaps WAVEOUTCAPS
Thiết bị waveform có khả năng hỗ trợ các dạng format không chuẩn. Dạng
format không chuẩn này được dùng trong cấu trúc WAVEFORMATEX.
Handle và Identifier của thiết bị
Khi mở thiết bị, chúng ta sẽ nhận được handle hay thông số Identify của thiết bị.
Chúng ta sẽ điều khiển thiết bị qua các thông số này.
Sự khác biệt giữa handle và identify là khó thấy nhưng rất quan trọng.
Identitier của thiết bị được chỉ định ngầm định từ số lượng các thiết bị sẵn có
trong hệ thống. Identifier sẽ được trả về khi chúng ta dùng các hàm auxGetNumDevs,
waveInGetNumDevs, or waveOutGetNumDevs Hàm.
Handle của thiết bị là thông số trả về của device driver khi chúng ta dùng các
hàm waveInOpen hay waveOutOpen.
Waveform-Audio Output Data Types
Các thông số dưới đây được dùng cho thiết bị waveform output
Cấu trúc Chức năng
HWAVEOUT Handle của thiết bị waveform output
WAVEFORMATEX Cấu trúc dùng chỉ định dạng format thiết bị output/
input
WAVEHDR Cấu trúc dùng làm header cho khối dữ liệu
waveform. Cấu trúc được dùng cho cả thiết bị
output và input
WAVEOUTCAPS Cấu trúc dò hỏi khả năng của thiết bị output.
Chỉ định dạng format của dữ liệu waveform audio
Khi chúng ta mở thiết bị output bằng hàm waveOutOpen, thông số pwfx sẽ chỉ
định cấu trúc WAVEFORMATEX xác định dạng format của dữ liệu waveform. Đây là
0 (trái) còn byte sau là kênh 1 (phải).
16-bit mono Mỗi giá trị lấy mẫu là 2 byte. Các giá trị mẫu xếp theo
thứ tự 1, 2, 3, 4 . . . Với mỗi giá trị mẫu byte đầu là byte
thấp của kênh 0 còn byte sau là byte cao của kênh 0.
16-bit stereo Mỗi giá trị lấy mẫu là 4 byte. Các giá trị mẫu xếp theo
thứ tự 1, 2, 3, 4 . . . Với mỗi giá trị mẫu byte đầu là byte
thấp của kênh 0 (trái), byte thứ 2 là byte cao của kênh 0,
byte thứ 3 là byte thấp của kênh 1 (phải) còn byte thứ 4
là byte cao của kênh 1.
Đóng thiết bị waveform-Audio Output
Sau khi thực thi công việc xong, chúng ta sẽ gọi hàm waveOutClose để đóng
thiết bị. Khi thiết bị đang thực thi mà gọi hàm này thì lỗi sẽ xảy ra. Nếu chúng ta muốn
đóng thiết bị giữa chừng thì đầu tiên chúng ta nên gọi hàm waveOutReset trước khi
đóng thiết bị. Nhưng trước đó cũng cần gọi hàm waveOutUnprepareHeader để
unprepare tất cả các khối dữ liệu.
Đề tài : Xây dựng ứng dụng truyền thông âm thanh trên mạng cục bộ