TRUYỀN ÂM THANH TRÊN MẠNG LAN
V.2.3 MODUL THU VÀ PHÁT ÂM THANH
Modul xử lý âm thanh làm nhiệm vụ giao tiếp với soundcard, ghi vào bộ nhớ và truyền cho modul II để mã hoá, đồng thời nhận các mẫu đã giải mã ở modul II để đưa ra soundcard trong quá trình nhận.
Modul xử lý âm thanh Modul mã hoá (giải mã) Modul truyền nhận Mẫu tiếng nói
thu được Gói dkhi mã hoáữ liệu sau
Mẫu tiếng nói
đã giải mã
Gói dữ liệu nhận từ remote
Quá trình thu và phát tiếng nói thông qua vùng đệm (buffer), có 2 loại vùng đệm trong Direct sound : Primary buffer và Secondary buffer. Primary buffer chứa tiếng nói mà người nghe sẽ nghe thấy. Chỉ có duy nhất một Primary buffer và buffer này do DirectSound tạo ra, secondary buffer chứa tiếng nói hoặc đoạn tiếng cần đưa ra. Chương trình có thể tạo ra một hoặc nhiều Secondary buffer. Khi phát tiếng nói trong secondary buffer, DerectSound sẽ chuyển tiếng nói sang Primary buffer và đưa ra soundcard. Chương trình ứng dụng có thể dùng DirectSoundCapture để ghi tiếng nói vào một Capturebuffer. Cũng như khi phát tiếng nói, chương trình có thể báo con trỏ đến một vị trí nào đó và khi nó đến cuối của buffer thì nó tự động quay lại vị trí đầu của buffer.
Khi thao tác với các buffer, DirectSound cho phép khó một phần của buffer lại để đảm bảo không bị ghi đè lên phần này.
Modul thu và phát tiếng nói nằm trong cùng một Record thread. Thread có mức ưu tiên cao nhất. Mỗi khi có một dòng thông báo từ DirectSound gửi đến tức là khi con trỏ Capture buffer đi đến vị trí quy định trước thì thread này sẽ được gọi đến. Lúc này, modul thu tiếng nói sẽ khoá phần Capture buffer vừa ghi xong. Néu trong buffer của modul phát tiếng nói có tín hiệu tiếng nói thì sẽ chép vào Secondary buffer của DirectSound.
Hình V.3 Lưu đồ của modul thu và phát tiếng nói V.2.4 MODUL MÃ HOÁ VÀ GIẢI MÃ ÂM THANH
Modul mã hoá được kích hoạt sau khi modul VAD xác định tín hiệu âm thanh có chức tiếng nói. Công việc của modul mã hoá gọi đến các thủ tục mã hoá tiếng nói(GSM,LPC…). Sau đó, chuyển dữ liệu đã mã hoá vào Send buffer tồi kích hoạt modul truyền. Modul nhận nằm trong thread mã hoá, có mức ưu tiên bình thường.
Bắt đầu Khoá buffer DirectSound
Chép tín hiệu âm thanh vừa lấy mẫu vào Record buffer
Play buffer có dữ liệu
Chép play buffer vào Secondary buffer Mở khoá buffer DirectSound Kích hoạt modul mã hoá Kết thúc đúng sai
Sau đây là lưu đồ giải thuật modul mã hoá :
Hình V.4 Lưu đồ giải thuật modul mã hoá
Modul giải mã tiếng nói được kích hoạt sau khi modul nhận được dữ liệu từ máy ở xa. Loại bỏ Header, các dữ liệu thừa và đưa vào trong buffer nhận. Modul giải mã sẽ xá định phương pháp giải mã tương ứng với phương pháp mã hoá được sử dụng ở bên truyền. Sau đó chuyển dữ liệu đã mã hoá vào buffer phát tiếng nói.
Bắt đầu Kết thúc Lấy một khung tiếng nói từ Record buffer Play buffer có dữ liệu
Mã hoá theo phương pháp PCM
Chép khung tiếng nói đã mã hoá vào Sendbuffer
Kích hoạt modul truyền đúng
Lưu đồ giải thuật modul giải mã như sau :
Hình V.5 Lưu đồ giải thuật modul mã hoá V.2.5 MODUL TRUYỀN, NHẬN ÂM THANH
Modul này có nhiệm vụ giao tiếng giữa máy tính với mạng IP. Sử dụng giao thức TCP/IP.
Khi buffer truyền có dữ liệu cần truyền đi, modul truyền sẽ kích hoạt . dữ liệu cần truyền sẽ có thêm các header và các thông tin cần thiết khác. Modul truyền có mức ưu tiên bình thường.
Khi có dữ liệu đến, winsock sẽ gửi thông báo đến chương trình, chương trình nhận được thông báo và kích hoạt modul nhận. Modul nàu có nhiệm vụ nhận dữ liệu, kiểm tra, loại bỏ dữ liệu thừa cùng với header. Sau khi chuyển dữ liệu vào buffer nhận và kích hoạt modul giải mã.
Bắt đầu Kết thúc Lấy một khung tiếng nói từ buffer nhận Buffer nhận có dữ liệu
Mã hoá theo phương pháp PCM
Chép khung tiếng nói vào buffer phát
đúng
Lưu đồ giải thuật của modul truyền và nhận :
Hình V. 6 Lưu đồ giải thuật modul truyền
Hình V.7 Lưu đồ giải thuật modul nhận