1. Trang chủ >
  2. Luận Văn - Báo Cáo >
  3. Báo cáo khoa học >

Giải thuật thêm dữ liệu âm của từ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (853.9 KB, 156 trang )


 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh Liêm



− Xác định file Index.*, file DataWave.* nào cần được cập nhật nhờ chữ cái đầu tiên

của tên file.

− Mở file âm thanh đó, vào header lấy chiều dài của đoạn dữ liệu âm, lấy tên file để

tạo một cấu trúc WORD_INFOR ghi vào file Index.*

− Đọc phần data trong file wave, ghi nối vào file DataWave được xác định ở bước

một.

∗ Nhận xét:

− Cách lưu trữ này xuất phát từ cấu trúc của file wave : một file wave gồm phần

header và phần data.

− Phân biệt các file Index.*, file Datawave.* nhờ vào phần mở rộng của chúng.

− Giải quyết được trường hợp khi người gọi u cầu đọc lại thơng tin nhiều lần bằng

một phím quy định nào đó trên bàn phím điện thoại. Khi u cầu phát lại, ta chỉ cần play lại

file speakout, khơng cần phải tìm kiếm lại.

− Mở rộng việc tạo file âm thanh bằng cách tìm kiếm khối, nghĩa là các từ có cùng

chữ cái đầu sẽ được tìm kiếm một lần.

− Việc tìm kiếm thơng tin dữ liệu âm của một từ trong file index.* là tuần tự, do đó

hiệu quả tìm kiếm chưa cao, và thời gian tìm kiếm thay đổi tùy vào kích thước của file

Index.*

− Khơng giảm đáng kể vùng lưu trữ.

4.2. Để riêng lẻ từng file wav :

Đây là cách lưu trữ bình thường nhất. Với cách lưu trữ này, khơng cần có giải thuật

tìm kiếm, khơi phục dữ liệu âm. Việc cập nhật âm cũng rất đơn giản : chỉ chép file âm thanh

vào vị trí định sẵn trong ứng dụng.

∗ Nhận xét:

Nếu để từng file riêng rẽ trên đĩa, khi cần thiết dùng hàm play file đó thì q trình

đóng mở file tiến hành liên tục. Làm như vậy sẽ khơng hiệu quả : truy xuất chậm và tiếng

phát ra có thể sẽ bị gián đoạn.

5. Chọn Phương Pháp Lưu Trữ, Tạo Âm.

Card Dialogic chỉ chơi được các file wave u_law, khơng chơi được dữ liệu âm trên

vùng nhớ như SoundBlaster. Dựa vào ưu điểm,khuyết điểm của hai phương pháp, chúng tơi

chọn phương pháp thứ nhất : chỉ lưu trữ dữ liệu âm.



 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 95



 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh Liêm



VẬN HÀNH VÀ ĐÁNH GIÁ HỆ THỐNG



Giao Diện Chương Trình

Giao diện chương trình được dùng theo kiểu SDI (Single Document Interface), trong

chương trình này chỉ có 4 kênh hoạt động, nên chỉ dùng một Dialog để hiển thị trạng thái

cho cả 4 kênh. Ngồi ra còn có một số dialog khác để điều chỉnh âm thanh, cập nhật và thử

âm.

Dialog Dialogic System : mỗi hình máy điện thoại mơ tả cho một kênh, có hai trạng

thái gác máy và nhấc máy chỉ cho biết kênh đang chờ đợi cuộc gọi hay đang trao đổi với

bên ngồi. Bên cạnh các máy là các thơng tin mơ tả cho trạng thái, nội dung giao tiếp của

các kênh với người gọi.



∗ Dialog Adjust Volume : có một slider điều chỉnh âm lương phát ra trên từng kênh

tương ứng trong combobox. Có thể điều chỉnh âm lượng ngay cả lúc đang phát âm.



 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 96



 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh Liêm



Dialog ListWord:



Từ cần thêm



Danh sách từ có

sẵn

Chức năng :

− Cho phép cập nhật từ.

− Cho phép thử âm trên SoundBlaster hay trên Telephone.

Cách sử dụng :





Cập nhật từ.



Muốn cập nhật dữ liệu âm, người sử dụng nhập từ cần cập nhật vào EditBox “Add

Word”

− Rồi chọn “Update”. Nếu từ chưa có trong tự điển từ, trình sẽ mở ra hộp thoại u

cầu người dùng cho đường dẫn của file âm thanh.

− Sau khi chọn xong file( lưu ý tên file phải trùng với tên từ cần cập nhật), người sử

dụng chon Open để hòan tất việc cập nhật.



 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 97



 Tự Động Hóa Đài 116







GVHD:



Phan Đình Mãi – Nguyễn Thanh Liêm



Thử âm trên SoundBlaster.



Muốn thử âm từ nào, chọn từ đó trong danh sách từ có sẵn, sau đó chọn “Play on

SoundBlaster”.

Vận Hành Chương Trình.

Mục tiêu của ứng dụng này là thực hiện cho tốt q trình giao tiếp với nhiều người

sử dụng ở xa mà họ chỉ sử dụng một máy điện thoại nối kết lên mạng điện thoại. Do vậy,

người sử dụng chính của ứng dụng này là khơng nhìn thấy giao diện chương trình, mà chỉ có

người quản lý dịch vụ này biết được. Do vậy giao diện chương trình được thiết kế khơng vì

mục đích đẹp, hấp dẫn, mà phải làm sao cho người quản lý có thể kiểm tra, bảo trì dễ dàng,

nắm bắt được tồn bộ trạng thái của kênh tại bất kỳ thời điểm nào.

Sử dụng chương trình này rất đơn giản, vào menu Test/Start, sẽ hiển thị một dialog

chính và ta có thể đọc tất cả các thơng tin có liên quan về trạng thái các kênh, qúa trình hoạt

động của từng kênh. Dialog này dùng theo kiểu modeless nên trong khi hiển thị những

thơng tin này, ta vẫn có thể thực hiện những thao tác khác như điều chỉnh các file âm thanh,

chỉnh âm lượng cho từng kênh (menu Option/Adjust Volume).

Đánh Giá Hệ Thống.

Trước khi thử nghiệm tồn bộ hệ thống, chúng tơi thử nghiệm và đánh giá cho từng

module. Sau khi thực hiện thành cơng cho các module, chúng tơi kết hợp lại, thử nghiệm,

điều chỉnh và hồn tất chương trình.

Về q trình giao tiếp :

Đối với module giao tiếp, nếu tất cả các thơng tin cần tìm đều đã được lưu trữ ở

dạng các file âm thanh trên đĩa cứng cục bộ, thời lượng mà thread bị block hầu như khơng

có do tất cả các hàm sử dụng đều là bất đồng bộ. Thread đáp ứng kịp thời tất cả các tất cả

các sự kiện xảy ra trên các kênh đồng thời, và về mặt lý thuyết do sử dụng chỉ một thread để

quản lý nên thời gian đáp ứng của thread đối với các sự kiện là nhanh hơn so với mơ hình

đồng bộ. Chúng tơi cũng có thử nghiệm một bản đơn giản theo mơ hình đồng bộ, nhưng do

chỉ có được 4 kênh, nên việc so sánh tốc độ đáp ứng của các chương trình khi hoạt dộng là

khơng xác nhận được độ chênh lệch.



 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 98



 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh Liêm



Trong một thời điểm khác, nếu ta dùng một hàm lặp chạy trong một thời gian t để

giả lập cho thời lượng tiêu tốn cho q trình tìm kiếm dữ liệu âm cho một kênh, nếu ta tăng

thời gian này lên đáng kể thì khi sử dụng cho nhiều kênh ta sẽ cảm nhận được sự chậm trễ

trong việc đáp ứng đồng thời. Tuy nhiên nếu ta chạy hàm lặp này trong một thread khác thì

cũng với thời gian t trên sự chậm trễ giảm bớt đáng kể.

Với hai bản thử nghiệm ở trên, ta thấy giao diện lập trình ứng dụng (API) mà

Dialogic đưa ra là rất tốt. Ta có thể xây dựng q trình giao tiếp cho nhiều kênh đồng thời.

Tuy nhiên, trong một ứng dụng cụ thể, thời gian tiêu tốn cho việc thực hiện các thao tác

khác là phải có và chấp nhận. Và chính thời gian mới ảnh hưởng nhiều đến q trình giao

tiếp.

Về chất lượng âm thanh:

Những câu chào, nhắc nhở, hay cám ơn … được thu tồn câu : chất lượng âm thanh

gần như hòan hảo.

Phần âm thanh do tổng hợp âm tạo ra đạt được độ trung thực cao : giữa các từ đều có

khỏang lặng đủ cho người nghe phân biệt được các từ, file âm thanh chơitrên card

Dialogic/4 đạt hiệu quả cao.

Tuy nhiên, do hạn chế của phần cứng ( card Dilogic/4 khơng cung cấp khả năng thay

đổi tần số phát âm nên dù đã có gắng, chúng em chưa tạo được giọng thật chuẩn : lên,

xuống giọng ở những vị trí cần thiết trong câu.

Độ hiệu quả của truy xuất dữ liệu:

Truy xuất dữ liệu bằng ODBC trên CSDL biết trước cấu trúc làm tăng độ tin cậy của

truy xuất dữ liệu.

Truy xuất CSDL mang tính chỉ đọc, cho phép tiến hành nhiều tác vụ truy xuất trên

CSDL tại cùng một thời điểm.

Có một hạn chế nhỏ là do CSDL dùng trong ứng dụng là CSDLtạo từ Foxpro nên

khơng cho phép cập nhật dữ liệu khi ứng dụng đang hoạt động. Để giải quyết trường hợp

này, ta phải dùng CSDL tạo bởi Oracle và đây là hướng mở rơng cuả đề tài.

Kết Luận:

Sự kết hợp của ba module đã tạo nên chương trìng ứng dụng về cơ bản đáp ứng

đưỡc u cầu bán tự động Đài 116 Bưu điện Thành phố Hồ Chí Minh.

Với ứng dụng này, khách hàng có thể tìm thấy nhanh chóng và chính xác tên, địa

chỉ, số điện thoại của các th bao. Ưng dụng có thể góp phần giải quyết tình trạng q tải

các cuộc gọi truy xuất thơng tin qua dịch vụ 116.

Tuy nhiên đây là chỉ là một chương trình thử nghiệm với thiết bị còn hạn chế về chất

lượng cũng như các tính năng nên chưa thể hiện thực được tồn bộ ý đồ thiết kế ban đầu, cụ

thể là việc chuyển cuộc gọi sang Điện thoại viên.



 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 99



 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh Liêm



Trong tương lai, ta có thể dễ dàng mở rộng ứng dụng cho các loại card Dialogic với

số kênh nhiều hơn và cho các loại dịch vụ tương tự.



 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 100



CHƯƠNG TRÌNH

NGUỒN



 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh



Liêm



Chương trình được viết theo các Class, mỗi Class có thừa kế MFC hoặc khơng. Một

Class được hiện thực bằng một file TênClass.h ( header) và một file TênClass.cpp.

Có một số Class đã được viết như sau:

− CDlgcSys : gồm các member function thực hiện q trình giao tiếp, xử lý tất cả các

sự kiện.

− CDlgcSysDisplay : hiện thực một Window nhận các message để xử lý tất cả các sự

kiện.

− CSetVolume : điều chỉnh âm lượng cho các kênh.

− CDataAccess : thực hiện q trình truy xuất dữ liệu và chuyển đổi dữ liệu về dạng

âm thanh.



// DlgcSys.h: interface for the DlgcSys

class.////////////////////////////////////////////////////////////////////////#if !

defined(AFX_DLGCSYS_H__C8FF1557_912B_11D3_BB35_C2D227CB6408__INCLU

DED_)#define

AFX_DLGCSYS_H__C8FF1557_912B_11D3_BB35_C2D227CB6408__INCLUDED_

#if _MSC_VER > 1000



 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 102



 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh



Liêm



#pragma once

#endif // _MSC_VER > 1000

// number of Dialogic channels

#define MAXCHANS 4 // Maximum Channels

#define MAXMSG

30 // Maximum messages

#define MAXRING 1 // Maximum rings before answering

#define MAXDTMF 9 // Maximum digits getting

// Define Machine's Status

#define ST_WTRING 1 // Waiting incoming call

#define ST_OFFHOOK 2 // Being in OFFHOOK status

#define ST_INTRO

3 // Playing Introduction files

#define ST_ONHOOK 4 // Being on ONHOOK status

#define ST_PLAY

5 // Playing found Messages

#define ST_MAXDTMF 6 // Getting digits from incoming call

#define ST_INVALID 7 // Playing INVALID message

#define ST_GOODBYE 8 // Playing GOODBYE message

#define ST_ERROR

9 // Receiving TDX_ERROR event

#define ST_PRESSAGAIN 10// Playing PRESSAGAIN message

#define ST_BUSMODE 11// Playing BUSMODE message

// Window header

#include

#include

#include

#include

#include

#include

// Dialogic header

#include

#include

#include

#include "\LVTN\DataAccess.h"

// Added by ClassView



typedef struct _DX_INFO{

long

chdev;

// Channel device

int

prestate;

// Previous state of channel

int

state;

// State of channel

int

msg_fd;

// File description of file

DV_DIGIT

digbuf;

// Buffer for DTMF digit

DX_IOTT

iott[2];

// I/O transfer table

char

msg_name[MAXMSG + 1]; // message file name

} DX_INFO;

class CDlgcSys

{

public:

CStringArray m_strarrAddress[MAXCHANS + 1];

DX_IOTT* m_dxiottPlayAddress[MAXCHANS + 1];

 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 103



 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh



Liêm



int DlgcPlayAddress(int nChanNum);

int m_nBusModeFileDesc;

int m_nPressAgainFileDesc;

int DlgcErrorEvtHandler(int nChanDev);

CDataAccess m_genDataAccess;

void DlgcNotifyEventProcess();

void DlgcNotifyEvent(int OnOff);

int DlgcDialEvtHandler();

int DlgcDefaultHandler();

int DlgcErrorEvtHandler();

int m_nInvalidFileDesc;

int m_nGoodbyeFileDesc;

int DlgcGetDigitHandler();

int DlgcPlayEvtHandler();

int m_nIntroFileDesc;

int DlgcSetHookEvtHandler();

int DlgcCstEvtHandler();

int DlgcGetChanNum(int chdev);

DV_DIGIT* m_pDigitBuf;

int DlgcGetDigits(int nChanNum,DV_DIGIT *pdv_digitBuf);

int DlgcPlay(int nChanNum,int nFileDesc);

int DlgcSetHook(int nChanNum,int nState);

void DlgcQuit();

DX_INFO m_dxinfo[MAXCHANS + 1];

char m_pTmpBuf[256];

int DlgcInit();

CDlgcSys();

virtual ~CDlgcSys();

int m_nMaxChans ;

};

#endif // !

defined(AFX_DLGCSYS_H__C8FF1557_912B_11D3_BB35_C2D227CB6408__INCLU

DED_)

/////////////////////////

/////////////////////////

////////////////////////

// DlgcSys.cpp: implementation of the DlgcSys class.//

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "Lvtn.h"

#include "DlgcSys.h"

#include "DataAccess.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 104



 Tự Động Hóa Đài 116



GVHD:



Phan Đình Mãi – Nguyễn Thanh



Liêm



// Window handler receiving Messages

extern HWND hWnd;

extern CString Ketqua;

extern CStringArray chuoi;

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CDlgcSys::CDlgcSys()

{

}

/////////////////////////////////////////////////////////////////////////

//

/////////////////////////////////////////////////////////////////////////

CDlgcSys::~CDlgcSys()

{

}

/////////////////////////////////////////////////////////////////////////

// Initialize Dialogic System

// Determinate number of channel

// Open channel devices

// Route Analog and Voice channel

// Ready to receiv incoming call

// Set channel to DX_ONHOOk

// RETURN 0: Unsuccessfully

//

1: Successfully

/////////////////////////////////////////////////////////////////////////

int CDlgcSys::DlgcInit()

{

int

nChanNum;

// Channel Number

char

pChanName[30];

// Channel Name

CT_DEVINFO

ct_devinfo;

// Device Infomation(Dialogic Structure)

// m_nMaxChans is number of channels which will open

// This can be choosen by End-users

m_nMaxChans = 4;

if (m_nMaxChans > MAXCHANS)

// MAXCHANS :number of channels

which this program can process

{

// Only MAXCHANS will be used

m_nMaxChans = MAXCHANS;

}

// Initialize INTRO,INVALID,GOODBYE Here

if ((m_nIntroFileDesc = dx_fileopen("Intro.wav",O_RDONLY|O_BINARY)) == -1)

{

AfxMessageBox("Can not open Intro.wav file");

return 0;

 SVTH: Nguyễn Hữu Phú – Trần Lê Trung



Trang 105



Xem Thêm
Tải bản đầy đủ (.doc) (156 trang)

×