Nhận dạng trực tuyến

Một phần của tài liệu Giải quyết vấn đề nhận dạng tiếng Việt bằng phân tích cú pháp (Trang 91 - 93)

Trong phần lý thuyết, chúng ta nhận dạng dựa trên tập tin. Nhưng thực tế chúng ta cần xử lý dữ liệu vào từ thiết bị thu thanh và nhận dạng trực tuyến. Để làm được việc này chúng tôi dùng một hàng đợi tín hiệu. Mỗi khi chương trình nhận được tín hiệu có dữ liệu ghi âm báo về, chương trình sẽ cập nhật vào một đầu của hàng đợi. Thủ tục nhận dạng hoạt động trên nền thời gian. Mỗi khi trên đầu còn lại của hàng đợi có dữ liệu, thủ tục nhận dạng biến đổi dữ liệu đó thành từ và đưa ra thiết bị đầu ra.

Cách giải quyết như vậy để đảm bảo mô hình lý thuyết không bị phá vỡ, nghĩa là vùng đệm âm thanh cũng sẽ được coi như tập tin, được trừu tượng hoá thành tập tin. Nhưng đồng thời nó cũng phản ánh cách giải quyết đã tồn tại với các thiết bị

vào khác như bàn phím và con chuột. Bàn phím có một vùng đệm có đủ sức chứa 16 phím ấn và con chuột có biến đếm nội tại chứa số lần ấn phím.

class CWaveBufferQueue { protected: ULONG m_BufferLength; ULONG m_NumberOfBuffer; CWaveBuffer *m_FreeList; UCHAR m_FreeListDenial; CWaveBuffer *m_UsedList; UCHAR m_UsedListDenial; ULONG m_UsedPos; public:

CWaveBufferQueue(DWORD dwNumberOfBuffer=32, DWORD dwBufferLength=44100, int nFormat=1); virtual ~CWaveBufferQueue();

double ConsumeSample(); int ListTo(LPCTSTR lpFileName);

public: ULONG GetFreeBufferNumber(); ULONG GetDataBufferNumber(); CWaveBuffer *GetFreeBuffer(); CWaveBuffer *GetFreeBufferList(); CWaveBuffer *GetDataBuffer(); CWaveBuffer *GetDataBufferList();

void EnqueueFreeBuffer(CWaveBuffer *pBuffer); void EnqueueDataBuffer(CWaveBuffer *pBuffer); public:

void EnterCriticalSection() {

while(m_FreeListDenial); m_FreeListDenial = 1; while(m_UsedListDenial); m_UsedListDenial = 1; }

void EnterFreeListSection() { while(m_FreeListDenial); m_FreeListDenial = 1; } void LeaveFreeListSection() { m_FreeListDenial = 0; }

void EnterUsedListSection() { while(m_UsedListDenial); m_UsedListDenial = 1; } void LeaveUsedListSection() { m_UsedListDenial = 0; }

};

Bảng 5-5. Lớp CWaveBufferQueue

Vùng đệm mà chúng tôi thiết kế có số khối dữ liệu cố định và độ dài của mỗi khối cũng cố định. Các thông số này có thể được thay đổi khi không có quá trình nhận dạng, nhưng giữ cố định khi công việc nhận dạng đang tiến hành. Phát sinh triển khai này không nằm ngoài những gì mà các nhà lập trình hệ thống đã đưa ra. Chúng tôi chỉ sử dụng lại giải pháp của họ.

Một phần của tài liệu Giải quyết vấn đề nhận dạng tiếng Việt bằng phân tích cú pháp (Trang 91 - 93)

Tải bản đầy đủ (PDF)

(107 trang)