Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
196 KB
Nội dung
Xử lý tiếng nói Phương pháp tổng hợp trực tiếp Báo cáo Bài tập lớn môn học Xử lý tiếng nói Đề số 7: TỔNG HỢP TIẾNG NÓI BẰNG PHƯƠNG PHÁP TỔNG HỢP TRỰC TIẾP I Nội dung Mục đích đồ án Tìm hiểu phương pháp tổng hợp tiếng nói phương pháp trực tiếp, với đơn vị ghi âm từ tổ hợp từ Yêu cầu Thực ghi âm với micro tái tạo lại tín hiệu loa máy tính PC Ghép từ tổ hợp từ ghi âm thành câu có nghĩa cho chất lượng tốt Yêu cầu từ từ ghi âm sẵn “đây”, “là”, “phương pháp”, “tổng hợp”, “trực tiếp” thực tổng hợp thành câu “Đây phương pháp tổng hợp trực tiếp” Hiển thị tín hiệu tiếng nói vừa tổng hợp Xử lý tiếng nói Phương pháp tổng hợp trực tiếp II Các nội dung tìm hiểu thực II.1 Hoạt động thu/phát âm Windows Hệ điều hành Windows cung cấp nhiều chế để truy nhập điều khiển thiết bị có chức thu/phát âm sound card, modem Tùy theo yêu cầu mà người lập trình chọn cách tiếp cận khác từ mức thấp đến mức cao từ đơn giản đến phức tạp Dưới trình bày số phương pháp điều khiển thiết bị thu/ phát âm Windows II.1.1 Phương pháp sử dụng thư viện MCI a Khái niệm MCI • MCI (Media Control Interface) thư viện cấp cao cho phép truy nhập điều khiển thiết bị multimedia cd audio, waveform audio, digital video, scanner • MCI cung cấp giao diện thống độc lập với thiết bị để thực hoạt động thu/phát tất thiết bị multimedia hỗ trợ Giao diện thể tập hợp hàm chuẩn có dạng mcixxx Khi sử dụng hàm MCI, việc play file âm có định dạng khác audio cd, video, avi, wave, midi theo dạng thức b Sử dụng MCI MCI sử dụng hai cách khác để lệnh điều khiển thiết bị multimedia dạng command message command string • command message: giống chế thông điệp Windows, lệnh gửi đến thiết bị mã lệnh đồng thời liệu trao đổi với thiết bị liệu có cấu trúc xác định tùy theo loại thiết bị mã lệnh • command string: lệnh gửi đến thiết bị dạng xâu ký tự có nghĩa chẳng hạn "open digitalvideo" Thực chất xâu chuyển thành dạng command message gửi đến thiết bị nhiên sử dụng lệnh dạng dễ nhớ so với dạng command message Xử lý tiếng nói Phương pháp tổng hợp trực tiếp MCI hỗ trợ nhiều thiết bị multimedia việc thao tác hoàn toàn độc lập với thíết bị Các thiết bị MCI hỗ trợ bao gồm Cdaudio Dat digitalvideo Other Overlay Scanner sequencer Vcr videodisc waveaudio Các hàm MCI • MCIERROR mciSendCommand: hàm sử dụng chế command message để lệnh cho thiết bị Để điều khiển thiết bị thực thao tác khác open, recording phải truyền cho hàm tham số tương ứng với thao tác cần thực • MCIERROR mciSendString: sử dụng xâu ký tự để lệnh cho thiết bị c Các hạn chế MCI: Các hàm mcixxxx hàm cấp cao, thao tác không phụ thuộc thiết bị nhiên lại không linh hoạt, không cho phép người sử dụng truy nhập điều khiển trực tiếp trình thu/phát âm Do đó, với ứng dụng đòi hỏi tính linh hoạt cao sử dụng MCI không thích hợp II.1.2 Phương pháp sử dụng thư viện waveform-audio API Đây thư viện truy nhập thiết bị thu/phát âm mức thấp cho phép thao tác linh hoạt nhanh chóng Tuy nhiên sử dụng thư viện waveform-audio API khó so với sử dụng MCI người lập trình phải quản lý hoàn toàn việc cấp phát nhớ cho thiết bị làm việc Waveform API chia thiết bị audio thành loại • waveIn devices thiết bị cho phép thu tín hiệu âm từ bên thành tín hiệu số lưu máy tính Xử lý tiếng nói • Phương pháp tổng hợp trực tiếp waveOut devices thiết bị thực biến đổi tín hiệu số thành tín hiệu âm phát loa Ứng với loại thiết bị có hàm tương ứng waveInxxxx waveOutxxxx để thao tác Nguyên lý hoạt động hàm waveIn waveOut giống nhau, khác chiều liệu chuyển Nếu không tính đến chiều di chuyển luồng liệu vào hay hoạt động thiết bị thể sau: Theo sơ đồ trên,việc quản lý buffer cho thiết bị quan trọng để đảm bảo cho thiết bị multimedia hoạt động bình thường Có nhiều cách áp dụng giải pháp thực đồ án sử dụng hàm callback Xử lý tiếng nói Phương pháp tổng hợp trực tiếp II.2 Các thao tác vào với file wave II.2.1 Chunk Cấu trúc file wave thuộc vào lớp file sử dụng hàm Multimedia Windows, cụ thể là: file RIFF (dạng file trao đổi tài nguyên) Một file RIFF gồm nhiều chunk, chunk lại chứa trỏ đến chunk Mỗi chunk bao gồm: • Loại chunk • Dữ liệu theo sau loại chunk Một ứng dụng muốn đọc file RIFF qua chunk, đọc liệu chunk quan tâm bỏ qua chunk mà không quan tâm Một chunk file RIFF bắt đầu header có cấu trúc sau: typedef struct { FOURCC ckid; DWORD cksize; FOURCC fccType; DWORD dwDataOffset; DWORD dwFlags; } MMCKINFO; Trong đó: Trường ckid: • Kích thước byte, xác đinhl loại chunk • Mang giá trị “WAVE”, file WAVE • Chú ý: Nếu loại chunk ký tự ký tự lại bên phải thêm vào khoảng trắng Trong trường FOURCC phân biệt chữ hoa chữ thường Trường cksize: • Chứa kích thước vùng liệu chunk Vùng liệu nằm sau header có kích thước là: ckSize byte Chunk chứa subchunk Subchunk chunk Một file RIFF bắt đầu chunk loại “RIFF” Xử lý tiếng nói Phương pháp tổng hợp trực tiếp II.2.2 Cấu trúc file Wave File Wave bắt đầu chunk loại “RIFF” Hai subchunk “fmt” “data” wave chunk đặc tả thông tin âm file wave, tiếp liệu subchunk.Cụ thể: a Subchunk “fmt” Dữ liệu fmt chunk đối tượng WAVEFORMAT có cấu trúc sau: typedef struct { WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX; Trong đó: • wFormatTag thường có giá trị WAVE_FORMAT_PCM định nghĩa tập tin MMSYSTEM.H sau: #define WAVE_FORMAT_PCM Giá trị báo cho phần mềm đọc Wave file biết kiểu mã hoá liệu âm sang liệu số kiểu mã hoá PCM Hiện kiểu mã hoá Wave file • nChannels: có hai giá trị : cho âm mono cho âm stereo • nSamplesPerSec: cho biết tốc độ lấy mẫu, có giá trị: • 11025 11.025 kHz 22050 22.050 kHz 44100 44.100 kHz nAvgBytesPerSec: cho biết số byte yêu cầu trung bình giây để phát lại mẫu liệu sóng âm Xử lý tiếng nói • Phương pháp tổng hợp trực tiếp nBlockAlign: cho biết số byte dùng để chứa mẫu âm Như mẫu bit hay yêu cầu byte, mẫu đến 16 bit yêu cầu byte Nếu âm stereo yêu cầu số byte gấp lần âm mono Ta thấy WAVEFORMAT chưa có thông tin số bit dùng để lượng tử hoá mẫu liệu sóng âm Thực tế Wave file xác lập số bit dùng cho mẫu liệu trường gắn vào cuối cấu trúc WAVEFORMAT Cấu trúc sau: typedef struct { WAVEFORMAT wf; WORD wBitsPerSample; } PCMWAVEFORMAT; Trong đó: • wBitsPerSample: cho biết số bit mẫu liệu Chú ý: Các mẫu liệu phải lưu trữ dạng byte word Do đó, wave file dùng 12 bit để lượng tử hoá mẫu sóng âm phải lưu trữ bit thừa không dùng đến b Subchunk “data” Dữ liệu data subchunk wave file chứa số liệu âm số hoá Đối với mẫu âm bit, liệu data subchunk bao gồm giá trị byte (có giá trị khoảng 0-255) mẫu âm Đối với mẫu âm 16 bit, mẫu liệu gồm byte (có giá trị khoảng từ -32768 đến 32767) Điều nghĩa file wave 16 bit nghe to 256 lần file wave bit, mà có nghĩa âm lượng tử hoá xác hơn, nghe trung thực Trong mẫu mono bit, liệu data subchunk gồm chuỗi giá trị byte Với stereo bit, mẫu gồm byte, liệu xếp xen kẽ (interleave), với Xử lý tiếng nói Phương pháp tổng hợp trực tiếp byte đầu (byte chẵn) mẫu âm kênh bên trái, byte sau (byte lẻ) kênh bên phải II.2.3 Đọc File RIFF Để làm việc với file RIFF, ta phải mở “descend” vào chunk mà ta cần Điều có nghĩa ta cần phải định vị chunk này, chuyển trỏ file vào đầu khối liệu chunk Khi làm việc xong với chunk ta phải “ascend” khỏi chunk “descend” xuống chunk khác Các hàm dùng xử lý RIFF file có tiền tố mmio làm việc với file handle dạng HMMIO Để bắt đầu, ta phải mở file đoạn mã sau: HMMIO h; if ((h=mmioOpen(path,NULL,MMIO_READ))==NULL) { /*báo lỗi*/ return(0); } Trong đó: • Thông số path chứa đường dẫn file wave • Cờ MMIO_READ báo cho mmioOpen mở file để đọc Ta mở để ghi thông số MMIO_WRITE hay đọc ghi thông MMIO_READWRITE • Nếu mở file thành công, mmioOpen trả handle loại HMMIO Nếu thất bại, trả trị NULL Sau mở file xong, ta bắt đầu định vị Wave chunk đoạn mã sau: MMCKINFO mmParent; MmParent.fccType=mmioFOURCC(‘W’,’A’,’V’,’E’); if (mmioDescend(h,(LPMMCKINFO)& mmParent, NULL,MMIO_FINDRIFF)) { mmioClose(h,0); /* báo lỗi */ return(0); } số Xử lý tiếng nói Phương pháp tổng hợp trực tiếp Cấu trúc MMCKINFO chứa thông tin chunk Nó định nghĩa MMSYSTEM.H sau: typedef struct { FOURCC ckid; DWORD cksize; FOURCC fcctype; DWORD dwDataOffset; DWORD dwFlags; } MMCKINFO; Trong đó: • Để “đi vào” chunk, ta cho trường ckid MMCKINFO loại chunk mà ta muốn định vị Có macro thực việc mmioFOURCC Sau gọi hàm mmioDescend để định vị chunk Nếu định vị thành công, hàm trả giá trị đối tượng MMCKINFO truyền cho hàm điền vào thông tin chunk • Trường cksize định nghĩa kích thước tính byte chunk • Đối số thứ ba mmioDescend cờ MMIO_FINDRIFF Cờ thị cho mmioDescend tìm file có ID RIFF với loại chunk xác định ckid Nếu muốn tìm chunk Wave file ta cho cờ MMIO_FINDCHUNK Sau vào Wave chunk, ta bắt đầu vào fmt subchunk nó: MMIOCKINFO mmSub; MmSub.ckid=mmioFOURCC(‘f’,’m’,’t’); if (mmioDescend(h,(LPMMCKINFO)& mmSub,(LPMMCKINFO)& mmParent,MMIO_FINDCHUNK)) { mmioClose(h,0); /* báo lỗi */ return(0); } Đến ta bắt đầu đọc liệu từ Wave File Đoạn mã sau đọc đối tượng PCMWAVEFORMAT từ fmt subchunk: Xử lý tiếng nói Phương pháp tổng hợp trực tiếp PCMWAVEFORMAT waveformat; int n; n = ((unsigned int)mmSub.cksize,sizeof(PCMWAVEFORMAT)); if(mmioRead(h,(LPSTR)&waveformat,(long)n) !=(long)n) { /* báo lỗi */ return(0L); } if(waveformat.wf.wFormatTag !=WAVE_FORMAT_PCM) { /* BÁO LỖI */ mmioClose(h,0); return(0L); } Trong đó: • Đối số mmioRead handle file đọc • Đối số thứ hai trỏ tới vùng đệm để chứa liệu • Đối số thứ ba số byte cần đọc Hàm trả số byte thực đọc Sau đọc nội dung chunk, ta khỏi chunk để chuẩn bị đọc chunk kế tiếp: mmAscend(h,(LPMMCKINFO)&mmSub,0); Trong đó: • Đối số thứ hai mmAscend đối tượng MMCKINFO chunk mà ta “đi ra” • Đối số thứ ba đối số giả Công việc lại đọc liệu mã hoá âm Wave file vào nhớ Chú ý giá trị cksize trả mmioDescend sử dụng để xác định kích thước vùng đệm cần cấp phát để chứa liệu II.3 Tổng hợp từ ghi âm Để thực tổng hợp câu “Đây phương pháp tổng hợp trực tiếp” phải qua bước sau: 10 Xử lý tiếng nói Phương pháp tổng hợp trực tiếp II.4 Hiển thị tín hiệu tiếng nói Các tín hiệu tiếng nói ghi âm tổng hợp hiển thị form cách vẽ liên tiếp mẫu lên vùng hiển thị Các mẫu cập nhật dịch chuyển trượt phía 11 [...]...Xử lý tiếng nói Phương pháp tổng hợp trực tiếp II.4 Hiển thị tín hiệu tiếng nói Các tín hiệu tiếng nói đã ghi âm và tổng hợp được hiển thị ngay trên form bằng cách vẽ liên tiếp các mẫu lên một vùng hiển thị Các mẫu này được cập nhật khi dịch chuyển thanh trượt ở phía dưới 11