Chương trình thu âm :

Một phần của tài liệu Báo cáo tốt nghiệp: Thông báo kết quả học tập của học sinh qua điện thoại docx (Trang 60 - 65)

Mặc dù các từ tiếng Việt cũng như các lời chào và tạm biệt đã được 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. Ngoà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 :

SVTH : Bùi Danh Đạt Trang 60

- Các thơng số cần cung cấp cho header hoà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()

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

DataSize trong bảng chỉ mục. Song song đĩ, chương trình cũng sẽ cập nhật lại

FileOffsetDataSize 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ưới sẽ đượ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à (adsbygoogle = window.adsbygoogle || []).push({});

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

SVTH : Bùi Danh Đạt Trang 61

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

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 *.samtươ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

SVTH : Bùi Danh Đạt Trang 62

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

SVTH : Bùi Danh Đạt Trang 63 PHẦN 4 V VNN HHÀÀNNHH V VÀÀ ĐĐÁÁNNHH GGIIÁÁ H H TTHHNNGG (adsbygoogle = window.adsbygoogle || []).push({});

SVTH : Bùi Danh Đạt Trang 64

Một phần của tài liệu Báo cáo tốt nghiệp: Thông báo kết quả học tập của học sinh qua điện thoại docx (Trang 60 - 65)