Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
262,37 KB
Nội dung
Chương 14: Một số đặc trưng của chương trình + Toàn bộ môdun ñược ñóng gói thành một dll nên dễ dàng thừa kế cho các ứng dụng khác. + Toàn bộ môdun ñược thiếtkế theo hướng ñối tượng kể cả CSDL nên dễ nâng cấp sửa chữa về sau, và ñược thiếtkế ñộc lập nên khi sửa ñổi CSDL không làm ảnh hưởng tới chương trình. + Môdun sử dụng Font Unicode là Font khá thông dụng hiện nay. + Môdun ñược lập trình trên nền .Net kích thước File CSDL khá nhỏ nên có thể dễ dàng chuyển ñổi sang các ứng dụng chạy trên ñiện thoại di ñộng. 3.2.2.2.4 Một số vấn ñề và giải pháp. * Vấn ñề lưu trữ CSDL. + Vấn ñề : CSDL là một kiểu dữ liệu có cấu trúc chứa danh sách các diphone.Trong ñó mỗi Diphone là một ñối tượng có các thuộc tính như mảng dữ liệu của File Wav, mảng toạ ñộ các ñiểm cực trị, toạ ñộ ñiểm nối vv nên việc lưu trữ dữ liệu theo kiểu tuần tự là khó khăn và phức tạp thậm trí việc tìm kiếm truy cập, cập nhật là khó do kiểu lưu trữ tuần tự gây ra ví dụ khi thay ñổi khíc thước, dung lượng của một Diphone có thể sẽ làm mất hoặc sai lệch các dữ liệu của Diphone ñằng sau nó + Ý tưởng và giải pháp : coi toàn bộ CSDL là một Object có cấu trúc và lưu toàn bộ Object này xuống ổ cứng. ð ể giải quyết vấn ñề này em sử dụng một formatter ñể tuần tự hóa ñối tượng và ghi nó vào một System. IO. FileStream. Khi cần truy xuất ñối tượng, sử dụng formatter cùng kiểu ñể ñọc dữ liệu ñược-tuần-tự-hóa từ file và giải tuần tự hóa ñối tượng. Thư viện lớp. NET Framework cung cấp các hiện thực formatter sau ñây ñể tuần tự hóa ñối tượng theo dạng nhị phân hay SOAP: System. Runtime. Serialization. Formatters. Binary. BinaryFormatter System. Runtime. Serialization. Formatters. Soap. SoapFormatter Lớp BinaryFormatter và SoapFormatter có thể ñược sử dụng ñể tuần tự hóa một ñối tượng của bất kỳ kiểu nào ñược gắn với ñặc tính System. SerializableAttribute. BinaryFormatter sinh ra một stream dữ liệu nhị phân mô tả ñối tượng và trạng thái của nó, trong khi SoapFormatter sinh ra một tài liệu SOAP. Cả hai lớp BinaryFormatter và SoapFormatter ñều hiện thực giao diện System. Runtime. Serialization. IFormatter, giao diện này ñịnh nghĩa hai phương thức: Serialize và Deserialize. Serialize nhận một tham chiếu System. Object và một tham chiếu System. IO. Stream làm ñối số, tuần tự hóa Object và ghi nó vào Stream. Deserialize nhận một tham chiếu Stream làm ñối số, ñọc dữ liệu của ñối tượng ñược-tuần-tự-hóa từ Stream, và trả về một tham chiếu Object ñến ñối tượng ñược-giải-tuần-tự-hóa. Ta phải ép tham chiếu Object này về kiểu thích hợp. * Vấn ñề tách dấu và tìm kiếm các Diphone + Vấn ñề : Một trong những bước quan trọng của bước tổng hợp mức cao ñó là tìm ñược vị trí nguyên âm ñầu tiên và dấu của từ là gì. ví dụ dấu huyền dấu sắc hay dấu hỏi…hay như khi ñã tìm ñược Diphone ñó là Diphone gì thì việc xác ñịnh vị trí của nó trong CSDL như thế nào? Việc viết các hàm kiểm tra và tìm kiếm này không khó tuy nhiên tốc ñộ thực thi phải nhanh và tối ưu. + Ý tưởng và giải pháp : Sử dụng các tập hợp của. Net cung cấp sẵn. cụ thể vấn ñề xác ñịnh kí tự ñó có phải là nguyên âm hay không hoặc kí tự ñó có chứa dấu hay không trong C# em sử dụng tập hợp StringCollection và sử dụng hàm Contains() ñể kiểm tra kí tự ñó có thuộc tập hợp hay không. Còn vấn ñề tìm kiếm em sử dụng bảng băm Hashtable, Hashtable là kiểu cấu trúc S in h V i ê n : T r ầ n T h à n h ð ức - L ớ p : 46 TH T r a n g 59 dữ liệu có mục tiêu tối ưu hoá việc tìm kiếm trong. Net. Hashtable là một kiểu từ ñiển ( kiểu tập hợp trong ñó có 2 thành phần chính liên hệ với nhau là khóa và giá trị) ñược tối ưu cho việc truy cập nhanh. Khi chúng ta truy cập một giá trị trong hashtable thì phải cấp một khóa. Khóa trong hashtable có thể là kiểu dữ liệu ñược xây dựng sẵn hay cũng có thể là thể hiện của kiểu dữ liệu do người dùng tạo ra. * Vấn ñề cắt và ghép nối các Diphone. + Vấn ñề : Sau khi thu âm ñược các từ mẫu, vấn ñề tiếp theo là phải tách từ ñã thu ñể thu ñược các diphone mong muốn. Do ñặc ñiểm từ ñơn âm tiết của tiếng Việt nên từ mẫu ñược tạo nên từ hai diphone, diphone bắt ñầu và diphone kết thúc. ð ể có ñược các diphone này, ta phải cắt ra các ñoạn tín hiệu từ mẫu ñã có. Các diphone bắt ñầu ñược cắt từ phần bên trái của mẫu và các diphone kết thúc ñược cắt từ phần bên phải của mẫu. Các ñiểm cắt ñược xác ñịnh trực tiếp bằng mắt. ð iểm cắt phải thoả mãn ñiều kiện: + Nằm trong phần tín hiệu ổn ñịnh + ð iểm cắt bên phải của diphone bắt ñầu và ñiểm cắt bên trái của diphone kết thúc phải nằm tại ñỉnh cao nhất trong một chu kỳ của phần tín hiệu tương ứng với nguyên âm (gần như tuần hoàn). ð iều này bảo ñảm rằng hai diphone dùng ñể ghép nối không bị lệch pha nhiều. S in h V i ê n : T r ầ n T h à n h ð ức - L ớ p : 46 TH T r a n g 60 HÌnh 3.12 Vịtrí ñiểm cắt + Ý tưởng và giải pháp : Em không sử dụng khái niệm “ñiểm cắt-ñiểm nối ” mà ñưa ra khái niệm “ ð oạn nối”.Vị trí ñoạn nối này cũng vẫn phải thỏa mãn ñiều kiện là nắm trong phân tín hiệu ổn ñịnh và vị trí ñiểm cắt cũng phải nằm tại ñỉnh cao nhất trong một chu kỳ của phần tín hiệu tương ứng. Cụ thể quá trình xử lý nối hai Diphone ñược tiến hành như sau : - Bước 1 : Tiến hành cắt Diphone như bình thường. - Bước 2 : Áp dụng biến ñổi khung OLA cho ½ chu kì bên phải của Diphone bên trái, tương tự cũng áp dụng ñổi khung OLA cho ½ chu kì bên trái của Diphone bên phải. -Bước 4 : ð iều chỉnh cường ñộ của hai Diphone ñảm bảo không có hiện tượng chênh lệch về cường ñộ do quá trình thu âm gây ra. -Bước 5 : Cộng xếp chồng hai Diphone ñể dược từ hoàn chỉnh Nửa bên trái sau khi cắt và xử lý khung OLA Nửa bên phải sau khi cắt và xử lý khung OLA [...]... một cách dễ dàng và mềm dẻo hơn Hình 3 .14 Một khung OLA khi chưa qua xử lí Quá trình giảm tần số cơ bản sẽ là quá trình tăng khoảng cách giữa các khung OLA.Ngược lại quá trình tăng tần số cơ bản sẽ là quá trình giảm khoảng cách giữa các khung OLA Khoảng cách giữa 2 khung OLA chính bằng ½ chu kì cơ bản Hình 3.15 Một khung OLA sau khi ñược tách và xử lí 3.2.2.2.5 Chương trình thử nghiệm Toàn bộ Môdun... ñược ñóng gói thành một lớp trong một dll nên việc sủ dụng rất ñơn giản Cụ thể như sau : //Khởi tạo một ñối tượng Speaker Speaker TL_Speak = new Speaker(); //Phát âm ra loa TL_Speak.Speak("Khoa Công Nghệ Thông Tin Trường ðại Học Thuỷ Lợi"); //Hiện ñồ thị sóng âm lên pictureBox2 TL_Speak.RenderTimeDomainLeft(ref pictureBox2); //Lưu File xuống ổ cứng TL_Speak.Save(@"c:\output.w av"); . Chương 14: Một số đặc trưng của chương trình + Toàn bộ môdun ñược ñóng gói thành một dll nên dễ dàng thừa kế cho các ứng dụng khác. + Toàn bộ môdun ñược thiết kế theo hướng ñối. hướng ñối tượng kể cả CSDL nên dễ nâng cấp sửa chữa về sau, và ñược thiết kế ñộc lập nên khi sửa ñổi CSDL không làm ảnh hưởng tới chương trình. + Môdun sử dụng Font Unicode là Font khá thông dụng. formatter ñể tuần tự hóa ñối tượng và ghi nó vào một System. IO. FileStream. Khi cần truy xuất ñối tượng, sử dụng formatter cùng kiểu ñể ñọc dữ liệu ñược-tuần -tự- hóa từ file và giải tuần tự hóa ñối