Tài liệu Đồ án Thông báo kết quả học tập của học sinh qua điện thoại: Đồ Án Tốt Nghiệp:
" Thông báo kết quả học tập của học sinh qua
điện thoại "
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 1
LỜI NÓI ĐẦU
Trong mỗi gia đình, các bậc cha mẹ có con cắp sách tới trường lúc nào
cũng quan tâm đến việc học của con mình. Chẳng hạn bữa nay con mình có
lên trả bài hay không? Các bài kiểm tra trong tháng được bao nhiêu điểm?
Kết quả thi ở cuối mỗi học kỳ ra sao? Và kể cả việc muốn biết con mình có
nghỉ học bữa nào không hoặc có vi phạm nội quy gì ở trường hay không và lý
do tại sao? Thông thường, gia đình chỉ biết những chuyện này sau khi nhà
trường phát sổ liên lạc về nhà.
Ngày nay, với sự phát triển liên tục của ngành máy tính, ta có thể tự động
hóa công việc này bằng cách kết nối máy tính với điện thoại như là một hệ
thống trả lời tự động. Khi một phụ huynh gọi điện thoại tới số máy này, hệ
thống sẽ thông báo các kết quả học tập của học sinh. Điều này thật là thuận
lợi...
115 trang |
Chia sẻ: haohao | Lượt xem: 1041 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Đồ án Thông báo kết quả học tập của học sinh qua điện thoại, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Đồ Án Tốt Nghiệp:
" Thông báo kết quả học tập của học sinh qua
điện thoại "
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 1
LỜI NÓI ĐẦU
Trong mỗi gia đình, các bậc cha mẹ có con cắp sách tới trường lúc nào
cũng quan tâm đến việc học của con mình. Chẳng hạn bữa nay con mình có
lên trả bài hay không? Các bài kiểm tra trong tháng được bao nhiêu điểm?
Kết quả thi ở cuối mỗi học kỳ ra sao? Và kể cả việc muốn biết con mình có
nghỉ học bữa nào không hoặc có vi phạm nội quy gì ở trường hay không và lý
do tại sao? Thông thường, gia đình chỉ biết những chuyện này sau khi nhà
trường phát sổ liên lạc về nhà.
Ngày nay, với sự phát triển liên tục của ngành máy tính, ta có thể tự động
hóa công việc này bằng cách kết nối máy tính với điện thoại như là một hệ
thống trả lời tự động. Khi một phụ huynh gọi điện thoại tới số máy này, hệ
thống sẽ thông báo các kết quả học tập của học sinh. Điều này thật là thuận
lợi, nhanh chóng và dễ dàng, có thể thực hiện ở mọi lúc mọi nơi.
Tuy đề tài này đã được hoàn thành nhưng chắc chắn không tránh khỏi
thiếu sót. Em rất mong được sự quan tâm, giúp đỡ và góp ý của các thầy, cô và
các bạn.
Cuối cùng, em xin cảm ơn các thầy cô ở bộ môn Công nghệ thông tin đã
dành cho em đề tài này và đặc biệt là thầy Nguyễn Đức Thuần, người đã trực
tiếp gợi ý và hướng dẫn, giúp em hoàn thành đề tài này.
Sinh viên thực hiện
Bùi Danh Đạt
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 2
PHẦN 1
GIỚI THIỆU
ĐỀ TÀI
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 3
I. Đặt vấn đề :
Hiện nay, thông thường mỗi học sinh cắp sách tới trường sẽ được phát
cho một cuốn sổ liên lạc. Nhà trường sẽ sử dụng sổ này để thông báo cho phụ
huynh của học sinh biết kết quả học tập của học sinh ở sau mỗi tháng hoặc sau
mỗi học kỳ. Trong sổ liên lạc, nhà trường thường chỉ ghi kết quả cuối cùng
của mỗi tháng hoặc mỗi học kỳ. Do vậy phụ huynh không thể biết được chi
tiết các cột điểm của các môn học trong mỗi tháng. Ngoài ra, những lần nghỉ
học cũng như những lần vi phạm nội quy của học sinh sẽ không được ghi vào
trong ấy. Vì thế các bậc phụ huynh khó có thể theo dõi chặt chẽ những diễn
biến học tập của con mình ở trường như thế nào.
Công việc giáo dục học sinh cần phải có sự phối hợp giữa gia đình và
nhà trường. Nhằm tạo sự thuận lợi cho các bậc phụ huynh có thể nắm bắt
được những thông tin về học sinh một cách nhanh chóng, đầy đủ, ở đề tài tốt
nghiệp này, em đã tìm hiểu và viết một chương trình tự động thông báo kết
quả học tập của học sinh qua điện thoại. Em nhận thấy có 3 vấn đề chính sau
đây được đặt ra cần giải quyết là :
Nhận được tín hiệu gọi tới từ điện thoại , tạo một kết nối giữa máy
tính và cuộc gọi đó và nhận biết phím nào đã được bấm từ máy
điện thoại của người gọi để thực hiện yêu cầu của người đó
Tìm kết quả trong cơ sở dữ liệu
Thông báo bằng giọng nói cho người gọi nghe
Vấn đề đầu tiên là phải tạo được một giao tiếp giữa điện thoại và máy
tính thông qua một modem. Và để truyền được tín hiệu tiếng nói từ máy tính
đến điện thoại, modem này phải có hỗ trợ chức năng “voice“. Máy tính lúc
này sẽ đồng thời đóng vai trò của máy điện thoại và nhân viên trường học.
Người gọi có thể sử dụng bất kỳ điện thoại nào để gọi tới. Lúc này máy tính sẽ
tự động “nhấc máy” và đối thoại với người gọi.
Vấn đề thứ hai được giải quyết bằng cách sử dụng các câu lệnh truy vấn
(SQL) mà bất kỳ thao tác nào với cơ sở dữ liệu cũng cần phải có.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 4
Vấn đề cuối cùng là áp dụng công nghệ “text-to-speech” để chuyển từ
chữ trong máy tính sang tiếng nói, sau đó sẽ truyền đi qua điện thoại tới người
gọi.
Tất cả những vấn đề này sẽ được trình bày chi tiết trong các phần sau.
II. Môi trường lập trình :
Chương trình “Thông báo kết quả học tập qua điện thoại” được viết
bằng ngôn ngữ lập trình Visual Basic 6.0 trên hệ điều hành Microsoft
Windows 98.
Hệ quản trị cơ sở dữ liệu được dùng để cài đặt cơ sở dữ liệu là Microsoft
Access 97
III. Giới thiệu về hoạt động của chương trình :
Chương trình được thiết kế để thông báo mọi vấn đề liên quan đến đến
học tập và đạo đức thường gặp nhất ở học sinh. Khi một người gọi điện tới, hệ
thống sẽ yêu cầu nhập vào mã số của học sinh. Sau đó, hệ thống sẽ đưa ra
menu để chọn lựa vấn đề đang quan tâm. Người gọi muốn nghe thông tin chỉ
cần nhấn các phím tương ứng với các mục sau đây :
Phím Ý nghĩa
# Thay đổi mã số học sinh
1 Nghe thông tin về các lần nghỉ học trong tháng (ngày nghỉ học,
số ngày nghỉ, có phép/không phép, lý do)
2 Nghe thông tin về các lần vi phạm nội quy trong tháng (ngày vi
phạm, lý do)
3 Nghe điểm kiểm tra của các môn học trong tháng
4 Nghe điểm thi của các môn học ở cuối học kỳ
5 Nghe kết quả cuối tháng (điểm trung bình, hạng, học lực, hạnh
kiểm)
6 Nghe kết quả cuối học kỳ (điểm trung bình, hạng, học lực, hạnh
kiểm)
7 Nghe kết quả cuối năm học (điểm trung bình, hạng, học lực, hạnh
kiểm)
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 5
8 Nghe thông tin chi tiết về học sinh mang mã số hiện tại (họ, tên,
ngày sinh, giới tính, nơi sinh, tên lớp đang học ở năm học hiện
tại được chọn)
9 Chọn năm học khác (năm học mặc định là năm học hiện tại)
* Kết thúc cuộc gọi
Nếu người gọi nhấn một trong các phím 1, 2, 3, 5 thì sẽ được yêu cầu
nhập vào tháng muốn biết. Nếu nhấn phím 4 hay 6 thì sẽ được yêu cầu nhập
vào học kỳ muốn biết.
Bất cứ lúc nào, người gọi có thể nhấn phím * để trở về menu. Muốn kết
thúc cuộc gọi, ngoài cách nhấn phím * tại menu chọn lựa, người gọi có thể gác
máy như bình thường, lúc này hệ thống sẽ tự phát hiện ra , ngắt kết nối với
cuộc gọi hiện tại và tiếp tục chờ cuộc gọi khác đến. Nếu hệ thống phát hiện
sau một khoảng thời gian định trước (thời gian rỗi) mà không có một tác động
nào từ phía người gọi thì hệ thống cũng sẽ tự động ngắt kết nối.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 6
PHẦN 2
CƠ SỞ
LÝ THUYẾT
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 7
Chương 1
GIAO TIẾP GIỮA ĐIỆN THOẠI
VÀ MÁY TÍNH
I. Sự cần thiết của modem :
Như chúng ta đã biết kỹ thuật điện thoại ra đời và phát triển rất sớm
trước kỹ thuật máy tính. Ngày đó, đường dây điện thoại được thiết kế chỉ để
truyền tín hiệu của tiếng nói có tần số của âm thanh. Dạng tín hiệu này thuộc
loại tín hiệu tương tự (analog) và thường gọi là sóng âm tần hình sin. Trong
khi đó, máy tính chỉ có thể xử lý các tín hiệu số (digital) có tần số cao. Nếu
tín hiệu số này được truyền trực tiếp trên đường dây điện thoại thì chúng sẽ bị
suy giảm và biến dạng. Vì thế, một thiết bị chuyển đổi qua lại giữa hai tín hiệu
này đã ra đời, gọi là modem. Công việc chuyển tín hiệu số của máy tính thành
tín hiệu tương tự của đường dây điện thoại được thực hiện bằng một số
phương pháp mà người ta gọi là điều chế (Modulation). Ngược lại, công việc
chuyển tín hiệu tương tự của đường dây điện thoại thành tín hiệu số của máy
tính cũng được thực hiện bằng một số phương pháp mà người ta gọi là giải
điều chế (Demodulation). Modem chính là viết tắt của 2 chữ Modulation và
Demodulation.
Ứng dụng của modem mà chúng ta thường thấy nhất là kết hợp với máy
tính để truy cập internet. Trong trường hợp này, mỗi đầu của đường dây điện
thoại sẽ nối vào một modem gắn vào máy tính. Nhờ đó chúng ta có thể truy
xuất được dữ liệu của máy kia (máy chủ). Còn ở đây, đối với công việc thông
báo qua điện thoại từ máy tính, ta chỉ cần nối một đầu dây điện thoại vào
modem gắn với máy tính tại trường học. Người gọi có thể sử dụng bất kỳ điện
thoại nào để gọi tới. Lúc này tín hiệu từ đường dây điện thoại sẽ được modem
chuyển đổi thành tín hiệu số và đưa vào máy tính để xử lý. Sau đó máy tính sẽ
phát trở lại các tín hiệu số (ví dụ như tiếng nói ở dạng số) cho modem để
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 8
modem chuyển đổi thành các tín hiệu tương tự (tiếng nói ở dạng tương tự) và
truyền ngược trở lại người gọi. Nhờ đó , người gọi có thể nghe được.
II. Giao tiếp lập trình ứng dụng cho hệ thống điện thoại - TAPI
(Telephony Application Programming Interface) :
II.1. Một số khái niệm trong mô hình TAPI :
II.1.1. TAPI là gì ?
TAPI được phát triển bởi sự kết hợp của hai hãng Intel và Microsoft .
TAPI được thiết kế để truy xuất các dịch vụ điện thoại trên tất cả các hệ điều
hành Windows. Nói cách khác, TAPI là tập hợp các hàm đơn lẻ được
Windows cung cấp để hỗ trợ cho việc lập trình giao tiếp giữa điện thoại và
máy tính thông qua modem hoặc các thiết bị truyền thông . Với TAPI , người
lập trình không phải lo lắng về các tập lệnh của modem để khởi tạo nó hoặc
phải chọn cổng hoạt động cho modem.
Mục đích của TAPI là cho phép các nhà lập trình viết những ứng dụng
mà không cần quan tâm chi tiết đến thiết bị phần cứng. Ví dụ với modem,
người lập trình không cần biết modem loại nào, của hãng nào, tập lệnh của của
modem là gì, sử dụng cổng nối tiếp hay song song hay cổng USB, chỉ cần thiết
bị phần cứng đó có một TAPI driver gọi là TSP(Telephone Service Provider)
do nhà sản xuất cung cấp, mà thường khi cài thiết bị phần cứng này vào máy
thì tất cả các driver của nó đều được cài vào. Do đó chỉ cần thiết bị này hoạt
động tốt thì ứng dụng TAPI sẽ không gặp vấn đề gì.
TAPI hỗ trợ cả việc truyền số liệu lẫn tiếng nói ở nhiều loại thiết bị đầu
cuối khác nhau, hỗ trợ các kiểu kết nối phức tạp và các kỹ thuật quản lý cuộc
gọi như: tạo cuộc gọi, chờ cuộc gọi , hộp thư thoại, vv... Các ứng dụng được
viết bởi TAPI có thể truy cập trực tiếp vào các dịch vụ trên đường dây điện
thoại. Các ứng dụng này có thể phát ra và nhận vào mọi tín hiệu của điện
thoại.
Dù đường dây điện thoại truyền tín hiệu dạng tương tự hay dạng số thì ta
cũng cần một thiết bị giao tiếp giữa máy tính và đường dây điện thoại . Dĩ
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 9
nhiên, thiết bị giao tiếp đó phải có hỗ trợ TAPI TSP. Thiết bị này có thể là một
trạm ISDN , một bảng mạch hệ thống điện thoại hoặc đơn giản là một modem
II.1.2. Chương trình ứng dụng TAPI :
Ứng dụng TAPI là ứng dụng mà có sử dụng giao tiếp lập trình hệ thống
điện thoại nhằm thực hiện một công việc gì đó. Ví dụ : phần mềm giả lập điện
thoại trong mạng điện thoại chuyển mạch công cộng (PSTN), phần mềm
gửi/nhận fax, hộp thư thoại, hệ thống trả lời tự động, điện thoại qua internet
(VoIP) vv ...
II.1.3. TAPI DLL (Dynamic link library - Thư viện liên kết động) :
Các thư viện này cùng với TAPI Server (Tapisvr.exe) là sự trừu tượng
hóa trong việc phân cách giữa người dùng và các nhà cung cấp dịch vụ điện
thoại. Một thư viện TAPI liên kết với TAPI Server để cung cấp một giao tiếp
giữa 2 lớp (xem mô hình lập trình cho hệ thống điện thoại ở phần sau).
Có 3 thư viện liên quan tới TAPI : Tapi.dll, Tapi32.dll, Tapi3.dll . Mỗi
thư viện này đều có vài trò như nhau :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 10
Mỗi thư viện này tương ứng với một thời điểm phiên bản của TAPI. Các
ứng dụng 16-bit liên kết với Tapi.dll . Trong Windows 98/NT/2000, Tapi.dll
sẽ hoạt động bằng cách ánh xạ các địa chỉ 16-bit tới các địa chỉ 32-bit , đồng
thời chuyển các yêu cầu tới Tapi32.dll. Với các ứng dụng 32-bit thì chúng sẽ
liên kết với Tapi32.dll (TAPI phiên bản 1.4 - 2.2). Với TAPI 3.0 và 3.1 thì ứng
dụng sẽ liên kết với Tapi3.dll
II.1.4. MSP (Media Service Provider ) :
Trước hết MSP chỉ đến với TAPI 3, nó cho phép việc điều khiển một
ứng dụng qua phương tiện với cơ chế vận chuyển đặc biệt. Một MSP luôn
luôn tồn tại song song với một TSP (Tapi Service Provider). Một MSP cho
phép việc điều khiển phương tiện thông qua việc sử dụng thiết bị cuối và các
giao tiếp luồng được định nghĩa bởi TAPI
Ứng dụng TAPI
16-bit
Tapi.dll
Tapi32.dll
Ứng dụng TAPI
32-bit
Tapi32.dll
Ứng dụng TAPI3
32-bit
Tapi3.dll
MSP
TAPISVR.EXE
TSP
Registry
Telephony Control Panel,
Dialing Properties, vv ...
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 11
II.1.5. MSPI (Media Service Provider Interface) :
MSPI là tập hợp các giao tiếp và các phương thức được thực hiện bởi
MSP nhằm cho phép việc điều khiển một ứng dụng TAPI 3 trên phương tiện
trong suốt phiên liên lạc truyền thông.
II.1.6. TAPI Server :
TAPI Server được xem như kho trung tâm lưu trữ các thông tin về hệ
thống điện thoại trên máy người dùng. Tiến trình của dịch vụ này giám sát các
tài nguyên cục bộ và ở xa của hệ thống điện thoại, giám sát các ứng dụng
TAPI, và thực hiện một giao tiếp phù hợp với các TSP. (xem mô hình lập trình
hệ thống điện thoại ở phần sau để thấy mối liên hệ giữa TAPI Server và các
thành phần khác) .
Trong Windows 95, 98, NT, TAPI Server (Tapisrv.exe) sẽ chạy như một
tiến trình riêng biệt. Trong Windows 2000, nó chạy trong ngữ cảnh của
Svchost.exe . Khi ứng dụng nạp TAPI DLL và thực hiện công việc khởi tạo
xong, DLL sẽ xây dựng một kết nối tới TAPI Server. Sau đó TAPI Server sẽ
nạp các TSP.
II.1.7. TSP (Telephony Service Provider ) :
TSP thực chất là một thư viện liên kết động hỗ trợ việc điều khiển các
thiết bị truyền thông thông qua một tập các hàm dịch vụ. Ứng dụng TAPI sử
dụng các lệnh được chuẩn hóa , và TSP điều khiển các lệnh đặc trưng mà cần
phải được trao đổi với thiết bị.
II.1.8. TSPI (Telephony Service Provider Interface) :
TSP phải tạo ra một giao tiếp TSP phù hợp để thực hiện chức năng như
một nhà cung cấp dịch vụ trong môi trường hệ thống điện thoại. TSPI định
nghĩa ra các hàm ngoại mà được hỗ trợ bởi TSP.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 12
II.1.9. Service Providers :
Đây được xem như bộ phận cung cấp các dịch vụ cần thiết để thực hiện
việc điều khiển thiết bị điện thoại một cách chi tiết. TSP cung cấp các điều
khiển cuộc gọi và MSP nếu có sẽ cung cấp điều khiển luồng qua phương tiện.
Tất cả các TSP thực thi bên trong tiến trình TAPISRV. Các bộ phận
cung cấp dịch vụ có thể tạo ra các thread ngay trong ngữ cảnh của TAPISRV
khi cần và được chắc chắn rằng không có tài nguyên nào mà chúng tạo ra bị
hủy do thoát khỏi một ứng dụng cá nhân nào đó. Khi cần TAPI Server có thể
dịch các câu lệnh của ứng dụng sang tập các lệnh phù hợp như là TSPI.
Các MSP thực thi ngay trong tiến trình của ứng dụng, cho phép phản hồi
nhanh một số yêu cầu trong việc điều khiển phương tiện. TAPI DLL cung cấp
một kết nối chặt chẽ tới MSPI.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 13
II.2. Mô hình lập trình cho hệ thống điện thoại :
- Ứng dụng TAPI sẽ nạp thư viện TAPI (TAPI DLL) vào và sử dụng
TAPI cho các nhu cầu truyền thông
- TAPI sẽ tạo ra một kết nối với TAPI Server. Ngoài ra, với TAPI
phiên bản 3 sẽ tạo thêm một đối tượng MSP và kết nối với nó bằng
cách sử dụng tập các câu lệnh được định nghĩa trước, hình thành nên
MSPI
- Khi ứng dụng thực hiện một thao tác TAPI, thư viện TAPI sẽ làm
một số kiểm tra cần thiết , sau đó sẽ chuyển thông tin cho TAPISVR
Ứng dụng
TAPI
TAPI DLL
(Dynamic Link Library)
MSP
(Media Service Provider)
TAPISVR
(TAPI Server)
TSP
(TAPI Service Provider)
Device
MSPI
Service Providers
TSPI
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 14
- TAPISVR liên lạc với các tài nguyên khả dụng trên máy tính và giao
tiếp với các TSP bằng cách sử dụng TSPI
- Những kết nối giữa TSP và MSP được diễn ra bằng cách sử dụng một
kết nối ảo thông qua TAPI DLL và TAPISVR
- TSP và MSP sẽ làm nhiệm vụ cung cấp những thông tin về các trạng
thái, chức năng của thiết bị khi có yêu cầu.
Kết quả của việc lập trình theo mô hình này là ứng dụng vẫn có thể hoạt
động khi thay thế thiết bị mới mà không cần thực hiện những thay đổi mã
nguồn.
II.3. Mô hình ứng dụng TAPI :
1. Khởi tạo TAPI (TAPI Initialization) :
- Khởi tạo môi trường truyền thông trên máy tính
- Việc khởi tạo là đồng bộ và không quay trở về cho tới khi thao tác
hoàn tất hoặc bị lỗi
- Nếu TAPISRV không đang chạy thì TAPI sẽ gọi nó
- TAPI thiết lập một kết nối cho tiến trình TAPISRV
Khởi tạo TAPI
Điều khiển
phiên làm việc
Điều khiển
thiết bị
Điều khiển
phương tiện
Kết thúc TAPI
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 15
- TAPISRV nạp vào các bộ phận cung cấp dịch vụ được chỉ định trong
registry và buộc chúng khởi tạo những thiết bị mà chúng hỗ trợ.
- Lấy số phiên bản thích hợp cho ứng dụng TAPI, TAPI và bộ cung
cấp dịch vụ điện thoại . Công việc này bắt buộc phải làm ở TAPI 2.
- Kiểm tra và thu nhận thông tin liên quan đến các thiết bị khả dụng
cho ứng dụng TAPI
- Đăng ký thông điệp để nhận được các sự kiện liên quan tới những
thay đổi trạng thái của đường truyền.
2. Điều khiển phiên làm việc (Session Control) :
- Một phiên làm việc nói chung hay một cuộc gọi nói riêng là một kết
nối giữa hai hay nhiều địa chỉ. Kết nối này là động và các đối tượng
liên quan phải được tạo , quản lý và hủy khi không còn dùng. Trong
trường hợp đơn giản nhất thì đây là quá trình từ lúc tạo cho đến lúc
ngắt kết nối một cuộc gọi.
- Gồm 2 công việc chính :
Điều khiển hoạt động của phiên làm việc : khởi tạo, duy trì
và kết thúc phiên làm việc
Lấy thông tin của phiên làm việc : lấy những thông tin chi
tiết trong phiên làm việc.
3. Điều khiển thiết bị (Device Control) :
- Thiết lập và lấy thông tin của các thiết bị
Network : là lớp giao vận cho việc truyền thông.
Line : là một kết nối tới một network. Đó là một thiết bị vật
lý như bảng mạch fax, modem, hay cạc ISDN. Thiết bị có thể
không cần kết nối thẳng vào máy tính mà có ứng dụng TAPI
đang chạy
Channel : là sự chia nhỏ của một line
Address : một address đại diện cho một sự định vị trên
network. Mỗi line hay channel đều có một hay nhiều địa chỉ
liên kết với nhau
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 16
Terminal : một nguồn hoàn trả lại cho một địa chỉ đặc trưng
và một kiểu phương tiện.
4. Điều khiển phương tiện (Media Control) :
- Phương tiện của phiên làm việc truyền thông được thiết kế cho dữ
liệu truyền qua. Nó cho phép một ứng dụng nhận biết những thay đổi
của các kiểu phương tiện và điều chỉnh các luồng trên phương tiện
như âm lượng của tiếng nói được truyền. Đó cũng có thể là việc gửi
và nhận các tín hiệu DTMF từ điện thoại.
5. Kết thúc TAPI (TAPI Shutdown) :
- Kết thúc các phiên làm việc
- Giải phóng các tài nguyên hệ thống đang chiếm giữ
II.4. Các phiên bản TAPI :
Bất kỳ một vấn đề nào liên quan đến TAPI cũng gồm có 3 thành phần :
chương trình ứng dụng, TSP, và chính bản thân của TAPI. Mỗi một trong ba
thành phần này đều có thể hỗ trợ đến một phiên bản TAPI tối đa nào đó . Đây
là công việc của ứng dụng phải kiểm tra và chọn lựa phiên bản cao nhất của
TAPI mà cả ba thành phần này đều hỗ trợ. Các con số phiên bản này được duy
trì sự tương thích khi Microsoft mở rộng các khả năng của TAPI. Các phiên
bản của hệ điều hành Windows khác nhau sẽ hỗ trợ các phiên bản Windows
khác nhau :
Hệ điều hành
Windows
Phiên bản TAPI
ban đầu
Phiên bản TAPI tối đa
có thể nâng cấp
Windows 95 1.4 2.2
Windows 98 2.0 2.2
Windows ME 2.2 2.2
Windows NT 4 2.2 *SP5 2.2
Windows 2000 3.0 3.3
Windows XP 3.3 3.3
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 17
Có một sự thuận lợi là các ứng dụng TAPI 1.4 vẫn có thể hoạt động mà
không gặp vấn đề gì khi chạy trên các hệ điều hành Windows khác. Còn một
ứng dụng TAPI 2.0 sẽ tự động loại bỏ một số chức năng của nó khi chạy cùng
với một TSP 1.4. Dưới đây là các chức năng được hỗ trợ thêm đối với mỗi
phiên bản TAPI :
Phiên bản
TAPI
Các chức năng chính được hỗ trợ thêm
1.4 Các chức năng cơ bản cho Windows 32 bit
2.0
Đầy đủ các chức năng cho Windows 32 bit; Hỗ trợ
Unicode
2.1 Hỗ trợ Client/Server
2.2 Quản lý cuộc gọi chuyên dụng
3.0
Giao tiếp kiểu COM (Component Object Model); Hỗ
trợ Media Stream Providers ; TSP 2.1 vẫn được dùng
3.1
Một số điều khiển thiết bị điện thoại và một số giao
tiếp trạm chuyên dụng
Có 2 thay đổi lớn trong các phiên bản này. Thứ nhất là ở phiên bản TAPI
2.1 khi chức năng hỗ trợ Client/Server được thêm vào. Điều này tạo khả năng
cho thiết bị hệ thống điện thoại có thể được cài đặt trên một máy Server mà
các máy Client trong mạng có thể truy cập được. Thay đổi lớn thứ hai đến với
TAPI 3.0 khi nó được tổ chức như một bộ các đối tượng kiểu COM , sẽ tốt
hơn kiểu kiến trúc ngôn ngữ C++ cho Windows. Nó tạo điều kiện dễ dàng cho
việc viết các ứng dụng bằng bất cứ ngôn ngữ nào : C++ , Visual Basic hay
Java. Ngoài ra , chức năng khác biệt chính là khả năng hỗ trợ MSP (Media
Service Providers) nhằm cung cấp cách thức truy cập các luồng phương tiện
trong một cuộc gọi và có thể hỗ trợ hệ thống điện thoại theo giao thức internet
(IP)
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 18
III. DTMF trong hệ thống điện thoại :
- DTMF là viết tắt của cụm từ “Dual Tone Multi Frequency” (Cặp tín hiệu
đa tần). Mỗi khi ta nhấn phím để gọi điện thoại, các âm thanh phát ra mà ta
nghe được chính là các tín hiệu DTMF được gửi đến tổng đài.
- Theo chuẩn thì có tổng cộng 16 cặp tín hiệu DTMF tương ứng với 16
phím bấm trên điện thoại. Tuy nhiên, với các máy điện thoại thông thường
hiện nay, chỉ có 12 phím trên điện thoại có thể gửi tín hiệu này, đó là : 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, *, # . Bốn cặp tín hiệu còn lại thì thường không dùng đến, đó
là các phím : A, B, C, D .
- 16 cặp tín hiệu này được tổ chức dưới dạng ma trận 4x4. Khi ta nhấn 1
phím bình thường trên điện thoại, sẽ có 2 tín hiệu được phát đi : 1 tín hiệu
thuộc nhóm tần số cao và 1 tín hiệu thuộc nhóm tần số thấp. Sự kết hợp của 2
tín hiệu này sẽ tạo ra một tín hiệu DTMF.
Ví dụ : Khi ta nhấn phím số 1 trên điện thoại thì sẽ tạo ra cặp tín hiệu
(1209Hz , 697Hz), nhấn phím # thì sẽ tạo ra cặp tín hiệu (1477Hz ,
941Hz )
1209 Hz 1336 Hz 1477 Hz 1633 Hz
697 Hz [1] [2] [3] A
770 Hz [4] [5] [6] B
852 Hz [7] [8] [9] C
941 Hz [*] [0] [#] D
- Các tín hiệu DTMF này thường được sử dụng trong dịch vụ hộp thư thoại
hoặc trong hệ thống máy điện thoại trả lời tự động. Khi một người gọi điện tới,
máy sẽ nhận các yêu cầu của người đó thông qua các tín hiệu này.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 19
Chương 2
TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU
I. Cơ sở dữ liệu trong thế giới hiện đại :
Mô hình cơ sở dữ liệu quan hệ do tiến sĩ E.F.Codd sáng chế đầu tiên
vào năm 1970 để lưu trữ thông tin. Mô hình này là nền tảng của tất cả các hệ
quản trị cơ sở dữ liệu thương mại như Access, SQL Server, Oracle, vv...
Trong cơ sở dữ liệu quan hệ, các mục dữ liệu được lưu trữ trong các
bảng (table), được cấu tạo bởi các dòng gọi là các mẫu tin (record) và các cột
gọi là các trường (field). Cơ sở dữ liệu quan hệ cho phép nối các bảng với
nhau với mục đích truy cập các mẫu tin liên quan với nhau chứa trong các
bảng khác nhau.
Ví dụ, ta có một cơ sở dữ liệu để lưu trữ thông tin học sinh. Trong cơ sở
dữ liệu này, mỗi mẩu tin tương ứng với một học sinh. Mỗi mẩu tin có 6 trường
: mã số , họ , tên , ngày sinh, giới tính, mã nơi sinh. Đối với mọi học sinh, ta
muốn biết cùng loại thông tin nhưng những chi tiết cụ thể về từng học sinh dĩ
nhiên là khác nhau. Từng học sinh phải được xác định một cách riêng rẽ, do
đó mỗi mẫu tin sẽ có một mã nhận dạng duy nhất được gọi là khóa (key).
Khóa có thể được dùng để tham chiếu chéo (cross reference) thông tin lưu
trong các bảng khác nhau trong cùng cơ sở dữ liệu. Các mẩu tin trong cơ sở dữ
liệu có dạng như sau:
Mã số Họ Tên Ngày sinh Giới tính Mã nơi sinh
0058613 Bùi Danh Đạt 26/01/1980 Nam 31
0058614 Nguyễn Thị Trinh 8/10/1985 Nữ 31
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 20
II. Sơ lược về ODBC (Open DataBase Connectivity) :
Chuẩn ODBC ra đời năm 1982 và được hỗ trợ bởi Microsoft. ODBC là
một định nghĩa chuẩn của ứng dụng lập trình giao tiếp (API) được sử dụng để
truy cập dữ liệu quan hệ hoặc truy xuất tuần tự theo chỉ mục (indexed
sequential access method (SAM)) . Mọi hệ quản trị cơ sở dữ liệu đều hỗ trợ
giao tiếp ODBC bằng cách cung cấp cho nó một driver tương ứng. Các ứng
dụng được viết bằng C, C++, Visual Basic đều có thể truy xuất được mọi cơ
sở dữ liệu được cài đặt trong các hệ quản trị cơ sở dữ liệu .
ODBC nhắm tới một thiên đường cho việc truy cập dữ liệu . Đó là một
công nghệ cho phép ứng dụng client nối với cơ sở dữ liệu từ xa. Lưu trú trên
máy Client, ODBC tìm cách làm cho nguồn dữ liệu quan hệ trở thành tổng
quát đối với ứng dụng Client. Điều này có nghĩa là ứng dụng Client không cần
quan tâm kiểu cơ sở dữ liệu nó đang nối là gì.
ODBC không phù hợp với cơ sở dữ liệu không phải là cơ sở dữ liệu
quan hệ như dữ liệu dạng ISAM bởi vì nó không có các giao tiếp cho phép tìm
kiếm truy cập ngẫu nhiên các mẫu tin, việc thiết lập các phạm vi hoặc duyệt
qua các chỉ mục . ODBC đơn giản là không được thiết kế để truy cập dữ liệu
ISAM.
III. Các cách truy xuất cơ sở dữ liệu :
III.1. DAO (Data Access Objects):
Như tên gọi của nó, các đối tượng truy cập dữ liệu, DAO được sử dụng
để thao tác với cơ sở dữ liệu thông qua lập trình. . Với DAO ta có thể thi hành
các câu truy vấn, cập nhật dữ liệu trong các bảng và cấu trúc cho cơ sở dữ liệu.
DAO cũng được các nhà lập trình sử dụng để truy cập các cơ sở dữ liệu trên
máy cá nhân hay Client/Server và DAO hoạt động khá hiệu quả với cơ sở dữ
liệu Access
III.2. RDO (Remote Data Object) :
RDO tương tự như DAO nhưng mục đích chính là để truy cập dữ liệu từ
xa thông qua ODBC.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 21
III.3. ADO (ActiveX Data Objects) :
ADO là nền tảng của kỹ thuật truy cập cơ sở dữ liệu Internet. Tuy nhiên,
ta có thể sử dụng ADO không chỉ để truy cập dữ liệu thông qua trang Web mà
còn có thể dùng nó để lấy dữ liệu từ ứng dụng. ADO là giao diện dựa trên đối
tượng cho công nghệ dữ liệu mới nổi gọi là OLE DB.
OLE DB được thiết kế để thay thế ODBC như một phương thức truy cập
dữ liệu. ODBC hiện thời là tiêu chuẩn phía Client để truy cập các cơ sở dữ liệu
quan hệ . OLE DB đi sâu hơn một bước bằng cách làm cho tất cả các nguồn
dữ liệu trở thành tổng quát đối với ứng dụng Client.
IV. Sơ lược về SQL (Structured Query Language) :
SQL là viết tắt của cụm từ “Structured Query Language” , tạm dịch là
ngôn ngữ truy vấn có cấu trúc. SQL thuộc loại ngôn ngữ thế hệ thứ tư. Việc sử
dụng nó có thể giải quyết nhanh chóng vấn đề cung cấp thông tin mà với ngôn
ngữ thế hệ thứ ba phải tốn khá nhiều thời gian mã hóa. Cùng với sự phát triển
mạnh mẽ của các hệ quản trị cơ sở dữ liệu, SQL ngày càng được mở rộng.
Ngôn ngữ : SQL không phải là ngôn ngữ thảo chương theo nghĩa cổ
điển mà là một tập hợp các động từ cho phép thao tác các bảng
(table). Các động từ này có thể có ở trong các ngôn ngữ khác ( C,
COBOL, FORTRAN, ... )
Truy vấn : Đây không phải là chức năng duy nhất. SQL còn cho
phép xác định cấu trúc dữ liệu , đặc trưng hóa ràng buộc toàn vẹn để
đảm bảo sự tương thích giữa chúng, thiết lập các luật truy cập để
đảm bảo bí mật thông tin. Những chức năng này đều thực hiện một
cách đơn giản thông qua khả năng hỏi và truy xuất . Hiện tại mọi cố
gắng để làm phong phú SQL đều nhằm vào hướng này.
Có cấu trúc : SQL không phải là một mô hình hợp thức khi đối
chiếu với lý thuyết ngôn ngữ hình thức. Trong nó còn các tồn tại ,
ví dụ khi dùng kỹ thuật lồng nhau , tổ hợp các chức năng, vv..
Ngày nay SQL đã được chuẩn hóa và trở thành chuẩn mực của việc
truy xuất các cơ sở dữ liệu quan hệ. Những giao diện khác thực hiện qua thực
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 22
đơn , cửa sổ, lưới, vv.... thường được cung cấp bởi SQL. SQL trở thành các
điểm vào bắt buộc đối với các hệ quản trị cơ sở dữ liệu quan hệ .
Ngoài SQL, trên thế giới còn có các ngôn ngữ khác như QUEL, QBE
cũng cho phép thao tác cơ sở dữ liệu quan hệ. QUEL là ngôn ngữ do đại học
Berkeley đề nghị cho hệ quản trị cơ sở dữ liệu quan hệ INGRES của họ. Hiện
tại QUEL ngày càng ít được dùng. QBE (Query By Example) là ngôn ngữ
“mắt lưới” xuất phát từ logic, thông thường nó được xây dựng trên SQL. QBE
ngày nay vẫn còn được sử dụng bởi Access
Một cách tổng quát, SQL dùng mọi tiêu chuẩn tìm kiếm được xây dựng
từ logic mệnh đề bậc nhất, nó gồm 4 từ khóa cơ bản : SELECT (Tìm),
INSERT (Chèn), DELETE (Xóa), UPDATE (Sửa)
Các đối tượng truy cập dữ liệu DAO, RDO, ADO đều hỗ trợ rất mạnh
việc thực thi các câu lệnh SQL nhằm tạo sự uyển chuyển, linh động và tối ưu
trong các thao tác dữ liệu.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 23
Chương 3
SƠ LƯỢC VỀ TIẾNG NÓI
VÀ CÁC PHƯƠNG PHÁP
TỔNG HỢP TIẾNG NÓI
I. Sơ lược về tiếng nói :
I.1. Đặc tính chung của tiếng nói :
Tiếng nói là công cụ diễn đạt thông tin rất uyển chuyển và đặc biệt. Khi
chúng ta phát ra một tiếng thì có rất nhiều bộ phận như lưỡi, thanh môn, môi,
họng, thanh quản…kết hợp với nhau để tạo thành âm thanh. Âm thanh này lan
truyền trong không khí để đến tai người nhận; chính vì sự kết hợp của rất
nhiều bộ phận để tạo ra âm thanh này nên âm thanh được phát ra ở mỗi lần
hầu như là khác nhau. Vì vậy việc phân chia tiếng nói thành những loại có đặc
tính riêng là rất khó. Ở đây người ta tạm chia thành ba loại:
Voiced sound :
Khi chúng ta nói chữ "a" hay chữ "o" thanh môn của ta rung và giãn ra, áp
suất không khí ban đầu lớn và từ từ giảm xuống, lúc này âm phát ra có dạng
sóng wave đặc trưng như hình vẽ.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 24
Unvoiced sound :
Là âm khi ta phát ra một tiếng mà thanh môn không rung. Có hai loại cơ
bản: phụ âm sát (fricative) và âm bật hơi (aspirate). Đối với phụ âm sát (khi
phát âm vần "s"), điểm co thắt được tạo ra tại vài điểm trên bộ máy phát âm,
và không khí được đẩy qua nó. Vì điểm co thắt có khuynh hướng xảy ra gần
miệng, tiếng dội của bộ máy phát âm có ảnh hưởng nhỏ trong việc tạo nên phụ
âm sát. Đối với âm bật hơi (khi phát âm vần "h") sự dao động không khí xảy
ra tại thanh môn bởi vì dây thanh âm được giữ lại một phần. Trong trường hợp
này, tiếng dội của bộ máy phát âm điều chỉnh phổ của tiếng ồn. Điều này được
thấy rõ nhất khi chúng ta nghe những âm thanh nhỏ, xì xào.
Plosive sound :
Trong trường hợp này, bộ máy phát âm được đóng kín, áp suất không khí bị
nén và được giải thoát thình lình. Sự giải thoát nhanh chóng áp suất này tạo
nên một sự kích thích ngắn cho bộ máy phát âm. Sự kích thích ngắn này có thể
xảy ra với sự có rung / không rung của dây thanh môn để tạo nên âm thanh
voice/unvoice plosive
I.2. Công nghệ Text–to–speech dùng để tổng hợp tiếng nói :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 25
Text-to-speech là một kỹ thuật dùng để chuyển dạng văn bản (text) sang
tiếng nói (speech) . Text–to–speech được phân loại dựa vào phương pháp
chuyển văn bản sang tiếng nói :
Concatenated word :
Với phương pháp này, những từ và ngữ phải được thu âm trước. Khi
nhận được một chuỗi cần đọc, máy sẽ tách ra thành từng từ một. Sau đó, máy
sẽ tìm các từ đã được thu âm tương ứng và ghép lại với nhau , tạo ra một chuỗi
tiếng nói liên tục
Tổng hợp :
Phương pháp này phức tạp hơn nhiều vì sẽ tổng hợp tạo âm giống như
những gì được tạo bởi giọng nói của con người phát ra. Phương pháp này cần
cung cấp nhiều bộ lọc mô phỏng chiều dài, cổ họng, khoang miệng, hình dạng
môi và vị trí lưỡi. Tuy nhiên tiếng nói được tạo bởi kỹ thuật tổng hợp này
thường ít giống giọng con người , nhưng có thể đạt được những chất lượng
khác nhau của giọng bằng cách thay đổi một vài thông số.
Hai âm tố (Diphone Concatenation) :
Phương pháp này nối những đoạn ngắn âm thanh được số hóa lại với
nhau và tạo ra âm thanh liên tục. Mỗi diphone bao gồm hai âm vị (phonemes),
một âm vị bắt đầu âm ,âm vị còn lại kết thúc âm. Ví dụ từ "hello" bao gồm
những âm vị sau: " h eh l oe" .Những diphone tương ứng là "silence - h h -eh
eh -l l-oe oe-silence” .
Diphone được tạo bằng cách thu giọng người và xác định một cách cẩn
thận tỉ mỉ vị trí bắt đầu và kết thúc của những âm vị. Mặc dù kỹ thuật này có
thể tạo âm giống thật, phải tốn công sức để làm việc này và giọng không cố
định bởi những âm vị chỉ đặc trưng bởi ngôn ngữ của người phát âm.
I.3. Sự cần thiết của công nghệ Text–to–speech (TTS) :
Một ứng dụng sử dụng TTS khi nó cần chuyển dạng văn bản mang tính
chất động sang dạng tiếng nói. Đó là những văn bản có thể thay đổi thường
xuyên, không cố định. Nếu chúng ta sử dụng phương pháp ghi âm cho toàn
văn bản thì trước hết là không gian lưu trữ sẽ cần rất lớn nếu như văn bản đó
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 26
dài hoặc có nhiều văn bản khác nhau. Và sau đó nếu ta thay đổi văn bản khác
thì sẽ phải tiến hành ghi âm lại.
Nói tóm lại TTS có một số lợi ích và ứng dụng như sau :
- Đọc văn bản động : TTS hữu dụng cho những văn bản thay đổi thường
xuyên. Ví dụ : sau khi nhận được e-mail, ta có thể yêu cầu máy tự đọc cho
mình nghe.
- Kiểm tra văn bản : Với một văn bản chi chít chữ, ta có thể yêu cầu máy
đọc để phát hiện những từ gõ sai
- Tiết kiệm không gian lưu trữ
- Thông báo bằng giọng nói thay cho chuỗi thông báo trên màn hình
- Ứng dụng truyền thông : TTS được ứng dụng trong hộp thư thoại, hệ
thống trả lời tự động
II. Các phương pháp tổng hợp tiếng nói trong hệ thống tiếng Việt :
II.1. Sự cần thiết của việc tổng hợp tiếng nói :
Khi cần thông báo cho người sử dụng bằng tiếng nói thì những chuỗi
tiếng nói này phải được thu âm trước. Cách đơn giản nhất là mỗi câu nói ta
thu âm lại thành một file. Khi cần đọc câu nào thì ta mở file âm thanh tương
ứng với câu đó. Cách làm này có ưu điểm là trung thực và đạt độ tự nhiên cao
nhưng có hai nhược điểm rất lớn là không linh hoạt và tốn nhiều dung lượng
nhớ để lưu trữ các file âm thanh. Nhằm tăng tính linh hoạt cho hệ thống tự
động và giảm dung lượng lưu trữ , ta phải dùng kỹ thuật tổng hợp tiếng nói.
II.2. Các tiêu chuẩn cần thỏa mãn khi tổng hợp tiếng nói :
Tiếng nói tổng hợp dù sao cũng không phải là tiếng nói thực cho nên
không thể giống hoàn toàn tiếng nói tự nhiên. Tuy nhiên khi sử dụng kỹ thuật
này, cần thỏa 2 tiêu chuẩn tối thiểu:
- Đạt độ trung thực tương đối để mọi người có thể hiểu được mà không cần
học hỏi hoặc tập trung nghe cao độ. Nếu không đạt được điều này thì tiếng nói
tổng hợp sẽ không thể sử dụng được trong thực tế vì sẽ làm người nghe khó
chịu.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 27
- Khối lượng lưu trữ không quá lớn để tiện sử dụng và có thể phổ biến nhiều
nơi
II.3. Các phương pháp tổng hợp tiếng nói cho tiếng Việt :
Có 2 hướng tổng hợp tiếng nói chính là tổng hợp dựa vào việc phân
tích tần số và tổng hợp dựa vào việc ghép âm. Đối với hướng phân tích tần số,
ta phân tích các đặc trưng tiếng nói để tìm ra tần số, pha. Khi tổng hợp sẽ tái
tạo tiếng nói từ các đặc tính này. Theo nghiên cứu của các chuyên gia thì
hướng này rất phức tạp và chất lượng âm còn kém. Trong khi đó, hướng tổng
hợp dựa vào việc ghép âm dễ dàng được hiện thực trên máy tính hơn.
Ghép từng từ đơn :
Tính chất tiếng Việt là âm của từ đầu không ảnh hưởng âm các từ
sau. Do đó ta có thể ghép các từ thành một câu.
Tiếng Việt phổ thông có khoảng hơn 6000 từ. Nếu ta thu với tần số
lấy mẫu 8KHz, 8 bit/mẫu, mono, nén PCM. Mỗi từ thu trong 0.8 giây thì khối
lượng âm thanh cần lưu trữ là:
6000 * 8000 * 1 * 1 * 0.8 = 38,400,000 byte
Nhận xét :
- Phương pháp này đạt độ tự nhiên cao nhất và cách hiện thực đơn giản
nhất.
- Mức độ ảnh hưởng của từ đi trước với từ đi sau là không đáng kể và có
thể chấp nhận được.
- Không thể thu âm đầy đủ các từ trong tiếng Việt vì tiếng Việt có rất
nhiều từ vay mượn từ các thứ tiếng khác, và có từ không có trong từ điển tiếng
Việt nhưng vẫn có thể phát âm ra được.
- Khối lượng dữ liệu của phương pháp này là khá lớn so với các phương
pháp khác. Tuy nhiên, với dung lượng đĩa cứng ngày nay thì vấn đề dung
lượng như thế không phải là vấn đề đáng lo ngại.
Ghép âm theo các âm tiết cơ bản nhất:
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 28
Ví dụ: "bằng" được ghép từ [b]+[ằ]+[ng]
Phương pháp này có khối lượng lưu trữ nhỏ nhất vì chỉ có 28 phụ âm
và 68 nguyên âm cùng các biến thể thanh. Khối lượng lưu trữ:
(28+68) * 8000 * 1 * 1 * 0.8 = 614,400 byte
Nhận xét :
- Khối lượng lưu trữ rất nhỏ
- Rất khó hiện thực vì khi phụ âm có vai trò làm phụ âm cuối, chúng được
phát âm khác với khi chúng làm phụ âm đầu. Phụ âm đầu mở ra để kết hợp với
nguyên âm, phụ âm cuối khép lại không kết hợp với nguyên âm nữa. Cần chú
ý khi phát âm nguyên âm trong trường hợp âm cuối là loại tắc (vô thanh), ví
dụ như p, t, c. Khi này thanh điệu không thể hiện trên phụ âm cuối mà thể hiện
ở giai đoạn chuyển tiếp từ nguyên âm sang âm cuối.
- Chất lượng âm của phương pháp này rất thấp.
Ghép âm từ hai âm (loại 1):
Ví dụ : "bằng" được ghép từ [b] + [ ằng] .
Một từ được tách ra làm hai phần là phụ âm đầu và vần. điều này căn cứ
trên đặc điểm tiếng Việt là phụ âm đầu ít phụ thuộc vào phần vần và thanh
điệu. Trong đó, phụ âm đầu được cắt rất ngắn chỉ còn lại âm bật. Phần vần
cũng được cắt bỏ ở phần đầu một lượng tưng ứng.
Phương pháp này cho chất lượng âm thanh tương đương so với phương
pháp ghép từ đơn. Theo phương pháp này ta tách được 28 phụ âm đầu và 650
phần vần. Với cách thu âm như trước thì khối lượng lưu trữ sẽ là:
650 * 8000 * 1 * 1 * (0.8 - 0.15) + 28 * 8000 * 1 * 1 * 0.15 = 3,143,600 byte
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 29
Nhận xét :
- Một từ tiếng việt bao gồm 2 phần: phần âm đầu và phần vần. Âm đầu
chủ yếu là các phụ âm trong tiếng việt. Ứng với một loại âm đầu ( ở đây chủ
yếu là phụ âm ) phần vần ở phía sau sẽ thay đổi theo một quy luật nào đó so
với phần vần chuẩn khi chưa có âm đầu tuỳ theo cách phát âm của phụ âm.
Chẳng hạn :
/t/ /am/ t
/ch/ /am/ ch
nếu đem /ch/ ráp với /am/ t thì tiếng phát ra sẽ không trung thực, tức là khi xây
dựng mô hình âm thanh phần vần độc lập với so với âm đầu sẽ không tận dụng
được hết tính phân biệt giữa các từ do sự biến đổi phổ tín hiệu phần vần so với
tác động của các âm đầu khác nhau.
Âm của phụ âm “tr”
Âm của vần “inh” Vần “inh” sau khi được xén bớt phần thừa
Âm “tr” sau khi được xén bớt phần thừa
Âm của từ “trinh”
HÌNH MÔ TẢ CÁCH GHÉP HAI ÂM THÀNH TỪ
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 30
- Để tìm ra quy luật biến đổi phổ tín hiệu này đòi hỏi ta phải có máy phân
tích phổ và đi vào lĩnh vực xử lý tiếng nói, ta mới có thể quan sát và phân tích
mẫu sóng âm tại từng thời điểm nhằm tìm ra quy luật.
Ghép âm từ hai âm (loại 2):
Ví dụ "bằng" được ghép từ [bà]+[ằng]
Phương pháp này gần giống phương pháp trên nhưng phần phụ âm đầu
được cắt lấn sang phần vần. Theo đó, ta sẽ có 28*650 = 18,200 phần phụ âm
đầu tương ứng với 650 phần vần. Trong thực tế, chỉ cần khoảng 1400 phần
đầu. Như vậy khối lượng lưu trữ tổng cộng sẽ là:
(1400+650)* 8000 * 1 * 1 * 0.8 = 13,120,000 byte
Nhận xét :
- Vị trí cắt lấn sang phần vần nên khó xác định vì đây là vùng trộn lẫn giữa
hai âm.
- Tuy khối lượng lưu trữ là nhỏ so với ghép từ (2.5 lần) nhưng lớn hơn
nhiều so với ghép âm loại 1 (4 lần).
- Khi dùng phương pháp ghép âm thì việc chuẩn bị các âm mất thời gian
rất lớn. Việc chuẩn bị âm được thực hiện thủ công do không thể xác định
chính xác vị trí cần cắt. Do đó nếu phương pháp này có số lượng âm lớn gấp 4
lần thì thời gian và chi phí bỏ ra cũng lớn gấp 4 lần so với phương pháp ghép
âm loại một.
- Ngoài ra chất lượng âm của phương pháp này cũng chưa được kiểm
nghiệm để có thể đánh giá ưu điểm về chất lượng so với phương pháp loại 1.
III. Giới thiệu về file Wave (*.wav) :
III.1. Khái niệm về file Wave và file RIFF :
File Wave là một dạng file theo chuẩn của Microsoft cho phép lưu trữ dữ
liệu sóng âm được số hóa. Nó hỗ trợ rất đa dạng các thông số của âm thanh
như số bit lượng tử hóa, tốc độ lấy mẫu, số kênh. Dạng file này rất phổ biến
trên các thế hệ máy tính IBM và được sử dụng rộng rãi trong các chương trình
chuyên nghiệp để xử lý các sóng âm được số hóa.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 31
File Wave là một trong số các file thuộc chuẩn của file RIFF (Resource
Interchange File Format - Dạng file trao đổi tài nguyên). File RIFF sử dụng
phương pháp lưu trữ dữ liệu trong các chunk. Mỗi chunk sẽ gồm 3 trường :
Tên nhận dạng của chunk (ID) : gồm 4 byte kiểu Char
Kích thước của chunk (Size) : Kiểu DoubleWord. Giá trị này không
bao gồm 4 byte của ID và 4 byte của Size
Dữ liệu của chunk đó (Data)
Đặc biệt, chunk RIFF có thể chứa các chunk khác trong trường dữ liệu.
Các chunk này được gọi là subchunk và chunk RIFF lúc này được gọi là
parent chunk.
Một file RIFF luôn bắt đầu bằng một chunk RIFF. Kích thước của chunk
RIFF là kích tổng số byte mà trường dữ liệu của nó chiếm, nói cách khác
chính là kích thước của file RIFF - 8 .
Tất cả các chunk khác trong file RIFF đều là subchunk của chunk RIFF.
Chunk RIFF có thêm một trường bổ sung nằm ở 4 byte đầu tiên trong trường
dữ liệu của nó. Trường bổ sung này được gọi là kiểu định dạng (form type) ,
gồm 4 byte kiểu Char. Nó cho biết dạng dữ liệu được lưu trữ bên trong file
RIFF là gì. Ví dụ, đối với các file Wave trường này sẽ có tên là “WAVE” ,
đối với các file Avi trường này sẽ có tên là “AVI ”
Hình sau minh họa 2 subchunk trong chunk RIFF của file RIFF :
Trường dữ liệu (Data)
của chunk RIFF
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 32
III.2. Cấu trúc file Wave :
Một file wave là một tập hợp các loại chunk khác nhau. Vì file Wave
chính là file RIFF nên chunk đầu tiên sẽ là chunk RIFF. Ngoài ra, có 2 chunk
rất quan trọng không thể thiếu là chunk Format mô tả các thông số của sóng
âm như tốc độ lấy mẫu, số bit lượng tử hóa, vv... Chunk thứ hai là chunk Data
để chứa dữ liệu âm thanh đã được số hóa. Các chunk khác tùy trường hợp có
thể có, có thể không.
III.2.1. Chunk Format :
Cấu trúc của chunk Format được định nghĩa như sau :
Trước hết chunk Format luôn có tên nhận dạng là “fmt ”. Kích thước
của chunk Format có thể thay đổi tùy theo giá trị của wFormatTag.
Giá trị này cho biết chuẩn nén âm thanh. Có hơn 50 chuẩn của
Microsoft và các hãng khác được định nghĩa trong file mmreg.h .
Thông thường chuẩn PCM (Pulse Code Modulation) của Microsoft
là chuẩn phổ biến nhất. Với chuẩn này, các mẫu âm thanh được lưu
trữ sẽ không được nén và có giá trị được định nghĩa là 1.
wChannels là số kênh âm thanh. Giá trị 1 cho âm thanh mono, 2 cho
âm thanh stereo, 4 cho âm thanh 4 kênh, vv ...
dwSamplesPerSec là tốc độ lấy mẫu, nghĩa là số mẫu được phát
trong một giây, đơn vị là Hertz . Có 3 giá trị thông dụng là : 11025,
22050 và 44100 Hz mặc dù các tốc độ khác vẫn được dùng.
typedef struct {
WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
WORD wBitsPerSample;
WORD cbSize;
} WAVEFORMATEX;
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 33
dwAvgBytesPerSec sẽ chỉ ra có bao nhiêu byte được phát mỗi giây.
Nếu là chuẩn PCM thì giá trị này chính là dwSamplesPerSec *
wBlockAlign . Ngược lại, giá trị này phải được tính toán phù hợp với
chuẩn tương ứng.
wBlockAlign là kích thước của một khung mẫu âm thanh, tính theo
byte. Ví dụ một khung mẫu âm thanh 16-bit mono là 2 byte, 16-bit
stereo là 4 byte. Nếu chuẩn là PCM thì giá trị này bằng wChannels *
(wBitsPerSample / 8)
wBitsPerSample cho biết số bit dùng để lượng tử hóa mỗi điểm lấy
mẫu. Nếu chuẩn là PCM thì giá trị này là 8 hoặc 16. Vì các mẫu phải
được lưu dạng BYTE hoặc WORD nên khi lưu trữ vẫn phải lưu hẳn
1 BYTE hoặc 1 WORD. Ví dụ số bit lượng tử hóa là 12 thì sẽ có 4
bit thừa không dùng tới.
cbSize là kích thước của những thông tin mở rộng thêm được thêm
vào cuối cấu trúc WAVEFORMATEX. Thông tin này được dùng khi
chuẩn khác PCM. Với chuẩn PCM thì giá trị này bẳng 0
III.2.2. Chunk Data :
Sau chunk Format là chunk Data. Chunk này chỉ đơn giản chứa các
mẫu âm thanh đã được số hóa. Tùy theo số kênh được chọn và số bit dùng để
lượng tử hóa mà các mẫu âm thanh này được sắp xếp khác nhau trong chunk
Data. Có 2 khái niệm về điểm mẫu và khung mẫu
Một điểm mẫu chính là một giá trị đại diện cho một mẫu âm thanh
được lấy tại một thời điểm nào đó. Nếu số bit dùng để lượng tử hóa là 8 thì giá
trị của một điểm mẫu dao động từ 0 đến 255. Nếu số bit dùng để lượng tử hóa
là 16 thì giá trị của một điểm mẫu dao động từ đến -32768 đến 32767. Đối với
âm thanh có nhiều kênh, các điểm mẫu từ mỗi kênh sẽ được xếp xen kẽ. Ví dụ
với âm thanh stereo, các điểm mẫu sẽ được lưu trữ như sau : mẫu đầu tiên của
kênh trái rồi tới mẫu đầu tiên của kênh phải, tiếp đó là mẫu thứ hai của kênh
trái rồi tới mẫu thứ hai của kênh phải, ... và cứ như thế.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 34
Một khung mẫu bao gồm nhiều điểm mẫu được phát đồng thời. Ví
dụ, với âm thanh stereo, 2 điểm mẫu thuộc 2 kênh sẽ tạo thành một khung mẫu
Khung mẫu 1 Khung mẫu 2 Khung mẫu N
Kênh 1 Kênh 2 Kênh 1 Kênh 2 ... Kênh 1 Kênh 2
= 1 điểm mẫu
Với âm thanh mono thì mỗi khung mẫu chỉ có 1 điểm mẫu. Đối với âm thanh
có nhiều kênh thì tùy theo số lượng kênh mà các thứ tự của các điểm mẫu
trong một khung mẫu sẽ khác nhau :
1 2
Stereo Trái Phải
1 2 3
3 kênh Trái Phải Giữa
1 2 3 4
Quad Trái -
Trước
Phải -
Trước
Trái -
Sau
Phải -
Sau
1 2 3 4
4 kênh Trái Giữa Phải Surround
1 2 3 4 5 6
6 kênh Giữa -
Trái Trái Giữa
Giữa -
Phải Phải Surround
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 35
Tóm lại cấu trúc file Wave được mô tả như bảng sau :
Mô tả Kích thước Giá trị thông thường
Tên của chunk RIFF
(RIFF chunk ID)
4 byte “RIFF”
Kích thước chunk RIFF
(RIFF chunk size)
4 byte Kích thước file RIFF - 8
Định dạng của file RIFF
(Form type)
4 byte "WAVE"
Tên của chunk Format
(Format chunk ID)
4 byte “fmt “
Kích thước chunk Format
(Format chunk size)
4 byte 16
Chuẩn của file Wave
(wFormatTag)
2 byte PCM = 1
Số kênh
(wChannels)
2 byte
mono = 1
stereo = 2
Tốc độ lấy mẫu
(dwSamplesPerSec)
4 byte
11025 Hz, 22050 Hz,
44100 Hz
Số byte/1 giây
(dwAvgBytesPerSec)
4 byte
dwSamplesPerSec *
wBlockAlign
Kích thước khung mẫu
(wBlockAlign)
2 byte
wChannels *
(wBitsPerSample / 8)
Số bit lượng tử hóa
(wBitsPerSample)
2 byte
8
16
Tên của chunk Data
(Data chunk ID)
4 byte "data"
Kích thước chunk Data
(Data chunk size)
4 byte
wBlockAlign * Tổng số
khung mẫu
Dữ liệu mẫu âm thanh ? ?
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 36
IV. Các phương pháp phát một file Wave :
IV.1. Dùng hàm sndPlaySound hoặc PlaySound :
Windows cung cấp 2 hàm sau để phát một file wave : sndPlaySound và
PlaySound . Hai hàm này tuy gọn, nhẹ, đơn giản nhưng sẽ nạp toàn bộ dữ liệu
âm thanh vào bộ nhớ, và cũng vì vậy mà kích thước của file sẽ bị giới hạn đến
100 KB. Ngoài ra, hai hàm này cũng đòi hỏi định dạng của dữ liệu âm thanh
phải được nhận biết bởi trình điều khiển âm thanh và chỉ phát ra soundcard.
IV.2. Dùng MCI (Media Control Interface) :
Các hàm của MCI được chứa trong thư viện Winmm.lib của Windows.
Các khai báo đặc tả liên quan được cung cấp trong 2 file Mmsystem.h và
Windows.h
Để phát một file Wave có kích thước lớn hơn, Windows cung cấp một
giao tiếp MCI (Media Control Interface). Đây là một giao tiếp rất mạnh thực
hiện công việc giao tiếp giữa ứng dụng và thiết bị âm thanh để thu hoặc phát
rất nhiều loại file âm thanh như : phát các bản nhạc từ CD Audio, các file
Wave, Midi, Video, vv...
MCI là tập hợp các hàm, mỗi hàm có một chức năng riêng biệt. Điều đặc
biệt là MCI sử dụng các chuỗi lệnh để nhận biết công việc cần làm. Ví dụ,
hàm mciSendString() sẽ gửi các chuỗi lệnh sau để phát 10000 mẫu âm thanh :
mciSendString(
"open c:\Sound\MyWave.wav type waveaudio alias finch",
lpszReturnString, lstrlen(lpszReturnString), NULL);
mciSendString("set finch time format samples", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("play finch from 1 to 10000", lpszReturnString,
lstrlen(lpszReturnString), NULL);
mciSendString("close finch", lpszReturnString,
lstrlen(lpszReturnString), NULL);
IV.3. Dùng các hàm cấp thấp của Windows :
Các hàm này được chứa trong thư viện Winmm.lib của Windows. Các khai
báo đặc tả liên quan được cung cấp trong 2 file Mmsystem.h và Windows.h
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 37
4 hàm chính sau đây sẽ luôn được dùng để điều khiển việc phát một file
Wave :
waveOutOpen()
waveOutPrepareHeader()
waveOutWrite()
waveOutClose()
Trong đó, hàm waveOutOpen() sẽ yêu cầu cung cấp địa chỉ của một hàm
gọi là CallBack. Hàm CallBack này sẽ cho biết một trong 3 sự kiện liên quan
sẽ xảy ra , và 3 sự kiện này tương ứng với 3 thông điệp sau được gửi đến hàm
CallBack :
MM_WOM_OPEN
Được gửi khi thiết bị được mở bằng hàm
waveOutOpen()
MM_WOM_DONE
Được gửi khi thiết bị đã phát xong khối dữ
liệu âm thanh mà được gửi đi bằng hàm
waveOutWrite()
MM_WOM_CLOSE
Được gửi khi thiết bị được đóng bằng hàm
waveOutClose()
Ngoài ra, hàm waveOutOpen() còn đòi hỏi một số tham số quan trọng như :
mã nhận dạng thiết bị âm thanh, handle của thiết bị sau khi mở, con trỏ tới
một cấu trúc mô tả file Wave. Để chọn thiết bị âm thanh mặc định, ta dùng
hằng WAVE_MAPPER thay cho mã nhận dạng thiết bị âm thanh.
Hàm waveOutPrepareHeader() sẽ tạo ra một header cho khối dữ liệu âm
thanh sẽ phát bao gồm cả các mẫu âm thanh đã được nạp vào bộ nhớ.
Cuối cùng, hàm waveOutWrite() sẽ bắt đầu gửi khối dữ liệu âm thanh
này ra thiết bị để phát với header đó.
Sau khi phát xong, ta phải gọi hàm waveOutClose() để đóng thiết bị đã
mở nhằm giải phóng tài nguyên hệ thống.
Tất cả các hàm liên quan đến công việc phát âm thanh này đều hoạt động
thông qua handle của thiết bị mà được lấy từ hàm waveOutOpen().
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 38
Nhận xét chung về 3 cách phát file Wave :
- Theo thứ tự của 3 cách nêu trên thì tính đơn giản tỷ lệ
nghịch với tính linh động, uyển chuyển trong việc phát một file
Wave, nghĩa là ta muốn nắm quyền kiểm soát, điều khiển càng
nhiều thì phải thực hiện càng nhiều thao tác.
- Trong 3 cách phát file Wave trên thì 2 cách đầu (dùng
hàm sndPlaySound, PlaySound hoặc MCI) ta không cần quan
tâm đến việc đọc file Wave và nạp các mẫu âm thanh vào bộ
nhớ. Riêng cách thứ ba thì điều này là bắt buộc. Phần dưới đây sẽ
nói sơ về cách đọc dữ liệu âm thanh vào bộ nhớ trước khi gọi các
hàm đó.
V. Cách đọc file Wave vào bộ nhớ :
Để thao tác với file Wave, Windows cung cấp hàng loạt các hàm được chứa
trong thư viện Winmm.lib. Sau đây là một số hàm chính thực hiện công việc
đọc file Wave :
Để làm việc với file Wave, ta phải mở file đó bằng hàm :
mmioOpen()
Sau đó định vị vào chunk ta cần bằng hàm :
mmioDescend()
Lúc này con trỏ file sẽ trỏ vào đầu phần dữ liệu của chunk đó và ta sẽ
đọc dữ liệu vào bộ nhớ bằng hàm :
mmioRead()
Khi làm việc xong với 1 chunk, trước khi muốn định vị vào một chunk
khác, ta phải ra khỏi chunk cũ bằng hàm :
mmioAscend()
Sau khi hoàn tất công việc, ta sẽ đóng file Wave đã mở bằng hàm :
mmioClose()
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 39
Trước khi đọc dữ liệu âm thanh vào bộ nhớ, ta nên đọc header của file
Wave trong chunk Format. Từ header này ta sẽ xác định tổng số byte mà bộ
nhớ cần để lưu trữ dữ liệu âm thanh và tiến hành cấp phát bộ nhớ bằng hàm :
GlobalAlloc()
Sau đó ta chỉ việc đọc dữ liệu vào vùng nhớ đó. Bất cứ lúc nào cần ta
cũng có thể giải phóng vùng nhớ đó bằng hàm :
GlobalFree()
Ngoài ra, nếu ta muốn thay đổi vị trí hiện tại của con trỏ file sau khi đã
mở file, ta có thể dùng hàm :
mmioSeek()
VI. Phương pháp thu âm :
Với MCI đã giới thiệu ở phần trên để phát một file Wave, ta cũng có thể
dùng MCI để thu âm. Cách thứ hai là dùng các hàm cấp thấp của Windows.
Như đã giới thiệu, các hàm này sẽ cho ta sự linh hoạt trong mọi thao tác.
Trước hết ta phải mở thiết bị âm thanh bằng hàm :
waveInOpen()
Tương tự như khi phát, ta phải cung cấp địa chỉ của một hàm gọi là hàm
CallBack mà sẽ phát ra các sự kiện liên quan đến quá trình thu âm. Các thông
điệp tương ứng với các sự kiện này là :
MM_WIM_OPEN
Được gửi khi thiết bị được mở bằng hàm
waveInOpen()
MM_WIM_DATA
Được gửi khi thiết bị hoàn tất việc thu âm
sau khi gọi hàm waveInStart()
MM_WIM_CLOSE
Được gửi khi thiết bị được đóng bằng hàm
waveInClose()
Ngoài ra, ta cũng cần cung cấp mã nhận dạng thiết bị âm thanh và một cấu
trúc mô tả các thông số định dạng của file Wave. Để chọn thiết bị âm thanh
mặc định, ta dùng hằng WAVE_MAPPER thay cho mã nhận dạng thiết bị âm
thanh.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 40
Một việc khác không thể thiếu là cấp phát bộ nhớ để lưu các mẫu âm
thanh thu được. Dựa vào các thông số được mô tả trong cấu trúc file Wave, ta
phải tính toán dung lượng bộ nhớ tối thiểu cần được cấp phát trong một
khoảng thời gian nào đó. Cụ thể là :
dwAvgBytesPerSec * thời gian thu âm
Kế đó, ta sẽ tạo ra header file sẽ thu âm bao gồm cả vùng nhớ vừa cấp
phát bằng hàm :
waveInPrepareHeader()
Sau đó ta sẽ gửi những thông tin này đến thiết bị thu âm bằng hàm :
waveInAddBuffer()
Cuối cùng, quá trình thu âm sẽ được bắt đầu bằng hàm :
waveInStart()
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 41
PHẦN 3
THIẾT KẾ
HỆ THỐNG
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 42
Chương 1
SƠ ĐỒ HOẠT ĐỘNG CỦA HỆ THỐNG
I. Lưu đồ giải thuật :
Nếu nhìn một cách tổng quát thì chương trình sẽ gồm 4 giai đoạn chính :
Kết nối cuộc gọi tới
Tiếp nhận yêu cầu của người gọi
Tìm dữ liệu trong máy tính
Thông báo kết quả tìm được
Dưới đây là lưu đồ hoạt động tổng quát của chương trình :
Bắt đầu
Chuông reo
Kết nối
Có phím bấm
Tìm dữ liệu
Thông báo kết quả
F
T
T
F
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 43
II. Sơ đồ luồng hoạt động của hệ thống :
Sau khi cuộc gọi đã được kết nối với máy tính, hệ thống sẽ ở một trong
11 trạng thái sau đây :
Trạng thái Ý nghĩa
MENU Đang thông báo các mục trong menu
MASO Đang nhận vào mã số học sinh
NGHIHOC Đang lấy ra thông tin về các lần nghỉ học của học sinh
VIPHAM
Đang lấy ra thông tin về các lần vi phạm nội quy của
học sinh
KQKIEMTRA Đang lấy ra kết quả của các lần kiểm tra trong tháng
KQTHI Đang lấy ra kết quả thi học kỳ
KQTHANG Đang lấy ra kết quả cuối tháng
KQHOCKY Đang lấy ra kết quả cuối học kỳ
KQNAMHOC Đang lấy ra kết quả cuối năm học
HOCSINH Đang lấy ra thông tin chi tiết về học sinh
NAMHOC Đang chọn năm học
Dựa vào các trạng thái này mà hệ thống biết được công việc hiện tại cần
thực hiện là gì. Hoạt động của hệ thống được mô tả qua sơ đồ dưới đây :
Mỗi hình elip tượng trưng cho một thủ tục để thực hiện công việc
tương ứng.
Các đường mũi tên chỉ hướng thực hiện giữa các thủ tục.
Các con số, dấu *, # và tên trạng thái nằm trên đường mũi tên có ý
nghĩa hoặc là trạng thái hiện tại hoặc là chúng được gửi đi theo
luồng hoạt động của hệ thống. Nếu chúng được bao giữa hai dấu <
> thì đó là trạng thái hiện tại, nếu không thì chúng sẽ được gửi từ
thủ tục này tới thủ tục kia.
Thủ tục “nhận mã DTMF” sẽ nhận mã DTMF từ người gọi, sau đó sẽ
truyền tới các thủ tục khác.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 44
Trong sơ đồ này chỉ tập trung chủ yếu ở phần nhận yêu cầu của người
gọi. Sau khi nhận yêu cầu, hệ thống chỉ việc tìm dữ liệu và thông báo kết quả
cho người gọi theo một luồng hoạt động duy nhất. Chi tiết về hoạt động sẽ
được đề cập trong các phần sau.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 45
Bắt đầu
Chờ
Kết nối
Nhận mã số
Tìm dữ liệu
Nhận tháng
Nhận
học kỳ
Nhận
năm học
0..9
1..2
0..9
MASO
#,*, 0..9
MENU
MASO
MENU
<
M
EN
U
>
*,
#,
0
..9
<
*>
<
#>
M
AS
O
<
1>
N
G
H
IH
O
C
<
2>
V
IP
H
AM
<
3>
K
Q
K
IE
M
TR
A
<
4>
K
Q
TH
I
<
9>
N
AM
H
O
C
<
6>
K
Q
H
O
CK
Y
<
5>
K
Q
TH
AN
G
Menu
Thông báo
kết quả
Nhận mã
DTMF
<
Th
án
g
hợ
p
lệ
>
<H
ọc
k
ỳ
hợ
p
lệ
>
<
7>
K
Q
NA
M
H
O
C
MENU
<
8>
H
O
C
SI
NH
Ngắt kết nối
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 46
Chương 2
HOẠT ĐỘNG GIAO TIẾP GIỮA
ĐIỆN THOẠI VÀ MÁY TÍNH
Yêu cầu của ứng dụng là chỉ cần tạo một phiên làm việc giữa máy tính
và điện thoại để có thể nhận được các mã DTMF và truyền tiếng nói tới người
gọi. Với yêu cầu này, mọi phiên bản TAPI cho ứng dụng 32-bit đều hỗ trợ nên
em chọn phiên bản đầu tiên là TAPI 1.4 . Phiên bản này được thiết kế theo
kiến trúc ngôn ngữ C++ nên khi lập trình trong Visual Basic sẽ khó khăn hơn.
Tuy nhiên, ứng dụng TAPI 1.4 sẽ có thể chạy trên mọi phiên bản Windows
32-bit và không đòi hỏi cấu hình cao, trong khi ứng dụng TAPI 3 chỉ chạy trên
Windows 2000/XP.
Để sử dụng các hàm của TAPI, các hàm này phải được khai báo trước
trong một module giống như các hàm API khác của Windows. Sau đây là các
bước để tạo một kết nối với cuộc gọi tới :
I. Khởi tạo đường truyền (line) :
Mọi hoạt động giao tiếp giữa điện thoại và máy tính muốn diễn ra thì
trước hết cần phải khởi tạo đường truyền giữa máy tính và điện thoại. Ở đây,
modem sẽ là thiết bị trung gian giữa máy tính và điện thoại. Vì thế, đường
truyền mà ta cần quan tâm chính là modem. Một máy tính có thể có gắn nhiều
hơn một modem. Vì vậy, trước hết ta cần phải sử dụng hàm lineInitialize() để
lấy về tổng số đường truyền (line) mà nó phát hiện có trong máy.
Cũng từ đây, ta sẽ chỉ định hàm nào sẽ tiếp nhận các sự kiện được sinh ra
bởi các hoạt động của TAPI (ví dụ như khi chuông reo, khi có mã DTMF được
gửi tới, vv...). Hàm này được gọi là lineCallBack() , do ta tự định nghĩa. Sau
đó, ta sẽ lấy địa chỉ của hàm này và đưa vào hàm lineInitialize() như là một
tham số của hàm lineInitialize()
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 47
Sau khi đã khởi tạo thành công, lineInitialize() sẽ trả về một handle của
TAPI đã nạp vào bộ nhớ. Handle này sẽ được sử dụng trong suốt quá trình
hoạt động của hệ thống.
II. Kiểm tra đường truyền (line) hợp lệ :
Vì mục đích của ta là lấy được các modem hiện có nên ta cần phải kiểm tra
những line nào thích hợp. Sau khi có được tổng số các line, ta duyệt qua từng
line để tìm line thích hợp bằng cách kết hợp gọi 2 hàm
lineNegotiateAPIVersion() và lineGetDevCaps().
Ứng với mỗi line, hàm lineNegotiateAPIVersion() sẽ trả về con số phiên
bản (version) API mà tương thích với phiên bản của TAPI hiện đang sử dụng.
Với con số phiên bản lấy được, hàm lineGetDevCaps() sẽ kiểm tra và trả về
những chức năng được hỗ trợ trên line này. Từ đây, ta sẽ chọn được các line
thích hợp chính là các modem hiện có.
III. Mở line :
Để bắt đầu cho sự bắt tay làm việc giữa máy tính và điện thoại, sau khi
đã chọn được line thích hợp, ta mở line đó bằng hàm lineOpen(). Nếu mở
thành công. nó sẽ trả về một handle của line được mở. Với handle này, ta sẽ
điều khiển mọi hoạt động diễn ra trên line này.
IV. Đăng ký các sự kiện cho TAPI :
Mọi sự kiện liên quan đến TAPI (ví dụ chuông reo, phát/nhận các mã
DTMF, ... ) được gửi đến hàm lineCallBack() đều phải được đăng ký sau khi
mở line. Để đăng ký, ta gọi hàm lineSetStatusMessages() và đưa vào giá trị mô
tả các sự kiện mà ta cần. Giá trị này thực chất là một dãy các 32 bit liên tiếp,
mỗi bit tương ứng với một sự kiện của TAPI.
V. Kết nối với cuộc gọi đến :
Khi có tín hiệu gọi tới (chuông reo), thông điệp
LINEDEVSTATE_RINGING sẽ được gửi tới trong hàm lineCallBack() cùng
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 48
với một handle của cuộc gọi đó. Nếu số tiếng chuông reo bằng với một con số
mà ta quy định trước đó thì ta sẽ gọi hàm lineAnswer() với handle vừa nhận
được để kết nối với cuộc gọi đến. Công việc này tương đương với việc nhấc
máy điện thoại lên để trả lời người gọi tới. Vì vậy, kể từ lúc này, ta có thể gửi
và nhận các mã DTMF hoặc gửi đi một chuỗi âm thanh nào đó và người gọi
có thể nghe được.
VI. Thu nhận các mã DTMF :
Một khi đã kết nối thành công với cuộc gọi đến, ta gọi hàm
lineMonitorDigits() để giám sát và thu nhận các mã DTMF được gửi tới. Có
thể nói đây là phần trung tâm của hệ thống, vì hệ thống sẽ tiếp nhận yêu cầu
của người gọi thông qua các mã DTMF này.
Khi người gọi nhấn các phím trên điện thoại thì thông điệp
LINE_MONITORDIGITS sẽ được gửi tới hàm lineCallBack() cùng với các mã
DTMF tương ứng như sau :
Phím Mã DTMF (Hex)
0 30
1 31
2 32
3 33
4 34
5 35
6 36
7 37
8 38
9 39
* 2A
# 23
VII. Kết thúc cuộc gọi :
Khi người gọi chọn yêu cầu “kết cầu thúc cuộc gọi” từ menu hoặc người
gọi gác máy bất kỳ lúc nào, ta phải gọi hàm lineDrop() để hủy cuộc gọi hiện
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 49
tại đang kết nối và hàm lineDeallocateCall() để giải phóng cuộc gọi khỏi bộ
nhớ. Bây giờ hệ thống sẽ trở về trạng thái chờ đợi cuộc gọi khác đến.
VIII. Đóng line hiện tại :
Nếu muốn chọn modem khác để hoạt động, hoặc kết thúc hoạt động của
hệ thống, ta cần gọi hàm lineClose() để đóng line hiện tại đang được mở. Đây
là điều nên làm vì nó sẽ hoàn trả tài nguyên về cho máy.
IX. Kết thúc TAPI :
Sau khi khởi tạo các line bằng hàm lineInitialize(), một số tài nguyên hệ
thống sẽ bị chiếm dụng suốt phiên làm việc của TAPI. Khi thoát chương trình,
ta gọi hàm lineShutdown() để kết thúc phiên làm việc đó, đồng thời giải phóng
các tài nguyên hệ thống.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 50
Chương 3
THIẾT KẾ VÀ TRUY XUẤT CƠ SỞ DỮ LIỆU
I. Sơ lược về cơ sở dữ liệu :
Một số đặc điểm của cơ sở dữ liệu dùng trong chương trình này :
- Mô hình cơ sở dữ liệu được chọn là mô hình cơ sở dữ liệu quan hệ
- Được cài đặt trong hệ quản trị cơ sở dữ liệu Microsoft Access 97.
- Phông chữ được sử dụng trong cơ sở dữ liệu này thuộc bảng mã VNI
Windows (2 byte). Mặc dù bảng mã này sử dụng 2 byte để mã hóa một ký tự
tiếng Việt , nhưng toàn bộ các ký tự hoa và ký tự thường đều cùng nằm trong
một phông chữ. Còn bảng mã TCVN3 (ABC) chỉ sử dụng 1 byte cho mỗi ký
tự tiếng Việt nhưng lại phân ra thành 2 phông khác nhau : một phông cho chữ
hoa và một phông cho chữ thường. Điều này sẽ gây khó khăn cho cả việc thiết
kế và việc nhập dữ liệu từ người dùng. Bảng mã Unicode cũng sử dụng 2 byte
cho mỗi ký tự tiếng Việt nhưng giá trị chênh lệch mã ASCII giữa ký tự hoa và
ký tự thường không đồng đều. Còn bảng mã VNI thì giá trị chênh lệch này
luôn là 20h. Ví dụ : chữ “A” có mã ASCII là 41h, chữ “a” có mã ASCII là 61h
; chữ “B” có mã ASCII là 42h, chữ “b” có mã ASCII là 62h . Sự chênh lệch
đồng đều này sẽ thuận lợi cho việc chuyển đổi giữa chữ hoa và chữ thường.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 51
II. Mô hình quan niệm dữ liệu :
- Teân HKyø
HOÏC KYØ
-
- Hoï HS
- Teân HS
- Ngaøy sinh
- Giôùi tính
Maõ HS
HOÏC SINH
-
- Teân NH
Maõ NH
NAÊM HOÏC
-
- Teân NS
Maõ NS
NÔI SINH
-
- Teân lôùp
Maõ lôùp
LÔÙP
-
-
-
Maõ HS
Maõ lôùp
Maõ NH
HS - LÔÙP
- Teân khoái
KHOÁI
-
-
-
-
- Ñieåm thi
Maõ HS
Maõ MH
Maõ NH
HKThi
THI
-
-
-
-
-
-
- Ñieåm KT
Maõ HS
Maõ MH
Maõ LKT
Maõ NH
Thaùng KT
Laàn KT
KIEÅM TRA
-
- Teân LKT
Maõ LKT
LOAÏI KT
-
- Teân MH
Maõ MH
MOÂN HOÏC
-
-
Maõ MH
Teân khoái
MH - KHOÁI
-
- Teân LD
Maõ LD
LYÙ DO
-
-
-
- ÑTB thaùng
- Haïng thaùng
Maõ HS
Teân Thaùng
Maõ NH
- Maõ HK
- Maõ HL
KQ THAÙNG
-
-
- ÑTB HKyø
- Haïng HKyø
Maõ HS
Teân HKyø
-
- Maõ HK
- Maõ HL
Maõ NH
KQ HOÏC KYØ
-
-
- ÑTB NH
- Haïng NHø
Maõ HS
Maõ NH
- Maõ HK
- Maõ HL
KQ NAÊM HOÏC
- Teân thaùng
THAÙNG
-
- Teân HK
Maõ HK
HAÏNH KIEÅM
-
- Teân HL
Maõ HL
HOÏC LÖÏC
1
1
1 1
1
n
n
n
n n
n n
n
n
n
1
n
n
1
1
1
n
n
1
1
11 1
1
n
1
1 11
n n n n
1
1
n n
1
111
n n n
n n
nnn
1
1
1
1
1
-
-
- Soá ngaøy nghæ
- Giaáy pheùp
Maõ HS
Ngaøy NH
NGHÆ HOÏC
n
-
-
-
Maõ HS
Ngaøy VP
Laàn VP
VI PHAÏM
-
- Teân loãi
Maõ loãi
LOÃI
n
1
1
n
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 52
III. Hoạt động truy xuất cơ sở dữ liệu :
Đối tượng truy xuất dữ liệu được sử dụng trong chương trình này là
Microsoft DAO 3.6. Khi hệ thống bắt đầu hoạt động, cơ sở dữ liệu sẽ được mở
bằng phương thức OpenDatabase() để sẵn sàng phục vụ cho các hoạt động
truy xuất dữ liệu. Và khi hệ thống ngừng hoạt động, cơ sở dữ liệu cũng sẽ
được đóng lại bằng phương thức Close.
Mỗi khi có người gọi tới muốn nghe một kết quả nào đó thì hệ thống sẽ
yêu cầu người gọi cung cấp một số thông số cần thiết như : mã số học sinh, tên
tháng hoặc tên học kỳ muốn biết, vv.... Từ những thông số này, hệ thống sẽ
tạo ra một câu truy vấn SQL để tìm kết quả trong cơ sở dữ liệu và lấy về
thông qua phương thức OpenRecordset(). Nếu không tìm thấy kết quả nào,
thuộc tính EOF của biến đối tượng Recordset sẽ mang giá trị TRUE và ngược
lại sẽ mang giá trị FALSE.
Vì mỗi lần truy vấn, hệ thống chỉ truy vấn trên một học sinh và được giới
hạn bởi một tháng hoặc một học kỳ nào đó nên tốc độ truy vấn khá nhanh,
người gọi có thể nhận được kết quả ngay mà không phải chờ lâu. Ngoài ra, vì
cơ sở dữ liệu được cài đặt bằng Access nên được hỗ trợ cơ chế cập nhật dữ
liệu động, hệ thống có thể hoạt động liên tục kể cả lúc dữ liệu đang được cập
nhật vào.
IV. Chương trình cập nhật dữ liệu :
Nhằm tạo điều kiện thuận lợi cho người quản trị hệ thống, ngoài chương
trình chính là thông báo kết quả còn có thêm một chương trình phụ kèm theo
để cập nhật dữ liệu vào cơ sở dữ liệu. Người dùng có thể mở chương trình này
thông qua menu của chương trình chính, kể cả lúc hệ thống đang hoạt động.
Các phần cập nhật dữ liệu trong chương trình này đều sử dụng đối tượng
truy cập dữ liệu Microsoft DAO 3.6 . Mọi thao tác với cơ sở dữ liệu đều thông
qua các phương thức có sẵn của DAO , đồng thời kết hợp với các câu lệnh
SQL.
Trước khi thực hiện cập nhật dữ liệu, người sử dụng cần phải chọn năm
học và lớp ở năm học đó. Mọi thao tác cập nhật sẽ ảnh hưởng tới một trong
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 53
các học sinh thuộc lớp đó. Chương trình cập nhật dữ liệu tổ chức dạng menu
gồm 8 phần :
1. Học sinh :
- Dùng để cập nhật các thông tin chi tiết về học sinh
- Khi thêm một học sinh mới vào lớp được chọn, chương trình sẽ tự sinh
ra một mã số cho học sinh đó. Mã số này được đánh theo số thứ tự tăng dần.
Vì vậy, chương trình sẽ lấy mã số của học sinh cuối cùng trong bảng
HOCSINH rồi tăng lên một đơn vị để làm mã số cho học sinh mới sắp sửa
thêm vào. Mã số này sẽ luôn được chương trình quản lý, người dùng không
thể tự ý thay đổi.
- Ở phần ngày sinh, để người sử dụng không phải lúng túng trong việc gõ
ngày tháng theo kiểu của Mỹ (tháng/ngày/năm) , em đã viết thêm một hàm
chuyển từ kiểu ngày/tháng/năm sang kiểu tháng/ngày/năm để lưu vào cơ sở
dữ liệu. Nhờ đó, người dùng có thể gõ vào ngày sinh bình thường theo kiểu
Việt Nam. Song song đó, em cũng phải viết thêm hàm chuyển ngược lại từ
tháng/ngày/năm sang ngày/tháng/năm nhằm hiển thị ra màn hình ngày sinh
được lấy từ cơ sở dữ liệu.
- Trong phần nơi sinh, tên của tất cả 61 tỉnh/thành phố đã được nạp sẵn
vì một học sinh có thể học tại trường thuộc tỉnh/thành phố này nhưng lại được
sinh ra ở một tỉnh/thành phố khác.
- Ứng với mỗi học sinh được thêm vào bảng HOCSINH thì mã số của
học sinh đó cùng với mã lớp và mã năm học sẽ được cập nhật vào trong bảng
HS_LOP để biết học sinh đó thuộc lớp nào ở năm học nào.
- Vì mỗi học sinh sẽ được gán cho một mã số duy nhất nên mỗi học sinh
chỉ được thêm vào trong bảng HOCSINH một lần. Do đó, nút “Chuyển lớp”
được dùng để chuyển một học sinh từ lớp này sang lớp khác ở cùng năm học.
Nhờ đó mà các kết quả trước đó của học sinh sẽ vẫn được bào toàn. Công việc
này đơn giản chỉ là cập nhật lại mã lớp mới thay cho mã lớp cũ.
- Tương tự , nút “Học sinh cũ” sẽ cho phép thêm tất cả các học sinh
thuộc một lớp nào đó ở năm học trước vào lớp hiện tại ở năm học hiện tại. Lúc
này chương trình chỉ cập nhật các học sinh vào bảng HS_LOP.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 54
2. Nghỉ học :
- Dùng để thêm các lần nghỉ học của học sinh
- Phần nhập ngày nghi học được thiết kế tương tự như phần ngày sinh ở
trên
- Dữ liệu sẽ được ghi vào bảng NGHIHOC
3. Lỗi vi phạm :
- Dùng để thêm các lần vi phạm nội quy của học sinh
- Phần nhập ngày vi phạm được thiết kế tương tự như phần ngày sinh ở
trên
- Dữ liệu sẽ được ghi vào bảng VIPHAM
4. Điểm kiểm tra :
- Dùng để thêm điểm kiểm tra của học sinh
- Dữ liệu sẽ được ghi vào bảng KQKIEMTRA
5. Điểm thi :
- Dùng để thêm điểm thi của học sinh
- Dữ liệu sẽ được ghi vào bảng KQTHI
6. Kết quả cuối tháng :
- Dùng để thêm kết quả ở cuối tháng của học sinh
- Dữ liệu sẽ được ghi vào bảng KQTHANG
7. Kết quả cuối học kỳ :
- Dùng để thêm kết quả ở cuối học kỳ của học sinh
- Dữ liệu sẽ được ghi vào bảng KQHOCKY
8. Kết quả cuối năm học :
- Dùng để thêm kết quả ở cuối năm học của học sinh
- Dữ liệu sẽ được ghi vào bảng KQNAMHOC
Ngoài ra, nhằm tạo sự linh động cho người dùng, chương trình còn cho
phép thêm mới một số loại dữ liệu sau : năm học, lớp, lý do nghỉ học, lý do vi
phạm nội quy, môn học, loại kiểm tra.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 55
Chương 4
TỔ CHỨC, TRUY XUẤT
VÀ PHÁT FILE TIẾNG NÓI
Sau khi đã tìm kiếm dữ liệu trong cơ sở dữ liệu , công việc cuối cùng là
thông báo kết quả bằng giọng nói qua điện thoại cho người gọi nghe, tức là
chuyển dữ liệu từ dạng chữ, số sang tiếng nói. Công việc này chủ yếu gồm 2
giai đoạn chính : tìm dữ liệu tiếng nói tương ứng và phát qua điện thoại .
Trước hết, em sẽ giới thiệu về cách tổ chức và lưu trữ tiếng nói.
I. Chọn phương pháp tổng hợp tiếng nói :
Ở phần cơ sở lý thuyết tổng hợp tiếng nói, em đã nêu bốn phương pháp
ghép âm, trong đó đáng chú ý là phương pháp ghép âm loại một và phương
pháp ghép từng từ đơn. Để đảm bảo chất lương âm cho ứng dụng, em dùng
phương pháp ghép từ đơn.
II. Chọn định dạng (format) cho file tiếng nói :
Có rất nhiều chuẩn khác nhau cho file âm thanh. Tuy nhiên nếu chọn
chuẩn cho ra tiếng nói chất lượng càng cao thì kích thước dữ liệu thu âm cũng
sẽ càng lớn. Ở đây, tiếng nói sẽ được truyền qua điện thoại nên không cần chất
lượng cao như các bài nhạc, nhưng cũng không quá thấp khiến người gọi khó
nghe. Sau khi thử nghiệm, em chọn chuẩn với các thông số như sau :
Kiểu mã hóa PCM
Số kênh 1 (mono)
Tần số lấy mẫu 11025 Hz
Số byte trên 1 giây 11025
Số byte trên 1 mẫu 1
Số bit trên một mẫu 8
III. Cách tổ chức file tiếng nói :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 56
Tiếng Việt có khoảng hơn 6000 từ đơn thông dụng. Dù tổ chức như thế
nào thì ta cũng phải thu âm cho từng từ. Ngoài ra còn có một số câu nói sẽ
được thu nguyên văn như : lời chào, lời tạm biệt, lời yêu cầu, thông báo lỗi ,
vv... Có hai cách tổ chức file tiếng nói :
1. Tổ chức thành từng file .wav :
Ta sẽ tiến hành thu âm mỗi từ thành một file .wav . Khi cần từ nào
thì phát file .wav tương ứng. Đây là cách bình thường nhất, đơn giản nhất và
dễ thực hiện nhất. Với một file .wav đúng chuẩn thì ta có thể dùng bất kỳ
chương trình thu nhạc nào để thu, và lúc phát thì cũng có rất nhiều điều khiển
hoặc hàm để phát file .wav này. Vì thế ta sẽ đỡ mất thời gian và công sức để
lập trình lại.
Tuy nhiên, với số lượng hơn 6000 từ thì đây không phải là cách giải
quyết tốt. Lý do là vì sau khi thu âm xong tất cả, ta sẽ có tổng cộng 6000 file
.wav được lưu trên đĩa cứng, chưa kể một số file .wav để thu các câu nói
nguyên văn. Với số lượng lớn các file .wav như vậy, công việc sao chép hoặc
di chuyển sẽ gặp nhiều khó khăn và mất thời gian, Ngoài ra dung lượng đĩa để
lưu trữ sẽ bị lãng phí rất nhiều vì cơ chế cấp phát dung lượng đĩa theo cluster.
Hơn hết, đối với chương trình này thì cách tổ chức này có một nhược điểm rất
lớn, đó là để đọc ra một câu nói, chương trình sẽ phải mở và đóng liên tục rất
nhiều file .wav. Điều này làm cho tiếng nói giữa các từ bị gián đoạn, không
liên tục một cách tự nhiên, đồng thời tốc độ thực hiện cũng chậm đi rất nhiều.
2. Tổ chức thành các file dữ liệu tiếng nói (chỉ lưu trữ các mẫu âm
thanh) :
Như đã giới thiệu trong phần cơ sở lý thuyết, mỗi file âm thanh sẽ
gồm 2 phần : phần header và phần dữ liệu (data) . Mặc dù ta phải thu âm từng
từ nhưng các lần thu này đều phải theo một chuẩn nhất định, hay nói cách
khác là các thông số trong phần header phải hoàn toàn giống nhau. Dựa vào
đặc điểm này, ta có thể cắt bỏ các header ra, chỉ lưu trữ các mẫu âm thanh.
Như vậy ta có thể chỉ cần 1 file duy nhất để lưu trữ các mẫu âm
thanh này. Tuy nhiên, kích thước file này sẽ lên tới hàng chục MB. Điều này
sẽ làm chậm quá trình đọc file để phát cũng như sẽ làm chậm quá trình cập
nhật hoặc xóa dữ liệu trong file này (tức là khi thu hoặc xóa 1 từ). Để giải
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 57
quyết vấn đề này, em chia thành 24 file (*.sam) tương ứng với 24 chữ cái tiếng
Anh. Mỗi file này sẽ chứa dữ liệu của các từ thuộc cùng 1 chữ cái đầu tiên (ví
dụ : “trinh”, “thành” thuộc file T.sam). Với tiếng Việt thì có thêm 1 số chữ cái
riêng như : Đ , Ă , Â , Ê, Ô , Ổ, Ở , Ú, vv.... Đây thực ra chỉ là các chữ cái cơ
bản có ghép thêm dấu vào. Vì vậy, em sắp chúng theo chữ cái cơ bản, tức là
“Đ” sẽ thuộc file D.sam , “Ă” sẽ thuộc file A.sam, “Ú” sẽ thuộc file U.sam
Song song đó, ta phải tổ chức một bảng chỉ mục (index) cho các từ
đã được thu âm. Bảng chỉ mục này sẽ gồm có 4 mục : từ được thu âm, vị trí
bắt đầu (FileOffset) , kích thước của phần dữ liệu tiếng nói (DataSize) và tên
nhóm (chữ cái cơ bản đầu tiên) ứng với từ này trong file *.sam . Thông
thường, bảng chỉ mục này sẽ được tổ chức thành một file riêng lẻ. Khi cần sẽ
mở file này, dùng một thuật toán để tìm kiếm từ đã được thu âm, sau đó đọc ra
giá trị FileOffset , DataSize và tên nhóm tương ứng. Dựa vào 3 giá trị này, ta
sẽ mở file *.sam tương ứng để đọc phần dữ liệu tiếng nói vào bộ nhớ , sau đó
phát đi cùng với một header được quy định trước. Tuy nhiên, ở chương trình
này, em sẽ ghép bảng chỉ mục này vào trong file cơ sở dữ liệu KQHT.mdb .
Khi cần ta chỉ việc dùng phương thức Seek của đối tượng Recordset để tìm từ
được thu âm và tiếp tục tương tự như trên.
Với cách tổ chức dữ liệu tiếng nói như thế này, ta đã khắc phục
được các nhược điểm mà cách trên đã mắc phải. Tuy nhiên, mọi công việc từ
thu âm, ghi vào file cho đến đọc file và phát ra âm thanh thì ta phải tự làm lấy,
có nghĩa là ta phải viết rất nhiều mã lệnh để thực hiện. Do đó sẽ mất khá nhiều
thời gian và nếu không nghiên cứu kỹ , chương trình sẽ chiếm nhiều tài
nguyên của hệ thống và có thể xảy ra xung đột, tranh chấp tài nguyên hệ
thống với các ứng dụng khác.
Mặc dù vậy, sau khi chạy thử, chương trình hoạt động khá tốt và
nhanh hơn. Đây là cách tổ chức dữ liệu tiếng nói được sử dụng trong chương
trình này.
Ngoài ra, còn có thêm một file @.sam chứa dữ liệu của các câu
thông báo, lời chảo . Sở dĩ em chọn tên “@” mà không phải một tên nào khác
là vì trong bảng mã ASCII , ký tự “@” đứng trước ký tự “A”. Nhờ đó ta có thể
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 58
đưa vào vòng lặp từ ký tự “@” tới ký tự “Z” cho một số việc nào đó (ví dụ mở
tất cả các file *.sam).
Khi người dùng đang thu lại một số từ nào đó, các file *.sam sẽ bị
thay đổi. Vì vậy, những lúc này, khi có người gọi tới, hệ thống phải thông báo
cho người gọi biết hệ thống đang bận cập nhật dữ liệu. Dữ liệu của câu thông
báo này phải để ra một file riêng (wait.sam). FileOffset và DataSize của khối
dữ liệu này cũng được lưu trong bảng chỉ mục như những khối dữ liệu khác
trong các file *.sam .
IV. Chọn phương pháp phát và thu tiếng nói :
Vì các dữ liệu tiếng nói được ta tự tổ chức và lưu trữ trong các file *.sam
nên để phát và thu thì ta chỉ có thể sử dụng các hàm multimedia cấp thấp của
Windows. Ta sẽ điều khiển toàn bộ quá trình này, từ việc cấp phát bộ nhớ ,
định vị khối dữ liệu tiếng nói trong file *.sam cho đến việc chọn thiết bị âm
thanh và phát tiếng nói đi, hoặc thu tiếng nói vào vùng đệm và lưu vào file
*.sam.
V. Đọc dữ liệu tiếng nói vào bộ nhớ :
Để phát một câu nói, ta phải tách câu đó thành các từ đơn lẻ, sau đó tìm dữ
liệu tiếng nói tương ứng của các từ đó rồi phát đi. Tuy nhiên, mỗi lần như thế
hệ thống sẽ phải thực hiện hàng loạt các công việc như khởi tạo và dọn dẹp
vùng đệm , mở và đóng thiết bị vào ra âm thanh. Vì vậy, ở đây em sẽ không
phát lần lượt từng từ mà sẽ đọc hết vào bộ nhớ rồi phát đi một lần. Nhờ đó tốc
độ và chất lượng âm thanh được cải thiện đáng kể. Các bước thực hiện như
sau :
- Mở các file *.sam bằng hàm mmioOpen()
- Tách một chuỗi thành các từ đơn
- Kiểm tra nếu từ nào là số thì chuyển thành chữ
- Tìm lần lượt các từ đó trong bảng chỉ mục đồng thời lấy ra 3 giá trị
FileOffset , DataSize và tên nhóm , nếu từ nào không có thì sẽ bỏ qua.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 59
- Lần lượt đọc vào vùng đệm dữ liệu tiếng nói của từng từ . Vùng đệm
này được tạo ra có kích thước bằng tổng kích thước của các dữ liệu tiếng nói.
Để tìm đến đúng offset trong file *.sam và đọc dữ liệu ra, ta sử dụng 2 hàm
thuộc bộ hàm multimedia : mmioSeek() và mmioRead()
VI. Phát dữ liệu tiếng nói từ vùng đệm :
Muốn phát âm thanh đi, ta phải chỉ ra thiết bị mà âm thanh sẽ xuất ra. Ở
đây, thiết bị xuất âm thanh chính là modem. Vậy trước hết, ta phải lấy giá trị
ID tương ứng cho cuộc gọi được kết nối thông qua modem. Cuộc gọi này có
handle được lưu giữ ngay khi có tín hiệu gọi đến, kết hợp với handle của line
hiện tại để truyền cho hàm lineGetID(). Giá trị ID này sẽ thay đổi tương ứng
với mỗi cuộc gọi đến. Vì vậy, ta chỉ cần thực hiện việc này một lần cho mỗi
cuộc gọi đến.
Sau khi có ID của thiết bị xuất âm thanh và vùng đệm dữ liệu tiếng nói
đã sẵn sàng, ta lần lượt gọi các hàm waveOutOpen(),
waveOutPrepareHeader(), waveOutWrite() để bắt đầu phát đi cùng với một
vài thông số của header đã nêu ở phần 2. Tất cả các hàm này đều đã được giới
thiệu trong phần cơ sở lý thuyết.
VII. Chương trình thu âm :
Mặc dù các từ tiếng Việt cũng như các lời chào và tạm biệt đã được thu
âm sẵn trước khi tới tay người sử dụng, chương trình thông báo kết quả học
tập vẫn kèm thêm một chương trình thu âm nhằm cho phép người dùng thu âm
lại nếu cần. Ngoài chức năng thu, chương trình còn cho phép phát lại hoặc xóa
bất cứ từ nào đã thu âm. Nếu một từ đã có mà ta thu lại thì từ cũ đã thu âm sẽ
bị thay bằng từ mới vừa thu âm.
Để thu âm thì người dùng cần trang bị một micro loa nối vào soundcard.
Các chức năng của chương trình thu âm :
1. Thu :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 60
- Các thông số cần cung cấp cho header hoàn toàn giống như đã
nêu ở phần 2
- Để điều khiển soundcard dùng để thu âm, ta gọi hàm
waveInOpen() với ID của thiết bị thu âm thanh sẽ được gán bằng hằng
WAVE_MAPPER và chương trình sẽ tự động chọn thiết bị thu âm thanh phù
hợp.
- Tiếp đó ta phải tạo ra vùng đệm để lưu trữ các mẫu âm thanh thu
được. Vùng đệm này có kích thước tối đa được tính như sau :
BufferSize = MaxTime * Số mẫu trên 1giây * Số byte trên 1 mẫu
Với MaxTime được quy định là 90 giây. Khi thời gian thu đến 90 giây thì
chương trình sẽ ngừng thu và ghi dữ liệu vừa thu vào file.
- Sau đó, dùng 2 hàm waveInPrepareHeader() và
waveInAddBuffer() để nạp header chuẩn bị cho việc thu. Khi đã sẵn sàng, hàm
waveInStart() sẽ bắt đầu công việc thu âm. Từ lúc này mọi âm thanh thu vào
sẽ được lưu vào vùng đệm.
- Khi ngừng thu, chương trình sẽ kiểm tra từ được nhập vào đã có
chưa, nếu có thì sẽ xóa phần dữ liệu tiếng nói cũ và ghi lại dữ liệu mới vào
cuối file *.sam tương ứng, đồng thời cập nhật lại 2 giá trị FileOffset và
DataSize trong bảng chỉ mục. Song song đó, chương trình cũng sẽ cập nhật lại
FileOffset và DataSize của các từ trong nhóm mà có FileOffset > FileOffset
của từ vừa cập nhật. Đó là vì khối dữ liệu tương ứng trong file *.sam đã bị xóa
(khối dữ liệu mới được để ở cuối file) nên toàn bộ các khối dữ liệu phía dưới
sẽ được đôn lên, dẫn đến FileOffset của các từ phía dưới thay đổi theo. Còn
FileOffset của các từ phía trên không thay đổi Như thế các FileOffset của các
từ phía dưới sẽ được cập nhật lại như sau:
FileOffset = FileOffset - DataSize của từ vừa xóa
Nếu từ này chưa có thì dữ liệu tiếng nói sẽ được ghi vào cuối file
*.sam tương ứng , đồng thời thêm từ này và 3 giá trị FileOffset , DataSize và
tên nhóm vào bảng chỉ mục. Tên nhóm sẽ là chữ cái cơ bản dựa vào ký tự đầu
tiên của từ vừa thu.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 61
- Tuy nhiên thường trước và sau khi khi thu âm sẽ có một khoảng
im lặng. Khi phát ra một câu gồm nhiều từ ghép lại, nếu khoảng im lặng này
quá lâu sẽ làm ngắt quãng câu nói. Do đó, trước khi ghi dữ liệu tiếng nói vào
file *.sam , chương trình sẽ cắt bỏ những mẫu âm thanh nào có giá trị nằm
trong khoảng 7Ah đến 86h.
2. Phát :
- Quá trình phát ở đây tương tự như quá trình phát qua điện thoại,
chỉ khác ở chỗ thiết bị xuất âm thanh là soundcard. Lúc này ID của thiết bị
phát âm thanh sẽ được gán bằng hằng WAVE_MAPPER và chương trình sẽ tự
động chọn thiết bị phát âm thanh phù hợp.
3. Xóa :
- Trước tiên chương trình sẽ đọc 2 giá trị FileOffset và DataSize
tương ứng với từ cần xóa. Dựa vào đó chương trình sẽ định vị được khối dữ
liệu tiếng nói cần loại bỏ trong file *.sam tương ứng.
- Chương trình sẽ đọc lại 2 khối dữ liệu trước và sau khối dữ liệu
cần cắt bỏ , sau đó ghi ra một file tạm, xóa file *.sam , sau đó đổi tên file tạm
trở thành *.sam đó
- Lúc này trong bảng chỉ mục, FileOffset của các từ được thu
trước đó không còn đúng so với file *.sam mới nữa. Vì vậy, ta phải tiến hành
cập nhật lại những từ nào thuộc cùng nhóm với từ vừa xóa và FileOffset có
lớn hơn FileOffset của từ vừa xóa, tương tự như trong phần thu một từ đã có.
4. Chèn khoảng im lặng :
- Có một số từ cần thêm một khoảng thời gian im lặng ở đầu hoặc
cuối từ vừa thu . Vì vậy chương trình cung cấp thêm chức năng này
- Dựa vào thời gian im lặng đầu và cuối (theo mili giây) do người
dùng nhập vào, chương trình sẽ tính toán kích thước dữ liệu mới như sau :
DataSize= DataSize + (TgDau+TgCuoi)/1000*11500
- Số mẫu âm thanh cần thêm vào đầu và cuối được tính :
SoMauDau = TgDau/1000*11500
SoMauCuoi = TgCuoi/1000*11500
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 62
- Tất cả các mẫu âm thanh được thêm vào sẽ được gán giá trị 80h.
- Bây giờ ta chỉ việc đọc khối dữ liệu tiếng nói cũ vào bộ nhớ, sau
đó xóa khối dữ liệu này trong file *.sam, cuối cùng ghi lại vào cuối file này
các mẫu im lặng đầu, khối dữ liệu tiếng nói cũ trong bộ nhớ và các mẫu im
lặng cuối. đồng thời cập nhật lại 2 giá trị FileOffset và DataSize của từ đó vào
bảng chỉ mục và FileOffset của các từ phía trước bị thay đổi.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 63
PHẦN 4
VẬN HÀNH
VÀ ĐÁNH GIÁ
HỆ THỐNG
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 64
I. Vận hành :
I.1. Chưong trình chính :
Lần đầu tiên chạy chương trình, hộp thoại cấu hình sẽ hiện ra cho người
dùng chọn modem, số tiếng chuông reo và thời gian rỗi tối đa.
Khi bắt đầu chạy, chương trình có giao diện như sau :
Đây là trạng thái của hệ thống đang tắt, nghĩa là mọi cuộc gọi tới sẽ không
được trả lời. Sau khi nhấn nút “Chờ cuộc gọi” thì hệ thống sẽ bắt đầu hoạt
động, chờ tín hiệu của cuộc gọi tới :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 65
Nếu có người gọi tới, hình ảnh minh họa tiếng chuông đang reo của chiếc
điện thoại như sau :
Sau một số tiếng chuông reo được đặt trước thì hệ thống sẽ “nhấc máy” để
trả lời người gọi :
Sau khi người gọi kết thúc cuộc gọi, hệ thống sẽ trở lại trạng thái 2, tức là
chờ đợi cuộc gọi khác.
Khi hệ thống đang hoạt động, bất kỳ lúc nào người sử dụng nhấn nút
“Dừng” thì hệ thống sẽ ngắt kết nối (nếu có) và ngừng hoạt động ngay. Tóm
lại, hệ thống sẽ ở một trong 4 trạng thái trên.
Ngoài ra, người dùng có thể mở chương trình cập nhật dữ liệu và thu tiếng
nói thông qua menu “Cập nhật dữ liệu” :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 66
I.2. Chưong trình cập nhật dữ liệu :
Chương trình chia làm 8 phần cập nhật sẽ được chọn thông qua menu :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 67
Phần “Học sinh” sẽ cho phép thêm, sửa, xóa các học sinh thuộc lớp và
năm học hiện tại được chọn :
Trong phần này, nút “Chuyển lớp” cho phép chuyển một học sinh từ lớp
hiện tại sang lớp khác. Nút “Học sinh cũ” cho phép lấy lại tất cả các học sinh
thuộc một lớp ở năm học trước. Đây chính là thời điểm bắt đầu năm học mới
nên cần cho các học sinh lên lớp sang năm học mới.
Bảy phần cập nhật còn lại sẽ có giao diện tương tự như nhau :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 68
Ở bất kỳ phần nào, người dùng có thể tìm tới một học sinh nào đó thông
qua mã số của học sinh. Ngoài ra, ở các mục như : năm học, lớp, lý do nghỉ
học, lý do vi phạm nội quy, môn học, loại kiểm tra, người dùng có thể nhấn
vào nút bên cạnh để thêm, sửa hoặc xóa tùy thích
I.3. Chưong trình thu tiếng nói :
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 69
Bên trái là bảng liệt kê các từ đã được thu sẵn. Người dùng có thể chọn
một từ trong bảng này hoặc gõ vào ô trắng bên phải để nghe hoặc thu âm lại
hoặc xóa bỏ. Để tìm nhanh một từ, người dùng gõ vào ô trắng từ cần tìm rồi
nhấn nút “Tìm” .Nếu tìm thấy, từ đó sẽ xuất hiện trong bảng liệt kê từ bên trái.
Nếu không tìm thấy, một thông báo sẽ xuất hiện.
Người dùng có thể chọn lời chào hoặc lời tạm biệt bên dưới bảng liệt kê từ
để thu âm lại nếu muốn , nhưng không cho phép xóa.
Để thu một từ (hoặc lời chào) , người dùng chỉ cần gõ từ đó vào ô trắng
(theo bảng mã tiếng Việt là VNI for Windows) hoặc chọn từ đó ở bảng liệt kê ,
sau đó nhấn nút “Thu”. Quá trình thu âm sẽ bắt đầu cho tới khi người dùng
nhấn nút “Dừng” hoặc quá 90 giây.
Để nghe lại, người dùng có thể nhấn nút “Phát”. Nếu không hài lòng thì
nhấn lại nút “Thu” và thực hiện việc thu âm lại.
Nếu nhấn nút “Xóa” thì chương trình sẽ xóa từ hiện tại trong ô trắng
Để chèn thêm một khoảng thời gian im lặng vào trước hoặc sau từ đã thu,
gõ thời gian vào 2 ô trắng (đơn vị là mili giây), sau đó nhấn nút “Thêm”
Phía dưới cùng là thanh trạng thái cho biết tiến trình thực hiện đang diễn
ra của một thao tác nào đó.
II. Đánh giá hệ thống :
Sau khi hoàn tất và chạy thử chương trình , em có một số nhận xét như sau
:
Ưu điểm :
- Chạy được trên các phiên bản Windows khác nhau
- Không đòi hỏi cấu hình máy tính cao. Chẳng hạn với cấu hình như sau,
chương trình vẫn hoạt động tốt : CPU : AMD- K5 - 100 MHz ; RAM : 48 MB
; MODEM : Motorola 56K - Internal
- Chương trình sử dụng giao tiếp là modem để hoạt động nên người dùng
chỉ cần trang bị một modem (internal/external) với giá không quá cao.
- Có khả năng đọc được hầu hết những từ tiếng Việt thông dụng
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 70
- Cho phép cập nhật dữ liệu của học sinh ngay khi hệ thống đang hoạt
động
- Cho phép thu lại tiếng nói của người dùng
Hạn chế :
- Vì chương trình sử dụng giao tiếp là modem nên tại một thời điểm, hệ
thống chỉ tiếp nhận được một cuộc gọi. Tuy nhiên, hệ thống chỉ hoạt động
trong một trường học nên điều này có thể chấp nhận được.
- Cơ sở dữ liệu được cài đặt bằng Access nên chưa được mã hóa để bảo
mật
- Vì thời gian có hạn nên tiếng nói thu vào chưa được lọc để đạt chất
lượng cao hơn
- Bảng chỉ mục chưa được tối ưu
Hướng phát triển :
- Hỗ trợ telephony card nhằm kết nối với nhiều cuộc gọi tới ở cùng thời
điểm.
- Mã hóa cơ sở dữ liệu Access hoặc thay thế bằng hệ quản trị cơ sở dữ
liệu khác như Oracle, SQL Server, ... để tăng cường khả năng bào mật
- Mở rộng chương trình cập nhật dữ liệu ở dạng bảng (lưới) nhằm cho
phép thấy nhiều mẫu tin cùng lúc
- Thêm một số chức năng cho chương trình thu âm để người dùng linh
động hơn trong việc thu tiếng nói như : giảm độ ồn, chỉnh sửa trực tiếp sóng
âm thanh ở dạng đồ họa, ...
- Tạo lại bảng chỉ mục để tìm kiếm nhanh hơn
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 71
PHẦN 5
KẾT LUẬN
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 72
Chương trình “Thông báo kết quả học tập của học sinh qua điện thoại”
đã được hoàn thiện, có thể cài đặt để chạy trên bất kỳ hệ điều hành Windows
32-bit nào. Với những yêu cầu đặt ra của đề tài, chương trình đã giải quyết
được và cho ra kết quả như mong muốn. Chương trình này có thể ứng dụng
cho các trường học phổ thông.
Đề tài “Thông báo kết quả học tập của học sinh qua điện thoại” là một
đề tài rất hay và thiết thực. Trong quá trình nghiên cứu, tìm hiểu, em đã có dịp
ôn lại rất nhiều kiến thức đã học như : phân tích thiết kế hệ thống thông tin
quản lý, cài đặt, kết nối và truy xuất cơ sở dữ liệu, tạo và xử lý file âm thanh
và các kỹ thuật lập trình trong Visual Basic. Song song đó, em cũng được biết
thêm nhiều điều mới như các kiến thức liên quan đến lập trình giao tiếp giữa
điện thoại và máy tính (TAPI), lập trình giao tiếp với multimedia. Từ những
kiến thức thu thập được , em đã hiểu được phần nào về hoạt động của các hộp
thư thoại ( voice mail) và các hệ thống trả lời tự động (answering machine)
mà hiện nay được sử dụng rất nhiều.
Tuy đề tài đã được khép lại nhưng vẫn còn nhiều vấn đề cần được nghiên
cứu và phát triển thêm nhằm mở rộng chương trình như : sử dụng telephony
card để trả lời nhiều cuộc gọi ở cùng thời điểm, mở rộng cơ sở dữ liệu và tăng
cường chức năng bảo mật, xử lý nhiều hơn tiếng nói được thu vào nhằm cho
chất lượng cao hơn, vv... Đó là những mục tiêu phát triển mà bất cứ một
chương trình nào cũng có.
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 73
PHỤ LỤC
MÃ NGUỒN
THỰC HIỆN
MỘT SỐ
CÔNG VIỆC
CHÍNH
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 74
1. CHƯƠNG TRÌNH CHÍNH
Mở cơ sở dữ liệu :
'Mo CSDL san sang cho viec tra loi
'Tra ve True neu mo thanh cong
Private Function Open_Database() As Boolean
'Load database
If File_Exist(SourcePath + "KQHT.mdb") Then
Set DB = OpenDatabase(SourcePath + DBName)
Set VRS = DB.OpenRecordset("tblVOICEINDEX", dbOpenTable)
VRS.Index = "idxChuoi"
Open_Database = True
Else
Open_Database = False
End If
End Function
Đóng cơ sở dữ liệu :
Private Sub Close_Database()
VRS.Close
DB.Close
End Sub
Khởi tạo TAPI :
'Khoi tao TAPI
'Tra ve False neu co loi
Private Function Init_TAPI() As Boolean
Dim Loi As Long
Loi = lineInitialize(hTAPI, App.hInstance, AddressOf LineCallBack,
App.EXEName, TotalLines)
If Loi < 0 Then
MsgBox "Không thể khởi tạo thư viện TAPI !", vbCritical, Title
Init_TAPI = False
Else
Init_TAPI = True
End If
End Function
Chờ cuộc gọi tới :
'Cho doi 1 cuoc goi toi
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 75
'Tra ve thong bao loi neu co
Public Function Wait_Call() As String
Dim Loi As Long
Wait_Call = vbNullString
'Mo Line
If Not Open_Line() Then
Wait_Call = "Không thể dùng modem được chọn !"
Exit Function
End If
'Dang ky cac Message cho Line
Loi = lineSetStatusMessages(hLine, ALL_TAPIMESSAGES, 0)
If Loi < 0 Then
Wait_Call = "Không thể tạo sự kiện để nhận cuộc gọi !"
Call Close_Line
Exit Function
End If
frmKQHT.imgStatus.Picture = LoadResPicture("System_On", vbResBitmap)
'Function lineCallBack se duoc goi khi chuong reo
End Function
Mở line hiện tại :
'Mo Line hien tai voi CurLineID
‘Tra ve True neu thanh cong
Private Function Open_Line() As Boolean
Dim Loi As Long
Dim NegoVersion As Long 'Version lay duoc sau khi Negotiate
Dim plineExtenID As lineExtensionID
Call lineNegotiateAPIVersion(hTAPI, CurLineID, LOW_TAPIVERSION,
HIGH_TAPIVERSION, NegoVersion, plineExtenID)
If lineOpen(hTAPI, CurLineID, hLine, NegoVersion, Unused, _
Unused, LINECALLPRIVILEGE_OWNER, _
LINEMEDIAMODE_AUTOMATEDVOICE, Unused) < 0 Then 'Error
Open_Line = False
Else
Open_Line = True
End If
End Function
Ngắt kết nối của cuộc gọi hiên tại :
'Ngat ket noi cuoc goi hien tai
Public Sub Disconnect()
If Playing Then
Call Stop_Playing
Call Wait
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 76
End If
Call Drop_Call
Call Close_Line
' Dong file wave sau khi doc xong du lieu file wave
If Not frmKQHT.mnuRecord.Checked Then Call Close_VoiceFiles
frmKQHT.mnuRecord.Enabled = True
'Neu KHONG phai do nhan nut STOP de disconnect thi
'tao Line moi de nhan cuoc goi khac
If frmKQHT.cmdStop.Tag "clicked" Then Call Wait_Call
End Sub
Hủy và giải phóng cuộc gọi hiện tại :
'Huy bo cuoc goi hien tai
Private Sub Drop_Call()
If hCall 0 Then
Call lineDrop(hCall, "", 0)
Call lineDeallocateCall(hCall)
hCall = 0
End If
End Sub
Đóng line hiện tại :
'Dong Line hien tai
Private Sub Close_Line()
If hLine 0 Then
Call lineClose(hLine)
hLine = 0
End If
End Sub
Kết thúc TAPI :
Private Sub ShutDown_TAPI()
Call lineShutdown(hTAPI)
End Sub
Tiếp nhận các sự kiện của TAPI :
'Xu ly cac su kien TAPI
Public Function LineCallBack(ByVal dwDevice As Long, ByVal dwMsg As
Long, ByVal dwCallbackInstance As Long, ByVal dwParam1 As Long, ByVal
dwParam2 As Long, ByVal dwParam3 As Long) As Long
On Error GoTo Thoat
Select Case dwMsg
Thông báo kết quả học tập của học sinh qua điện thoại GVHD : Nguyễn Đức Thuần
SVTH : Bùi Danh Đạt Trang 77
Case LINE_LINEDEVSTATE 'Thong diep cho trang thai cua LINE
Call LineDevStateProc(dwDevice, dwCallbackInstance, dwParam1,
dwParam2, dwParam3)
Case LINE_CALLSTATE 'Thong diep cho trang thai cua CALL
Call LineCallStateProc(dwDevice, dwCallbackInstance, dwParam1,
dwParam2, dwParam3)
Case LINE_MONITORDIGITS 'Thong diep cho tin hieu DTMF gui toi
Call Receive_DTMF(dwParam1)
End Select
Exit Function
Thoat:
Call Disconnect
End Function
Tiếp nhận các sự kiện liên quan đến cuộc gọi (call) :
'Xu ly cac su kien trang thai cua CALL
'hCall = dwDevice
'hCallback = hCallbackInstance
'CallState = dwParam1
Private Sub LineCallStateProc(ByVal dwDevice As Long, ByVal
hCallbackInstance As Long, ByVal dwParam1 As Long, ByVal dwParam2 As
Long, ByVal dwParam3 As Long)
Select Case dwParam1
Case LINECALLSTATE_OFFERING: 'Tin hieu co cuoc goi toi
hCall = dwDevice
Case LINECALLSTATE_CONNECTED:
Call After_Connected
Case LINECALLSTATE_DISCONNECTED: 'Xay ra khi cuoc goi bi ngat
Call Disconnect
Case LINECALLSTATE_IDLE
Call Disconnect
End Select
End Sub
Tiếp nhận các sự kiện liên quan đến line :
'Xu ly cac su lien trang thai cua LINE
'hLine = dwDevice
'hCallback = hCallbackInstance
'DeviceState = dwParam1
Thông báo kết quả họ
Các file đính kèm theo tài liệu này:
- Báo cáo thực tập- Thông báo kết quả học tập của học sinh qua điện thoại.pdf