VÀ PHÁT FILE TIẾNG NĨI
VII.Chương trình thu âm :
sẵn trước khi tới tay người sử dụng, chương trình thơng báo kết quả học tập vẫn kèm thêm một chương trình thu âm nhằm cho phép người dùng thu âm lại nếu cần. Ngồi chức năng thu, chương trình cịn cho phép phát lại hoặc xĩa bất cứ từ nào đã thu âm. Nếu một từ đã cĩ mà ta thu lại thì từ cũ đã thu âm sẽ bị thay bằng từ mới vừa thu âm.
Để thu âm thì người dùng cần trang bị một micro loa nối vào soundcard. Các chức năng của chương trình thu âm :
1. Thu :
- Các thơng số cần cung cấp cho header hồn tồn giống như đã nêu ở phần 2
- Để điều khiển soundcard dùng để thu âm, ta gọi hàm
waveInOpen() với ID của thiết bị thu âm thanh sẽ được gán bằng hằng WAVE_MAPPER và chương trình sẽ tự động chọn thiết bị thu âm thanh phù hợp.
- Tiếp đĩ ta phải tạo ra vùng đệm để lưu trữ các mẫu âm thanh thu được. Vùng đệm này cĩ kích thước tối đa được tính như sau :
BufferSize = MaxTime * Số mẫu trên 1giây * Số byte trên 1 mẫu
Với MaxTime được quy định là 90 giây. Khi thời gian thu đến 90 giây thì chương trình sẽ ngừng thu và ghi dữ liệu vừa thu vào file.
- Sau đĩ, dùng 2 hàm waveInPrepareHeader() và
waveInAddBuffer() để nạp header chuẩn bị cho việc thu. Khi đã sẵn sàng, hàm
waveInStart() sẽ bắt đầu cơng việc thu âm. Từ lúc này mọi âm thanh thu vào sẽ được lưu vào vùng đệm.
- Khi ngừng thu, chương trình sẽ kiểm tra từ được nhập vào đã cĩ chưa, nếu cĩ thì sẽ xĩa phần dữ liệu tiếng nĩi cũ và ghi lại dữ liệu mới vào cuối file *.sam tương ứng, đồng thời cập nhật lại 2 giá trị FileOffset và DataSize
trong bảng chỉ mục. Song song đĩ, chương trình cũng sẽ cập nhật lại FileOffset
và DataSize của các từ trong nhĩm mà cĩ FileOffset > FileOffset của từ vừa cập nhật. Đĩ là vì khối dữ liệu tương ứng trong file *.sam đã bị xĩa (khối dữ liệu mới được để ở cuối file) nên tồn bộ các khối dữ liệu phía dưới sẽ được đơn lên, dẫn đến FileOffset của các từ phía dưới thay đổi theo. Cịn FileOffset của các từ phía trên khơng thay đổi Như thế các FileOffset của các từ phía dướisẽ được cập nhật lại như sau:
FileOffset = FileOffset - DataSize của từ vừa xĩa
Nếu từ này chưa cĩ thì dữ liệu tiếng nĩi sẽ được ghi vào cuối file *.sam
tương ứng , đồng thời thêm từ này và 3 giá trị FileOffset , DataSize và tên nhĩm vào bảng chỉ mục. Tên nhĩm sẽ là chữ cái cơ bản dựa vào ký tự đầu tiên của từ vừa thu.
- Tuy nhiên thường trước và sau khi khi thu âm sẽ cĩ một khoảng im lặng. Khi phát ra một câu gồm nhiều từ ghép lại, nếu khoảng im lặng này quá lâu sẽ làm ngắt quãng câu nĩi. Do đĩ, trước khi ghi dữ liệu tiếng nĩi vào file *.sam , chương trình sẽ cắt bỏ những mẫu âm thanh nào cĩ giá trị nằm trong khoảng 7Ah đến 86h.
2. Phát :
- Quá trình phát ở đây tương tự như quá trình phát qua điện thoại, chỉ khác ở chỗ thiết bị xuất âm thanh là soundcard. Lúc này ID của thiết bị phát âm thanh sẽ được gán bằng hằng WAVE_MAPPER và chương trình sẽ tự động chọn thiết bị phát âm thanh phù hợp.
3. Xĩa :
- Trước tiên chương trình sẽ đọc 2 giá trị FileOffset và DataSize
tương ứng với từ cần xĩa. Dựa vào đĩ chương trình sẽ định vị được khối dữ liệu tiếng nĩi cần loại bỏ trong file *.sam tương ứng.
- Chương trình sẽ đọc lại 2 khối dữ liệu trước và sau khối dữ liệu cần cắt bỏ , sau đĩ ghi ra một file tạm, xĩa file *.sam , sau đĩ đổi tên file tạm trở thành *.sam đĩ
- Lúc này trong bảng chỉ mục, FileOffset của các từ được thu trước đĩ khơng cịn đúng so với file *.sam mới nữa. Vì vậy, ta phải tiến hành cập nhật lại những từ nào thuộc cùng nhĩm với từ vừa xĩa và FileOffset cĩ lớn hơn FileOffset của từ vừa xĩa, tương tự như trong phần thu một từ đã cĩ.
4. Chèn khoảng im lặng :
- Cĩ một số từ cần thêm một khoảng thời gian im lặng ở đầu hoặc cuối từ vừa thu . Vì vậy chương trình cung cấp thêm chức năng này
- Dựa vào thời gian im lặng đầu và cuối (theo mili giây) do người dùng nhập vào, chương trình sẽ tính tốn kích thước dữ liệu mới như sau :
DataSize= DataSize + (TgDau+TgCuoi)/1000*11500
- Số mẫu âm thanh cần thêm vào đầu và cuối được tính :
SoMauDau = TgDau/1000*11500 SoMauCuoi = TgCuoi/1000*11500
- Tất cả các mẫu âm thanh được thêm vào sẽ được gán giá trị 80h. - Bây giờ ta chỉ việc đọc khối dữ liệu tiếng nĩi cũ vào bộ nhớ, sau đĩ xĩa khối dữ liệu này trong file *.sam, cuối cùng ghi lại vào cuối file này các mẫu im lặng đầu, khối dữ liệu tiếng nĩi cũ trong bộ nhớ và các mẫu im lặng cuối. đồng thời cập nhật lại 2 giá trị FileOffset và DataSize của từ đĩ vào bảng chỉ mục và FileOffset của các từ phía trước bị thay đổi.
PHẦN 4 VẬN HÀNH VẬN HÀNH VÀ ĐÁNH GIÁ VÀ ĐÁNH GIÁ HỆ THỐNG HỆ THỐNG
I. Vận hành :