Luận văn tốt nghiệp
Tìm hiểu mô hình điện thoại qua
mạng
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]
trên mạng LAN : Từ ba mô hình trên em nhận thấy mô hình 2 và 3 đòi hỏi quá trình
nghiên cứu và thiết bị phức tạp, đòi hỏi phải đầu tư công nghệ mới có thể thực hiện
được. Nên trong đồ án này chỉ có thể thức hiện theo mô hình 1 là PC – PC, nó đơn
giả
n hơn và không cần đầu tư thiết bị mới, có thể tận dụng các thiết bị có sẵn và điều
quan trọng có thể thử nghiệm hoàn chỉnh trong phạm vi đồ án.
Vấn đề đặt ra là với một hệ thống mạng LAN, WAN cùng với tài nguyên sẵn
có của nó xây dựng một chương trình truyền tiếng nói với thời gian thực cho phép từ
máy này sang máy khác (point to point) với một số các yêu cầu thích hợp giống nh
ư
việc xử lý và truyền tiếng nói trong thông tin liên lạc (điện thoại hữu tuyến). Chương
trình sử dụng giao thức TCP/IP là một giao thức phổ biến và tin cậy hiện nay để kết
nối và truyền tiếng nói. Do sử dụng giao thức TCP là giao thức có liên kết nên dẫn
đến độ trễ rất lớn nhưng với ứng dụng trong mạng LAN thì vẫn có thể chấp nhận
được. Ngay khi tiếng nói được thu và có th
ể qua một số các xử lý như mã hoá tiếng
nói hoặc nén trên một máy, tiếng nói được truyền tới máy cần kết nối và qua các xử lý
ngược so với lúc thu như giải nén và giải mã để được phát ra loa. Chương trình cho
phép kết nối hai máy và tạo một mô hình điện thoại trên máy tính như điện thoại hữu
tuyến thông thường. Bất kỳ máy nào trong mạng cũng có thể ở chế độ chờ hay chế độ
chạy nền (background) gọi máy là P-SERVER; máy ở chế độ gọi (active) gọi là P-
CLIENT. Như vậy một máy trong mạng có thể là P-SERVER hoặc P-CLIENT. Trên
môi trường mạng, khi chúng ta muốn nói chuyện một người trên một máy nào đó,
chúng ta sẽ tiến hành việc gọi liên kết. Việc gọi liên kết được tiến hành bằng việc xác
định địa chỉ IP của máy mà chúng ta cần liên kết. Sau đó chúng ta sẽ chờ việc xác lập
liên kết. Ở máy đượ
c gọi sẽ có thông báo cho người sử dụng biết rằng có một người
khác 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
Trường hợp mở rộng hệ thống cho mạng Internet cần một kết nối giữa server
mạng với tổng đài mạng PABX, yêu cầu này đòi hỏi phức tạp hơn và cần có các trang
thiết bị để thử nghiệm. Bởi vậy trong đồ án này em chỉ nghiên cứu cách thức truyền
tiếng nói trên mạng nội bộ. CHƯƠNG II
KHẢO SÁT CÁC GIAO THỨC TRUYỀN THÔNG
mạng và số lMạn
g
27 mạng. M
TỐT NGHIỆd nhận dạng
g và số lượn
lượng nút c
Lớp địa c
A
B
C
g lớp A dùn
Mạng lớp B
ỆP
Hình I
Hình II.2
g cho từng m
ng nút của
có thể của m
chỉ Số
2
ng cho mạn
là mạng có
II.1 Các lớp
h và thích h
T
a chỉ IP cho
cho thấy s
7 bits nên c
hợp cho các
rang
4
o thấy số
số lượng
có thể có
c tổ chức
LUẬN VĂN TỐT NGHIỆP Trang
5
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
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
21 FTP control
23 Telnet
25 SMTP
37 Time
42 Host name server
49 Login host protocol
Máy A
Máy B
Port Mối nối Port
TCI/IP Interface
LUẬN VĂN TỐT NGHIỆP Trang
6
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
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 chú :
Trị số của cổng trong các ứng dụng :
- Các ứng dụng chuẩn : 0 – 999
- Các ứng dụng không chuẩn : 1000 – 64000
II.1.2 GIAO THỨC IP
tham số là số hiệu cổng của trạm nguồn và số hiệu cổng của trạm đích. Mỗi một tiến
trình ứng dụng tại một trạm sẽ truy cập các dịch vụ TCP thông qua một cổng. Một
cổng như vậy kết hợp với một địa chỉ IP sẽ tạo thành m
ột socket duy nhất trong mạng.
Dịch vụ TCP được cung cấp nhờ liên kết logic giữa một cặp socket, mỗi socket có thể
tham gia liên kết với nhiều socket ở xa khác nhau. Trước khi truyền dữ liệu chúng
L
th
p
L
n
I
I
Ứ
ch
đ
h
LUẬN VĂN T
hiết lập liên
hòng.
Mỗi
ứ
Lưu đồ sau m
nhau :
o kết nối giữ
ÀI ĐẶT ỨN
làm việc the
để tạo một
ể kết buộc s
ng số được
để chờ đến k
nt nối vào t
n mối nối củ
nhu cầu tru
ai phần là cl
n thiết để cá
ữa client và
NG DỤNG
eo qui trình
socket.
socket với m
định nghĩa
khi có một c
thì hàm liste
ủa client.
uyền dữ liệ
lient và serv
ác ứng dụn
à server theo
G TCP SERV
h sau:
một port, đố
re
cl LUẬN VĂN T
Gọi c
ecv.
Sau
k
losesocket đTỐT NGHIỆ
các hàm gử
khi đã hoà
để đóng soc
Hình II
ỆP
ửi hay nhận
àn tất quá
cket đã tạo.
I.5 Sơ đồ gi
dữ liệu để
trình trao
.
iao tiếp giữa
à
- Sa
cl
Ghi chúù:
Các
b
Windows N
TỐT NGHIỆ
H THỨC CÀ
lient TCP là
ọi hàm sock
ọi hàm con
ọi hàm gửi
àm send, rec
au khi đã h
osesocket đ
Hình II.6
bước trên cơ
T và UNIX
ỆP
ÀI ĐẶT ỨN
àm việc the
ket để tạo m
nnect để nối
i hay nhận
cv.
hoàn tất qu
để đóng soc
Sơ đồ giao
rver
dụng clien
t
rên UNIX
T
ới server, ví
ụng client
t và server
X thì không
rang
9
í dụ như
gọi hàm
viết trên
g cần gọi
LUẬN VĂN TỐT NGHIỆP Trang
10
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
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]
cần gọi các hàm như WSAStartup, WSACleanup của Windows NT.
LUẬN VĂN TỐT NGHIỆP Trang
11
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
CHƯƠNG III
PHƯƠNG PHÁP MÃ HOÁ VÀ NÉN ÂM THANH
III.1 CÁC PHƯƠNG PHÁP MÃ HOÁ
III.1.1 GIỚI THIỆU CHUNG
Trong hệ thống xử lý âm thanh, âm thanh được mã hoá PCM. Các mã hoá này
cho phép khôi phục một cách tương đối trung thực tín hiệu âm thanh trong dải tần
nghe được. Tuy nhiên trong một ứng dụng đặc biệt như truyền dữ liệu âm thanh trên
mạng, âm thanh được truyền với tốc độ thấp hơn nhiều. Từ đó xuất hiện một số kỹ
thuật mã hoá và nén tín hiệu âm thanh như ADPCM, LPC, GSM….
Các loại phần m
ềm và phần cứng thực hiện mã hoá và nén âm thanh sang các
loại dữ liệu số thường được gọi là codec(Coder-Decoder). Có thể phân loại các
phương pháp mã hoá âm thanh thành 3 loại :
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). Aâm thanh mã hoá theo phương pháp PCM, lấy mẫu tốc độ
8KHz, lượng tử 8bit/mẫu, cho tốc độ bit ra là 64 kbps.
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
12
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
Phương pháp điều biên xung mã vi phân (DPCM) dự đoán giá trị hiện tại dựa
vào các giá trị trước của các mẫu quá khứ, chỉ lưu trữ giá trị sai số lượng tử. Giá trị sai
số này sẽ nhỏ hơn giá trị thực của mẫu, do đó cho phép lưu trữ giảm đi một phần.
Một cải tiến của DPCM là điều biến xung mã vi phân thích nghi(ADPCM). Bộ
tiến đoán và lượ
ng tử hoá trong phương pháp này có khả năng thích nghi với tín hiệu
cần mã hoá. ADPCM hoạt động tốc độ 32 kbps cho chất lượng tương đối với PCM 64
kbps.
Hệ thống thông tin toàn cầu GMS : GSM là mộ
chuẩn điện thoại được Viện
Tiêu Chuẩn Viễn Thông Châu Aâu ETSI để ra. Đầu vào của bộ nén GMS 06.10 bao
gồm các khung 160 mẫu các tín giệu PCM tuyến tính lấy mẫu tại tần số 8 kHz. Chu
kỳ mỗi khung là 20 ms, đây là khoảng thời gian rất ngắn và trong khoảng thời gian
này cho phép được coi tín hiệu âm thanh ổn định. Độ trễ truyền dẫn thông tin được
tính bằng tổng thời gian xử lý và kích thước khung của thuật toán.
Bộ mã hoá th
ực hiện việc nén một khung tín hiệu đầu vào 160 mẫu (20 ms) vào
một khung 260 bit. Như vậy một giây nó sẽ thực hiện nén được 13.13
3
bit ( tương
đương với 1625 byte). Do vậy để nén một megabyte tín hiệu chỉ cần một thời gian
chưa đầy 10 phút.[4]
Trung tâm của quá trình xử lý tín hiệu là bộ lọc. Đầu ra của bộ lọc phụ thuộc
rất nhiều vào giá trị đầu vào đơn của nó. Khi có một dãy các giá trị đưa qua bộ lọc thì
dãy tín hiệu này sẽ được dùng để kích thích bộ lọc. Dạng của bộ nén GMS 06.10 dùng
LUẬN VĂN TỐT NGHIỆP Trang
13
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
để 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
sử rằng sai số lượng tử có phân bố đồng nhất như sau : Δ
=
1
)(Ep
, -
22
Δ
<≤
Δ
E
(1)
L
d
lư
H
t
r
N
t
i
n
đầu ra của
ỗi lượng tử t
Đặc tuyến
như ta cho
ơng trung b
độ rộng của
ụ, cho bộ lư
lý thuyết, t
ác trường hợ
an trung b
bộ lượng tử
iện tỷ số củ
ỆP
ông đúng n
bộ lượng
t
trong trườn
lượng tử ho
rằng bộ lượ
bình của sai
∫
Δ
−
Δ
−
2
2
[]
12//
2
Δ
ms
khoảng bi
ê
8Xrms của
t. Ví dụ, nế
ng, thì các
xuất nhỏ h
biên độ trên
B
rms
X 2/8
(4
là bão hoà
ão hoà tại 5
sẽ là một hà
yết sai số lư
ng bị bão h
ử là :
2)
hì tỷ số tín h
(3)
ên độ từ – 4
a bộ lượng
ếu tín hiệu
ượng tử đề
ượng tử (số
rang
14
như biểu
ợt qua số
ử đều
1) thì giá
bởi :
để thuận
ộc riêng,
đổi bằng
i khoảng
u có thể
các mức
LUẬN VĂN TỐT NGHIỆP Trang
15
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
Từ (3) và (4) ta có :
2,76log10)(
10
−== BSNRdBSNR
(5)
Công thức trên miêu tả rất tốt về PCM với các điều kiện sau :
1.Hệ thống hoạt động với kênh sạch(không nhiễu), chỉ giới hạn về sai số lượng tử( và
không gây ra lỗi các từ mã khi kênh có nhiễu).
III.2.2 CÁC PHƯƠNG PHÁP NÉN CỤ THỂ
III.2.2.1 Phương pháp nén tiếng nói theo chuẩn GSM
Phát triển tại Đại học Kỹ thuật Berlin vào năm 1992, GSM là một trong những
phương pháp nén âm thanh phức tạp nhất đang được sử dụng, cho tỉ lệ nén 1:10. Giải
thuật GSM dựa trên giao thức truyền thông Mobile Phone, hiện tại là giao thức phổ
biến nhất tại Châu Âu đối với điện thoại di động.
Đầu vào của GSM bao gồm các frames 160 tín hiệu, nh
ững tín hiệu PCM tuyến
tính 13 bits lấy mẫu ở 8 Khz. GSM có sẵn trong thư viện C có thể được dùng để tạo ra
một đối tượng gsm giữ trạng thái cần thiết hoặc để mã hóa những mẫu PCM tuyến
tính thành các frames GSM, hoặc giải mã các frames GSM thành các frames PCM
tuyến tính. Bộ mã hóa nén 160 frames PCM 16 bits thành các frames GSM 260 bits.
Tương ứng một giây tiếng nói thành 1625 bytes. Bởi vì mẫu 260 bits không chẵn để
gắn vào các bytes 8 bits, nên bộ mã hóa sẽ mã hóa frame 160 bytes thành frame GSM
264 bits. Một buffer GSM nén 1 Mb có thể lưu tiếng nói gần 10 phút.[2]
LUẬN VĂN TỐT NGHIỆP Trang
16
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
Một dòng dữ liệu tiếng nói giải nén 16 bits/mẫu ở 8Khz yêu cầu băng thông tốc
độ 128 Kbits/s, trong khi đó băng thông để truyền qua mạng nếu dùng giải thuật nén
GSM , tiếng nói 16 bits/mẫu chỉ cần:
( 264 bits * 8.000 mẫu/giây)/160 mẫu = 13,2 Kbits/giây
Cho tỉ lệ nén 128/13,2 = 9,7 tương đương 10 :1.
III.2.2.2 Phương pháp nén ADPCM
Nguyên tắc :
Là một phương pháp có thể được dùng để nén các khối dữ liệu tiếng nói trước
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.
LUẬN VĂN TỐT NGHIỆP Trang
CHƯƠNG IV
TÌM HIỂU HỖ TRỢ CỦA WINDOWS SDK
TRONG XỬ LÝ VÀ TRUYỀN NHẬN ÂM THANH
IV.1 MÔI TRƯỜNG LẬP TRÌNH SDK ĐỐI VỚI TRUYỀN ÂM THANH
Môi trường Windows SDK là môi trường lập trình đa phương tiện dưới
Windows, cung cấp các hàm cấp thấp rất thích hợp cho các ứng dụng trên mạng. Một
cách thức đơn giản nhất trong việc xuất dữ liệu waveform ra loa là dùng hàm
PlaySound. Chúng ta có thể thao tác với dạng dữ liệu waveform bằng các hàm cấp
thấp do hệ thống cung cấp. Ngoài ra hệ thống còn cung cấp một cơ chế giúp người l
ập
trình giao tiếp dễ dàng hơn với thiết bị, đó là các hàm MCI.[6]
IV.1.1 CẤU TRÚC FILE WAVE VÀ HÀM PLAYSOUND
IV.1.1.1 Cấu trúc file âm thanh wave
Một file wave thật sự là một phần của một lớp file lớn hơn dùng bởi các hàm
multimedia của windows là các file RIFF ( Resource Interchange File Format). Một
file Riff bao gồm một hoặc nhiều chunk. Trong mỗi chunk có con trỏ chỉ đến chunk
kế tiếp. Mỗi chunk có một mô tả kiểu theo sau bởi một số dữ liệu. Một ứng dụng để
đọc các file RIFF có thể bước qua một số chunk, đọc các chunk cần quan tâm và bỏ
qua các chunk không liên quan. Chunk file RIFF luôn luôn bắt đầu bằng header sau:
LUẬN VĂN TỐT NGHIỆP Trang
19
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
Typedef struct {
FOURCC ckID;
DWORD cksize;
}CK;
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ị :
• 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
cùng một tốc độ, giá trị thông thường của field này nhận một những giá trị sau:
LUẬN VĂN TỐT NGHIỆP Trang
20
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
11025 - 11,025Khz
22055 - 22,050Khz
44100 - 44,1 Khz
nAvgBytesPerSec : Cho biết số bytes trung bình trong mỗi giây để thu và phát
dữ liệu wave.
nBlockAlign : Xác định số bytes yêu cầu chứa trong một mẫu
• Những mẫu có độ phân giải nhỏ hơn hoặc bằng 8 bits có thể lưu vào 1
bytes.
• Những mẫu có độ phân giải từ 9 đến 16 bits yêu cầu 2 bytes.
Những mẫu stereo yêu cầu số bytes gấp đôi những mono.
Trong cấu trúc trên không định nghĩa số bits thật sự trong một m
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
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
LUẬN VĂN TỐT NGHIỆP Trang
21
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
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. Aâm 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
Khi muốn giao tiếp với thiết bị, chúng ta phải mở thiết bị để sử dụng và sau khi
sử dụng xong thì phải đóng thiết bị lại. Trong khi sử dụng chúng ta sẽ truy xuất các
tính năng của thiết bị và theo dõi thiết bị thực thi bằng các handles và Identifiers.
WaveOutGetDevCaps Truy xuất khả năng của thiết bị xuất dạng
waveform
LUẬN VĂN TỐT NGHIỆP Trang
22
Đ
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
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
ề tài : Xây dng öứg duụg truyeề thoôg aâ thanh treê maạg cuụ boộ
liệu liên tục, chúng ta sẽ phải theo dõi việc xử lý hoàn tất khối dữ liệu để có thể gửi
khối tiếp theo.
PCM Waveform-Audio Data Format
Thông số lpData trong cấu trúc WAVEHDR sẽ trỏ đến dữ liệu đã được lấy
mẫu. Đối với dữ liệu PCM 8-bit, mỗi giá trị lấy mẫu được biểu diễn bằng một số 8 bit
không dấu. Đối với dữ liệu PCM 16-bit, mỗi giá trị l
ấy mẫu được biểu diễn bằng một
số 16 bit không dấu. Bảng dưới đây cho chúng ta thấy các giá trị cao nhất, thấp nhất
cũng như giá trị trung bình của dữ liệ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
Các gói dữ liệu PCM
Thứ tự của dữ liệu thay đổi tùy theo dạng format 8-bit hay 16-bit, stereo hay
mono. Bảng dưới đây trình bày các gói dữ liệu của các dạng PCM khác nhau:
PCM waveform Chức năng
8-bit mono Mỗi giá trị lấy mẫu là 1 byte tương ứng một kênh. Các
giá trị mẫu xếp theo thứ tự 1, 2, 3, 4 . . .
8-bit stereo Mỗi giá trị lấy mẫu là 2 byte. Các giá trị mẫu xếp theo
thứ tự 1, 2, 3, 4 . . . Với mỗi giá trị mẫu byte đầu là
kênh 0 (trái) còn byte sau là kênh 1 (phải).
16-bit mono Mỗi giá trị lấy mẫu là 2 byte. Các giá trị mẫu xếp 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
Giống như hàm trên và thêm cơ chế truy xuất trực tiếp tài
nguyên.
Các hàm PlaySound và sndPlaySound sẽ nạp hoàn toàn nội dung file wave vào bộ nhớ
và xuất ra ngõ output. Khả năng bộ nhớ của chúng có giới hạn nên chúng chỉ quản lý
được các nội dung dưới 100KB. Khi làm việc với các file có nội dung lớn hơn thì
chúng ta có thể sử dụng các dịch vụ do MCI cung cấp.
Sử dụng Windows message trong việc quản lý khi playback
Các Thông báo dưới đây có thể được sử dụng trong quá trình xuất dữ liệu:
Thông báo Chức năng
MM_WOM_CLOSE Được gửi đi khi đóng thiết bị bằng hàm
waveOutClose
MM_WOM_DONE Được gửi đi sau khi driver hoàn tất việc xuất dữ liệu
bằng hàm wafveOutWrite.
MM_WOM_OPEN Được gửi đi khi thiết bị được mở bằng hàm
waveOutOpen.
Các thông số wParam và lParam cũng rất cần thiết. Thông số wParam luôn
luôn xác định handle của thiết bị waveform-audio. Đối với thông số lParam, Thông
báo MM_WOM_DONE dùng thông số này trỏ tới cấu trúc WAVEHDR chỉ định sụ
hoàn tất của dữ liệu trong khi thông số này không được hai Thông báo còn lại dùng.
Việc dùng này rất hữu hiệu, Thông báo MM_WOM_DONE sẽ là tín hiệu được báo về
sau khi việc playback khối dữ liệu hoàn tất. Ta sẽ tiếp nhận Thông báo này và giải
phóng các biến có liên quan.
Thay
đổi volume của quá trình playback dữ liệu waveform audio