Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 114 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
114
Dung lượng
2,42 MB
Nội dung
Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần LỜI NÓI ĐẦU Trong gia đình, bậc cha mẹ có cắp sách tới trường lúc quan tâm đến việc học Chẳng hạn bữa có lên trả hay khơng? Các kiểm tra tháng điểm? Kết thi cuối học kỳ sao? Và kể việc muốn biết có nghỉ học bữa khơng có vi phạm nội quy trường hay không lý sao? Thông thường, gia đình biết chuyện sau nhà trường phát sổ liên lạc nhà Ngày nay, với phát triển liên tục ngành máy tính, ta tự động hóa cơng việc cách kết nối máy tính với điện thoại hệ thống trả lời tự động Khi phụ huynh gọi điện thoại tới số máy này, hệ thống thông báo kết học tập học sinh Điều thật thuận lợi, nhanh chóng dễ dàng, thực lúc nơi Tuy đề tài hoàn thành chắn khơng tránh khỏi thiếu sót Em mong quan tâm, giúp đỡ góp ý thầy, cô bạn Cuối cùng, em xin cảm ơn thầy cô môn Công nghệ thông tin dành cho em đề tài đặc biệt thầy Nguyễn Đức Thuần, người trực tiếp gợi ý hướng dẫn, giúp em hoàn thành đề tài Sinh viên thực Bùi Danh Đạt SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần PHẦN GIỚI THIỆU Đ Ề TÀ I SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần I Đặt vấn đề : Hiện nay, thông thường học sinh cắp sách tới trường phát cho sổ liên lạc Nhà trường sử dụng sổ để thông báo cho phụ huynh học sinh biết kết học tập học sinh sau tháng sau học kỳ Trong sổ liên lạc, nhà trường thường ghi kết cuối tháng học kỳ Do phụ huynh biết chi tiết cột điểm mơn học tháng Ngồi ra, lần nghỉ học lần vi phạm nội quy học sinh không ghi vào Vì bậc phụ huynh khó theo dõi chặt chẽ diễn biến học tập trường Cơng việc giáo dục học sinh cần phải có phối hợp gia đình nhà trường Nhằm tạo thuận lợi cho bậc phụ huynh nắm bắt thông tin học sinh cách nhanh chóng, đầy đủ, đề tài tốt nghiệp này, em tìm hiểu viết chương trình tự động thông báo kết học tập học sinh qua điện thoại Em nhận thấy có vấn đề sau đặt cần giải : Nhận tín hiệu gọi tới từ điện thoại , tạo kết nối máy tính gọi nhận biết phím bấm từ máy điện thoại người gọi để thực u cầu người Tìm kết sở liệu Thơng báo giọng nói cho người gọi nghe Vấn đề phải tạo giao tiếp điện thoại máy tính thơng qua modem Và để truyền tín hiệu tiếng nói từ máy tính đến điện thoại, modem phải có hỗ trợ chức “voice“ Máy tính lúc đồng thời đóng vai trị máy điện thoại nhân viên trường học Người gọi sử dụng điện thoại để gọi tới Lúc máy tính tự động “nhấc máy” đối thoại với người gọi Vấn đề thứ hai giải cách sử dụng câu lệnh truy vấn (SQL) mà thao tác với sở liệu cần phải có SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Vấn đề cuối áp dụng công nghệ “text-to-speech” để chuyển từ chữ máy tính sang tiếng nói, sau truyền qua điện thoại tới người gọi Tất vấn đề trình bày chi tiết phần sau II Môi trường lập trình : Chương trình “Thơng báo kết học tập qua điện thoại” viết ngôn ngữ lập trình Visual Basic 6.0 hệ điều hành Microsoft Windows 98 Hệ quản trị sở liệu dùng để cài đặt sở liệu Microsoft Access 97 III Giới thiệu hoạt động chương trình : Chương trình thiết kế để thơng báo vấn đề liên quan đến đến học tập đạo đức thường gặp học sinh Khi người gọi điện tới, hệ thống yêu cầu nhập vào mã số học sinh Sau đó, hệ thống đưa menu để chọn lựa vấn đề quan tâm Người gọi muốn nghe thông tin cần nhấn phím tương ứng với mục sau : Phím # Ý nghĩa Thay đổi mã số học sinh Nghe thông tin lần nghỉ học tháng (ngày nghỉ học, số ngày nghỉ, có phép/khơng phép, lý do) Nghe thơng tin lần vi phạm nội quy tháng (ngày vi phạm, lý do) Nghe điểm kiểm tra môn học tháng Nghe điểm thi môn học cuối học kỳ Nghe kết cuối tháng (điểm trung bình, hạng, học lực, hạnh kiểm) Nghe kết cuối học kỳ (điểm trung bình, hạng, học lực, hạnh kiểm) Nghe kết cuối năm học (điểm trung bình, hạng, học lực, hạnh kiểm) SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại * GVHD : Nguyễn Đức Thuần Nghe thông tin chi tiết học sinh mang mã số (họ, tên, ngày sinh, giới tính, nơi sinh, tên lớp học năm học chọn) Chọn năm học khác (năm học mặc định năm học tại) Kết thúc gọi Nếu người gọi nhấn phím 1, 2, 3, yêu cầu nhập vào tháng muốn biết Nếu nhấn phím hay yêu cầu nhập vào học kỳ muốn biết Bất lúc nào, người gọi nhấn phím * để trở menu Muốn kết thúc gọi, ngồi cách nhấn phím * menu chọn lựa, người gọi gác máy bình thường, lúc hệ thống tự phát , ngắt kết nối với gọi tiếp tục chờ gọi khác đến Nếu hệ thống phát sau khoảng thời gian định trước (thời gian rỗi) mà khơng có tác động từ phía người gọi hệ thống tự động ngắt kết nối SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần PHẦN C Ơ SỞ LÝ THUYẾT SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Chương GIAO TIẾP GIỮA ĐIỆN THOẠI VÀ MÁY TÍNH I Sự cần thiết modem : Như biết kỹ thuật điện thoại đời phát triển sớm trước kỹ thuật máy tính Ngày đó, đường dây điện thoại thiết kế để truyền tín hiệu tiếng nói có tần số âm Dạng tín hiệu thuộc loại tín hiệu tương tự (analog) thường gọi sóng âm tần hình sin Trong đó, máy tính xử lý tín hiệu số (digital) có tần số cao Nếu tín hiệu số truyền trực tiếp đường dây điện thoại chúng bị suy giảm biến dạng Vì thế, thiết bị chuyển đổi qua lại hai tín hiệu đời, gọi modem Cơng việc chuyển tín hiệu số máy tính thành tín hiệu tương tự đường dây điện thoại thực số phương pháp mà người ta gọi điều chế (Modulation) Ngược lại, cơng việc chuyển tín hiệu tương tự đường dây điện thoại thành tín hiệu số máy tính thực số phương pháp mà người ta gọi giải điều chế (Demodulation) Modem viết tắt chữ Modulation Demodulation Ứng dụng modem mà thường thấy kết hợp với máy tính để truy cập internet Trong trường hợp này, đầu đường dây điện thoại nối vào modem gắn vào máy tính Nhờ truy xuất liệu máy (máy chủ) Còn đây, cơng việc thơng báo qua điện thoại từ máy tính, ta cần nối đầu dây điện thoại vào modem gắn với máy tính trường học Người gọi sử dụng điện thoại để gọi tới Lúc tín hiệu từ đường dây điện thoại modem chuyển đổi thành tín hiệu số đưa vào máy tính để xử lý Sau máy tính phát trở lại tín hiệu số (ví dụ tiếng nói dạng số) cho modem để SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần modem chuyển đổi thành tín hiệu tương tự (tiếng nói dạng tương tự) truyền ngược trở lại người gọi Nhờ , người gọi nghe 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 mô hình TAPI : II.1.1 TAPI ? TAPI phát triển kết hợp hai hãng Intel Microsoft TAPI thiết kế để truy xuất dịch vụ điện thoại tất hệ điều hành Windows Nói cách khác, TAPI tập hợp hàm đơn lẻ Windows cung cấp để hỗ trợ cho việc lập trình giao tiếp điện thoại máy tính thơng qua modem thiết bị truyền thơng Với TAPI , người lập trình khơng phải lo lắng tập lệnh modem để khởi tạo phải chọn cổng hoạt động cho modem Mục đích TAPI cho phép nhà lập trình viết ứ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, hãng nào, tập lệnh của modem gì, sử dụng cổng nối tiếp hay song song hay cổng USB, cần thiết bị phần cứng có TAPI driver gọi TSP(Telephone Service Provider) nhà sản xuất cung cấp, mà thường cài thiết bị phần cứng vào máy tất driver cài vào Do cần thiết bị hoạt động tốt ứng dụng TAPI khơng gặp vấn đề TAPI hỗ trợ 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ợ kiểu kết nối phức tạp kỹ thuật quản lý gọi như: tạo gọi, chờ gọi , hộp thư thoại, vv Các ứng dụng viết TAPI truy cập trực tiếp vào dịch vụ đường dây điện thoại Các ứng dụng phát nhận vào tín hiệu đ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ố ta cần thiết bị giao tiếp máy tính đường dây điện thoại Dĩ SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần nhiên, thiết bị giao tiếp phải có hỗ trợ TAPI TSP Thiết bị trạm ISDN , bảng mạch hệ thống điện thoại đơn giản modem II.1.2 Chương trình ứng dụng TAPI : Ứng dụng TAPI ứ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 cơng việc Ví dụ : phần mềm giả lập điện thoại 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 với TAPI Server (Tapisvr.exe) trừu tượng hóa việc phân cách người dùng 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 giao tiếp lớp (xem mơ hình lập trình cho hệ thống điện thoại phần sau) Có thư viện liên quan tới TAPI : Tapi.dll, Tapi32.dll, Tapi3.dll Mỗi thư viện có vài trị : SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại Ứng dụng TAPI 16-bit Ứng dụng TAPI 32-bit Tapi.dll Tapi32.dll GVHD : Nguyễn Đức Thuần Ứng dụng TAPI3 32-bit Tapi3.dll Tapi32.dll TAPISVR.EXE MSP Registry TSP Telephony Control Panel, Dialing Properties, vv Mỗi thư viện tương ứng với thời điểm phiên TAPI Các ứng dụng 16-bit liên kết với Tapi.dll Trong Windows 98/NT/2000, Tapi.dll hoạt động cách ánh xạ địa 16-bit tới địa 32-bit , đồng thời chuyển yêu cầu tới Tapi32.dll Với ứng dụng 32-bit chúng liên kết với Tapi32.dll (TAPI phiên 1.4 - 2.2) Với TAPI 3.0 3.1 ứng dụng liên kết với Tapi3.dll II.1.4 MSP (Media Service Provider ) : Trước hết MSP đến với TAPI 3, cho phép việc điều khiển ứng dụng qua phương tiện với chế vận chuyển đặc biệt Một MSP luôn tồn song song với 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 giao tiếp luồng định nghĩa TAPI SVTH : Bùi Danh Đạt Trang 10 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần + " FROM tblKQTHANG " _ + " WHERE (tblKQTHANG.MaHS ='" + txtMaHS + "')" _ + " AND (MaNH='" + frmMain.DBcboNH.BoundText + "')" _ + " ORDER BY TenThang" Set rsKQThang = DB.OpenRecordset(SQL) Load_KQ = Not rsKQThang.EOF End Function Nạp kết kiểm tra : 'Chon cac ket qua cua hoc sinh hien tai Private Function Load_KQ() As Boolean Dim SQL As String SQL = "SELECT tblKQKIEMTRA.MaHS, tblKQKIEMTRA.ThangKT, tblKQKIEMTRA.MaMH, " _ + " tblKQKIEMTRA.MaNH , tblKQKIEMTRA.DiemKT, " _ + " tblKQKIEMTRA.MaLoaiKT, tblKQKIEMTRA.LanKT " _ + " FROM tblKQKIEMTRA " _ + " WHERE (tblKQKIEMTRA.MaHS ='" + txtMaHS + "')" _ + " AND (MaNH='" + frmMain.DBcboNH.BoundText + "')" _ + " ORDER BY ThangKT, MaMH, MaLoaiKT, LanKT" Set rsKT = DB.OpenRecordset(SQL) Load_KQ = Not rsKT.EOF End Function Nạp kết thi : 'Chon cac ket qua cua hoc sinh hien tai Private Function Load_KQ() As Boolean Dim SQL As String SQL = "SELECT tblKQTHI.MaHS, tblKQTHI.HKThi, tblKQTHI.MaMH, " _ + " tblKQTHI.MaNH , tblKQTHI.DiemThi " _ + " FROM tblKQTHI " _ + " WHERE (tblKQTHI.MaHS ='" + txtMaHS + "')" _ + " AND (MaNH='" + frmMain.DBcboNH.BoundText + "')" _ + " ORDER BY HKThi, MaMH" Set rsThi = DB.OpenRecordset(SQL) Load_KQ = Not rsThi.EOF End Function Nạp lần nghỉ học : 'Chon cac ket qua cua hoc sinh hien tai Private Function Load_KQ() As Boolean Dim SQL As String SQL = "SELECT tblNGHIHOC.MaHS, tblNGHIHOC.NgayNH, tblNGHIHOC.SoNgayNH, " _ + " tblNGHIHOC.GiayPhep , tblNGHIHOC.MaLD " _ SVTH : Bùi Danh Đạt Trang 100 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần + " FROM tblNGHIHOC " _ + " WHERE (tblNGHIHOC.MaHS ='" + txtMaHS + "')" _ + " ORDER BY NgayNH " Set rsNgH = DB.OpenRecordset(SQL) Load_KQ = Not rsNgH.EOF End Function Nạp lần vi phạm : 'Chon cac ket qua cua hoc sinh hien tai Private Function Load_KQ() As Boolean Dim SQL As String SQL = "SELECT tblVIPHAM.MaHS, tblVIPHAM.NgayVP, " _ + " tblVIPHAM.LanVP, tblVIPHAM.MaLoi " _ + " FROM tblVIPHAM " _ + " WHERE (tblVIPHAM.MaHS ='" + txtMaHS + "')" _ + " ORDER BY NgayVP, LanVP " Set rsVP = DB.OpenRecordset(SQL) Load_KQ = Not rsVP.EOF End Function SVTH : Bùi Danh Đạt Trang 101 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần CHƯƠNG TRÌNH THU TIẾNG NĨI Tạo vùng đệm để thu âm : 'Chuan bi vung dem va header de thu Private Function Prepare_Buffer(BufferSize As Long) As Boolean Dim Loi As Long Dim hData As Long 'Cap phat bo nho de luu cac mau am hData = GlobalAlloc(GPTR, BufferSize) If hData = Then MsgBox "Không thể cấp phát nhớ !", vbCritical, "Thu" Prepare_Buffer = False Exit Function End If 'Tro toi vung nho vua cap phat pWaveHeader.lpData = GlobalLock(hData) If pWaveHeader.lpData = Then MsgBox "Không thể lấy địa vùng nhớ cấp phát !", vbCritical, "Thu" hData = GlobalFree(hData) Prepare_Buffer = False Exit Function End If pWaveHeader.dwBufferLength = BufferSize Loi = waveInPrepareHeader(hWaveIn, pWaveHeader, Len(pWaveHeader)) If Loi Then MsgBox "Lỗi : waveInPrepareHeader", vbCritical, "Thu" hData = GlobalFree(hData) Prepare_Buffer = False Exit Function End If Loi = waveInAddBuffer(hWaveIn, pWaveHeader, Len(pWaveHeader)) If Loi Then MsgBox "Lỗi : waveInAddBuffer", vbCritical, "Thu" hData = GlobalFree(hData) Call waveInUnprepareHeader(hWaveIn, pWaveHeader, Len(pWaveHeader)) Prepare_Buffer = False Exit Function End If 'Luu handle cua vung nho cac sample SVTH : Bùi Danh Đạt Trang 102 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần pWaveHeader.dwUser = hData Prepare_Buffer = True End Function Thu âm : 'Bat dau thu am Public Sub Start_Record() Dim BufferSize As Long Dim Loi As Long With pWaveFormat cbSize = nAvgBytesPerSec = BytesPerSec nBlockAlign = nChannels = nSamplesPerSec = BytesPerSec wBitsPerSample = wFormatTag = End With BufferSize = MaxTime * pWaveFormat.nSamplesPerSec '=Tong so sample = Tong so byte bo nho can cap phat Loi = waveInOpen(hWaveIn, SoundCard, pWaveFormat, AddressOf waveInProc, 0, CALLBACK_FUNCTION) If Loi Then MsgBox "Lỗi : waveInOpen", vbCritical, "Thu" Call Enable_Buttons(True) Exit Sub End If If Prepare_Buffer(BufferSize) = False Then Call waveInClose(hWaveIn) Call Enable_Buttons(True) Exit Sub End If 'Loi 'Bat dau thu Loi = waveInStart(hWaveIn) If Loi Then MsgBox "Lỗi : waveInStart", vbCritical, "Thu" Loi = waveInClose(hWaveIn) Call Enable_Buttons(True) Exit Sub End If 'Sub waveInProc will be called when finish recording End Sub SVTH : Bùi Danh Đạt Trang 103 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Tiếp nhận kiện thiết bị thu âm : 'This sub will be called when finish recording Private Sub waveInProc(ByVal hwi As Long, ByVal uMsg As Long, ByVal dwInstance As Long, ByRef dwParam1 As Long, ByVal dwParam2 As Long) Select Case uMsg Case MM_WIM_DATA frmRecord.Timer1.Enabled = True End Select End Sub Lưu liệu tiếng nói vào file *.sam : 'Ghi du lieu am vao file Private Function Save_Voice() As Boolean Dim FileNum As Long, arrData() As Byte Dim Loi As Long Dim Res As VbMsgBoxResult Save_Voice = False 'Dinh vtri o cuoi file de ghi If Dir(SourcePath + VoiceFName, vbNormal) = vbNullString Then NewFileOffset = 'Offset bat dau tu de ghi AddNew = True Else 'Ghi tiep vao file da co roi RS.Seek "=", Trim(txtChuoi) If RS.NoMatch = False Then 'Neu da thu roi thi xoa, sau thu lai Res = MsgBox("Từ thu Bạn có muốn thu lại ?", vbQuestion + vbYesNo + vbDefaultButton2, "Thu") If Res = vbNo Then Exit Function proBar.Max = proBar.Max + Call Remove_Voice(RS!FileOffset, RS!DataSize) AddNew = False Else AddNew = True End If NewFileOffset = FileLen(SourcePath + VoiceFName) + 'Di chuyen toi cuoi file End If 'Chuyen du lieu vao mang NewDataSize = pWaveHeader.dwBytesRecorded ReDim arrData(NewDataSize - 1) CopyMemory arrData(0), pWaveHeader.lpData, NewDataSize proBar.Value = proBar.Value + 'Cat bo silence o dau va cuoi Call Truncate(arrData()) SVTH : Bùi Danh Đạt Trang 104 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần NewDataSize = UBound(arrData) + proBar.Value = proBar.Value + 'Ghi vao file FileNum = FreeFile Open SourcePath + VoiceFName For Binary Access Write As #FileNum Put #FileNum, NewFileOffset, arrData() Close #FileNum proBar.Value = proBar.Value + Save_Voice = True End Function Cập nhật lại bảng mục sau xóa : 'Update FileOffset sau remove Voice 'Update all FileOffset > Current FileOffset Private Sub Update_Index(OldFileOffset As Long, OldDataSize As Long) Dim SQL As String SQL = "UPDATE tblVOICEINDEX SET FileOffset=FileOffset - " _ & OldDataSize & " WHERE (Nhom = '" + Nhom + "')" _ & " AND (FileOffset > " & OldFileOffset & ")" DB.Execute SQL End Sub Ghi vào bảng mục sau thu xong : 'Ghi index cua am vua thu vao CSDL Private Sub Write_Index() If AddNew = True Then RS.AddNew RS!Chuoi = txtChuoi.Tag RS!Nhom = Nhom Else RS.Edit End If RS!FileOffset = NewFileOffset - 'Offset bat dau tu doc de phat RS!DataSize = NewDataSize RS.Update End Sub Lấy thông tin từ thu từ bảng mục : 'Lay FileOffset va DataSize CSDL Public Function Get_Offset_Size(ByRef FileOffset As Long, ByRef DataSize As Long) As Boolean RS.Seek "=", frmRecord.txtChuoi.Tag If RS.NoMatch Then Get_Offset_Size = False SVTH : Bùi Danh Đạt Trang 105 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần MsgBox "Chuỗi chưa thu !", vbCritical, Title Else FileOffset = RS!FileOffset DataSize = RS!DataSize Get_Offset_Size = True End If End Function Thêm khoảng thời gian im lặng: 'Chen them khoang im lang vao dau/cuoi loi noi Private Sub Insert_Silence() Dim FileOffset As Long, DataSize As Long Dim BeforeSize As Long, AfterSize As Long 'So byte im lang can dung truoc va sau Dim i As Long Dim FileNum As Integer Dim arrData() As Byte, arrTemp() As Byte 'Tinh kich thuoc du lieu BeforeSize = Val(txtBefore) * BytesPerSec \ 1000 'Thoi gian theo milisecond AfterSize = Val(txtAfter) * BytesPerSec \ 1000 If (BeforeSize = 0) And (AfterSize = 0) Then GoTo Thoat If Get_Offset_Size(FileOffset, DataSize) = False Then GoTo Thoat NewDataSize = BeforeSize + DataSize + AfterSize 'se ghi vao CSDL ReDim arrData(NewDataSize - 1) Call Fill_Silence(arrData(), BeforeSize, AfterSize) 'Doc du lieu vao mang ReDim arrTemp(DataSize - 1) FileNum = FreeFile Open SourcePath + VoiceFName For Binary Access Read As #FileNum Get #FileNum, FileOffset + 1, arrTemp Close FileNum For i = To DataSize - arrData(BeforeSize + i) = arrTemp(i) Next proBar.Value = proBar.Value + 'Xoa bo doan du lieu cu CSDL Call Remove_Voice(FileOffset, DataSize) proBar.Value = proBar.Value + 'Ghi lai du lieu vao cuoi file voice FileNum = FreeFile Open SourcePath + VoiceFName For Binary Access Write As #FileNum NewFileOffset = LOF(FileNum) + Put #FileNum, NewFileOffset, arrData SVTH : Bùi Danh Đạt Trang 106 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Close #FileNum proBar.Value = proBar.Value + 'Cap nhat vao CSDL AddNew = False Call Write_Index 'Cap nhat Thoat: End Sub Xóa đoạn âm thu : 'Loai bo doan am da co 'Offset danh tu ghi file va danh tu doc file de phat Private Sub Remove_Voice(OldFileOffset As Long, OldDataSize As Long) Dim FileNum_R, FileNum_W As Long Dim DataSize1 As Long, DataSize2 As Long Dim arrData() As Byte 'Mo file OldFileOffset = OldFileOffset + 'Offset danh tu FileNum_R = FreeFile Open SourcePath + VoiceFName For Binary Access Read As #FileNum_R FileNum_W = FreeFile Open SourcePath + NewFName For Binary Access Write As #FileNum_W 'Tinh kich thuoc doan du lieu dau va cuoi DataSize1 = OldFileOffset - DataSize2 = FileLen(SourcePath + VoiceFName) - DataSize1 - OldDataSize 'Doc va ghi lai doan du lieu dau If DataSize1 > Then 'Neu khong phai la first record ReDim arrData(DataSize1 - 1) Get #FileNum_R, , arrData Put #FileNum_W, , arrData End If proBar.Value = proBar.Value + 'Doc va ghi lai doan du lieu cuoi If DataSize2 > Then 'Neu khong phai la last record ReDim arrData(DataSize2 - 1) Get #FileNum_R, OldFileOffset + OldDataSize, arrData Put #FileNum_W, , arrData End If Close #FileNum_R Close #FileNum_W 'Xoa file cu va doi ten file moi SVTH : Bùi Danh Đạt Trang 107 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Kill SourcePath + VoiceFName Name SourcePath + NewFName As SourcePath + VoiceFName proBar.Value = proBar.Value + 'Update index table Call Update_Index(OldFileOffset - 1, OldDataSize) End Sub Nạp liệu tiếng nói vào nhớ để phát : 'Load data from database into memmory Private Function Loaded_VoiceFile() As Boolean Dim FileOffset As Long, DataSize As Long, hFile As Long, Loi As Long Dim pmmIOInfo As mmIOInfo 'Tim thong tin chuoi CSDL If Get_Offset_Size(FileOffset, DataSize) = False Then Call Enable_Buttons(True) Exit Function End If 'Ktra file voice co khong ? If File_Exist(SourcePath + VoiceFName) = False Then Call Enable_Buttons(True) Exit Function End If 'Mo file Voice de doc du lieu hFile = mmioOpen(SourcePath + VoiceFName, pmmIOInfo, MMIO_READ) Loi = mmioSeek(hFile, FileOffset, SEEK_SET) If Loi = -1 Then MsgBox "File '" + SourcePath + VoiceFName + "' không hợp lệ !", vbCritical, "Phát" Call mmioClose(hFile, 0) Call Enable_Buttons(True) Exit Function End If 'Cap phat bo nho hMem = GlobalAlloc(GMEM_ZEROINIT, DataSize) pWaveBuffer = GlobalLock(hMem) 'Doc du lieu voice Loi = mmioRead(hFile, pWaveBuffer, DataSize) If Loi = -1 Then MsgBox "Không đọc file '" + SourcePath + VoiceFName + "'", vbCritical, "Phát" hMem = GlobalFree(hMem) Call mmioClose(hFile, 0) SVTH : Bùi Danh Đạt Trang 108 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Call Enable_Buttons(True) Exit Function End If ' Dong file wave sau doc xong du lieu file wave Loi = mmioClose(hFile, 0) 'Set format for playing TotalSamples = DataSize With pWaveFormat cbSize = nAvgBytesPerSec = BytesPerSec nBlockAlign = nChannels = nSamplesPerSec = BytesPerSec wBitsPerSample = wFormatTag = End With Loaded_VoiceFile = True End Function Phát tiếng nói : 'Bat dau phat Private Sub Start_Playing() Dim Loi As Long Dim ErrMsg As String * 200 Loi = waveOutOpen(hWaveOut, SoundCard, pWaveFormat, AddressOf waveOutProc, 0, CALLBACK_FUNCTION) If Loi Then hMem = GlobalFree(hMem) Call waveOutGetErrorText(Loi, ErrMsg, Len(ErrMsg)) MsgBox "Lỗi : waveOutOpen : " & ErrMsg, vbCritical, "Phát" Call waveOutClose(hWaveOut) Call Enable_Buttons(True) Exit Sub End If 'Chuan bi header cua am de phat pWaveHeader.lpData = pWaveBuffer pWaveHeader.dwBufferLength = TotalSamples * pWaveFormat.nBlockAlign pWaveHeader.dwFlags = pWaveHeader.dwLoops = Loi = waveOutPrepareHeader(hWaveOut, pWaveHeader, Len(pWaveHeader)) If Loi Then hMem = GlobalFree(hMem) Call waveOutGetErrorText(Loi, ErrMsg, Len(ErrMsg)) SVTH : Bùi Danh Đạt Trang 109 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần MsgBox "Lỗi : waveOutPrepareHeader : " & ErrMsg, vbCritical, "Phát" Call Enable_Buttons(True) Call waveOutClose(hWaveOut) Exit Sub End If 'Bat dau phat am Loi = waveOutWrite(hWaveOut, pWaveHeader, Len(pWaveHeader)) If Loi Then hMem = GlobalFree(hMem) Call waveOutGetErrorText(Loi, ErrMsg, Len(ErrMsg)) MsgBox "Lỗi : waveOutWrite : " & ErrMsg, vbCritical, "Phát" Call Enable_Buttons(True) Call waveOutClose(hWaveOut) End If 'Sub waveOutProc will be called when finish playing End Sub Tiếp nhận kiện thiết bị phát âm : 'This sub will be called when finish playing Public Sub waveOutProc(ByVal hwo As Long, ByVal uMsg As Long, ByVal dwInstance As Long, ByRef hdr As WAVEHDR, ByVal dwParam2 As Long) If uMsg = MM_WOM_DONE Then frmRecord.Timer1.Enabled = True End If End Sub SVTH : Bùi Danh Đạt Trang 110 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần TÀI LIỆU THAM KHẢO CDs MSDN 10/2001 E-book : “MAPI, SAPI, and TAPI Developer's Guide” (Michael Amundsen -http://www.iac.net/~mamund/) TAPI reference (http://www.msdn.microsoft.com) TAPI description (http://allen-martin-inc.com) TAPI reference and examples (http://www.geocities.com/sfrare) The Canonical WAVE File Format (http://www.mp3.com/TimothyJohnWeber) Audio Interchange File Format (http://www.wotsit.org) Modem truyền số liệu (Nguyễn Hồng Sơn - Hoàng Đức Hải) Visual Basic - Lập trình sở liệu 10 Bí lập trình Visual Basic 6.0 (Nguyễn Tiến - Đặng Xuân Hường Nguyễn Văn Hoài - Trương Ngọc Vân) SVTH : Bùi Danh Đạt Trang 111 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần MỤC LỤC LỜI NÓI ĐẦU PHẦN GIỚI THIỆU ĐỀ TÀI I Đặt vấn đề : II Mơi trường lập trình : III Giới thiệu hoạt động chương trình : PHẦN CƠ SỞ LÝ THUYẾT Chương GIAO TIẾP GIỮA ĐIỆN THOẠI VÀ MÁY TÍNH I Sự cần thiết modem : 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 mơ hình TAPI : II.1.1 TAPI ? II.1.2 Chương trình ứng dụng TAPI : II.1.3 TAPI DLL (Dynamic link library - Thư viện liên kết động) : II.1.4 MSP (Media Service Provider ) : 10 II.1.5 MSPI (Media Service Provider Interface) : 11 II.1.6 TAPI Server : 11 II.1.7 TSP (Telephony Service Provider ) : 11 II.1.8 TSPI (Telephony Service Provider Interface) : 11 II.1.9 Service Providers : 12 II.2 Mơ hình lập trình cho hệ thống điện thoại : 13 II.3 Mơ hình ứng dụng TAPI : 14 II.4 Các phiên TAPI : 16 DTMF hệ thống điện thoại : 18 III Chương TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU 19 I Cơ sở liệu giới đại : 19 II Sơ lược ODBC (Open DataBase Connectivity) : 20 III Các cách truy xuất sở liệu : 20 III.1 DAO (Data Access Objects): 20 III.2 RDO (Remote Data Object) : 20 III.3 ADO (ActiveX Data Objects) : 21 IV Sơ lược SQL (Structured Query Language) : 21 SVTH : Bùi Danh Đạt Trang 112 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Chương SƠ LƯỢC VỀ TIẾNG NÓI VÀ CÁC PHƯƠNG PHÁP TỔNG HỢP TIẾNG NÓI 23 Sơ lược tiếng nói : 23 I I.1 Đặc tính chung tiếng nói : 23 I.2 Công nghệ Text–to–speech dùng để tổng hợp tiếng nói : 24 I.3 Sự cần thiết công nghệ Text–to–speech (TTS) : 25 Các phương pháp tổng hợp tiếng nói hệ thống tiếng Việt : 26 II II.1 Sự cần thiết việc tổng hợp tiếng nói : 26 II.2 Các tiêu chuẩn cần thỏa mãn tổng hợp tiếng nói : 26 II.3 Các phương pháp tổng hợp tiếng nói cho tiếng Việt : 27 Giới thiệu file Wave (*.wav) : 30 III III.1 Khái niệm file Wave file RIFF : 30 III.2 Cấu trúc file Wave : 32 IV III.2.1 Chunk Format : 32 III.2.2 Chunk Data : 33 Các phương pháp phát file Wave : 36 IV.1 Dùng hàm sndPlaySound PlaySound : 36 IV.2 Dùng MCI (Media Control Interface) : 36 IV.3 Dùng hàm cấp thấp Windows : 36 V Cách đọc file Wave vào nhớ : 38 VI Phương pháp thu âm : 39 PHẦN THIẾT KẾ HỆ THỐNG 41 Chương SƠ ĐỒ HOẠT ĐỘNG CỦA HỆ THỐNG 42 I Lưu đồ giải thuật : 42 II Sơ đồ luồng hoạt động hệ thống : 43 Chương HOẠT ĐỘNG GIAO TIẾP GIỮA ĐIỆN THOẠI VÀ MÁY TÍNH 46 I Khởi tạo đường truyền (line) : 46 II Kiểm tra đường truyền (line) hợp lệ : 47 III Mở line : 47 IV Đăng ký kiện cho TAPI : 47 V Kết nối với gọi đến : 47 VI Thu nhận mã DTMF : 48 VII Kết thúc gọi : 48 VIII Đóng line : 49 IX Kết thúc TAPI : 49 Chương THIẾT KẾ VÀ TRUY XUẤT CƠ SỞ DỮ LIỆU 50 SVTH : Bùi Danh Đạt Trang 113 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần I Sơ lược sở liệu : 50 II Mơ hình quan niệm liệu : 51 III Hoạt động truy xuất sở liệu : 52 IV Chương trình cập nhật liệu : 52 Chương TỔ CHỨC, TRUY XUẤT VÀ PHÁT FILE TIẾNG NÓI 55 I Chọn phương pháp tổng hợp tiếng nói : 55 II Chọn định dạng (format) cho file tiếng nói : 55 III Cách tổ chức file tiếng nói : 55 IV Chọn phương pháp phát thu tiếng nói : 58 V Đọc liệu tiếng nói vào nhớ : 58 VI Phát liệu tiếng nói từ vùng đệm : 59 VII Chương trình thu âm : 59 PHẦN VẬN HÀNH VÀ ĐÁNH GIÁ HỆ THỐNG 63 Vận hành : 64 I I.1 Chưong trình : 64 I.2 Chưong trình cập nhật liệu : 66 I.3 Chưong trình thu tiếng nói : 68 II Đánh giá hệ thống : 69 PHẦN KẾT LUẬN 71 PHỤ LỤC MÃ NGUỒN THỰC HIỆN MỘT SỐ CƠNG VIỆC CHÍNH 73 CHƯƠNG TRÌNH CHÍNH 74 CHƯƠNG TRÌNH CẬP NHẬT DỮ LIỆU 96 CHƯƠNG TRÌNH THU TIẾNG NĨI 102 TÀI LIỆU THAM KHẢO 111 MỤC LỤC 112 SVTH : Bùi Danh Đạt Trang 114 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... MENU Thông báo kết Trang 45 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Chương HOẠT ĐỘNG GIAO TIẾP GIỮA ĐIỆN THOẠI... luanvanchat@agmail.com Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần Chương GIAO TIẾP GIỮA ĐIỆN THOẠI VÀ MÁY TÍNH I Sự cần thiết modem : Như biết kỹ thuật điện thoại đời phát.. .Thông báo kết học tập học sinh qua điện thoại GVHD : Nguyễn Đức Thuần PHẦN GIỚI THIỆU Đ Ề TÀ I SVTH : Bùi Danh Đạt Trang LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Thông báo kết