Cách tổ chức file tiếng nói

Một phần của tài liệu phần mềm thông báo kết quá của học sinh qua điện thoại di động.doc (Trang 51 - 54)

SVTH : Bùi Danh Đạt Trang 51

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 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

SVTH : Bùi Danh Đạt Trang 52

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ể đư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).

SVTH : Bùi Danh Đạt Trang 53

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 .

Một phần của tài liệu phần mềm thông báo kết quá của học sinh qua điện thoại di động.doc (Trang 51 - 54)

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

(111 trang)
w