sky_walker

New Member

Download miễn phí Đồ án Nghiên cứu và xây dựng chương trình ứng dụng giao tiếp audio trong môi trường mạng nội bộ





Chương 1: Cơ sở lý thuyết 3

1.1 Tổng quan về giao tiếp audio trong môi trường mạng nội bộ 3

1.1.1 Một số mô hình giao tiếp audio 3

1.1.2 Một số giao thức truyền thông 3

1.1.2.1 Giao thức IP 3

1.1.2.2 Giao thức TCP 4

1.1.2.3 Giao thức UDP 4

1.1.2.4 Socket 4

1.2 Một số chuẩn mã hoá và nén âm thanh 5

1.2.1 Một số chuẩn mã hóa 5

1.2.1.1 Giới thiệu chung 5

1.2.1.2 Mã hoá dạng sóng(waveform codec) 5

1.2.1.3 Mã hoá nguồn (Source codec) 6

1.2.1.4 Mã hoá hỗn hợp (hybrid codec) 6

1.2.2 Một số phương pháp nén tiếng nói 7

1.2.2.1 Giới thiệu chung 7

1.2.2.2 Các phương pháp nén cụ thể 8

1.3 Tìm hiểu hỗ trợ của Windows SDK trong xử lý và truyền nhận âm thanh 9

1.3.1 Môi trường Windows SDK đối với truyền âm thanh 9

1.3.1.1 Cấu trúc file wave và hàm playsound 10

1.3.2 Kỹ thuật truyền nhận âm thanh trên mạng IP 13

1.3.2.1 Mô hình liên kết và trao đổi dữ liệu 13

3.2.1.2 Dùng 2 socket 15

3.2.2 Cơ chế gọi và xác lập liên kết 17

3.2.3 Cơ chế truyền nhận dữ liệu 18

 

Chương 2: Thiết kế và cài đặt chương trình 23

2.1 Thiết kế chương trình 23

2.1.1 Môi trường và công cụ lập trình 23

2.1.1.1 Môi trường WINDOWS 23

2.1.1.2 Công cụ lập trình 23

2.1.2 Thiết kế chương trình 24

2.1.2.2 Thiết kế kiến trúc 24

2.1.2.3 Thiết kế chức năng 24

2.1.2.4 Thiết kế Modul 25

2.2 Cài đặt chương trình 26

2.3 Hướng dẫn cài đặt 29

2.3.1 Yêu cầu phần cứng 29

2.3.2 Yêu cầu phần mềm 29

2.3.3 Hướng dẫn sử dụng 30

Chương 3: Kết luận 32

3.1.Kết quả đạt được 32

3.2. Hướng phát triển 32

 

 





Để tải tài liệu này, vui lòng Trả lời bài viết, Mods sẽ gửi Link download cho bạn ngay qua hòm tin nhắn.

Ketnooi -


Ai cần tài liệu gì mà không tìm thấy ở Ketnooi, đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:


kết quả gần đúng nhất với âm thanh ban đầu. Bộ giải mã chỉ cần biết chỉ số của xung kích thước đó, sau đó tra codebook rồi tái tạo lại âm thanh. Một số các tham số khác nhau như năng lượng của sự kích thích và giá trị chu kỳ cũng cần đến khi giải mã. Các phương pháp mã đi theo cách này đòi hỏi quá trình tính toán phức tạp, có thể tất cả các mục trong từ điển đều phải thử để đưa ra giá trị tốt nhất.
Hình 2.1 Biểu đồ so sánh các phương pháp mã hoá
1.2.2 Một số phương pháp nén tiếng nói
1.2.2.1 Giới thiệu chung
Ý tưởng nén tiếng nói là để giảm kích thước nhằm giúp ít tốn băng thông truyền qua mạng. Dòng dữ liệu tiếng nói được giải nén ở tốc độ lấy mẫu mặc định ( 8bits/mẫu, 8 khz, kênh mono) sẽ yêu cầu đường truyền có tốc độ 8000 mẫu/giây * 8 bits/ mẫu = 64 Kbits/giây để truyền dữ liệu qua mạng. Do đó, tùy theo tốc độ đường truyền thực tế trên mỗi mạng mà chọn giải pháp nén hay không nén dữ liệu trước khi truyền dữ liệu âm thanh qua mạng, cũng như chọn tỉ lệ nén là bao nhiêu cho phù hợp (chọn giải thuật nén). Vì nếu dữ liệu được nén thì phải giải nén khi được truyền đến máy nhận. Do đó cũng tốn thời gian để nén và giải nén dữ liệu, điều này dẫn đến ảnh hưởng thời gian thực của hệ thống.
Đối với các mạng cục bộ, thường có tốc độ truyền của mạng cao nên có thể không cần nén tiếng nói trước khi truyền.
Ngược lại, đối với mạng Internet, hệ thống được kết nối với Internet thông qua các modem chuẩn có tốc độ thấp 14,4 Kbits/s hay 28,8Kbits/s thì nhất thiết phải nén tiếng nói trước khi truyền và giải nén trước khi phát. Hai phương pháp nén âm thanh thường được dùng nhất để giảm băng thông là GSM và ADPCM.
1.2.2.2 Các phương pháp nén cụ thể
a. Phương pháp nén tiếng nói theo chuẩn GSM
GSM (Global System for Mobile comunications - Hệ thống truyền thông di động toàn cầu). GSM là một chuẩn điện thoại được Viện Tiêu Chuẩn Viễn Thông Châu Âu ETSI đề ra.
Phát triển tại Đại học Kỹ thuật Berlin vào năm 1992, GSM là một trong những phương pháp nén âm thanh phức tạp nhất đang được sử dụng, cho tỉ lệ nén 1:10. Giải thuật GSM dựa trên giao thức truyền thông Mobile Phone, hiện tại là giao thức phổ biến nhất tại Châu Âu đối với điện thoại di động.
Đầu vào của GSM bao gồm các frames 160 tín hiệu, những tín hiệu PCM tuyến tính 13 bits lấy mẫu ở 8 Khz. GSM có sẵn trong thư viện C có thể được dùng để tạo ra một đối tượng gsm giữ trạng thái cần thiết hay để mã hóa những mẫu PCM tuyến tính thành các frames GSM, hay giải mã các frames GSM thành các frames PCM tuyến tính. Bộ mã hóa nén 160 frames PCM 16 bits thành các frames GSM 260 bits. Tương ứng một giây tiếng nói thành 1625 bytes. Bởi vì mẫu 260 bits không chẵn để gắn vào các bytes 8 bits, nên bộ mã hóa sẽ mã hóa frame 160 bytes thành frame GSM 264 bits. Một buffer GSM nén 1 Mb có thể lưu tiếng nói gần 10 phút.
Một dòng dữ liệu tiếng nói giải nén 16 bits/mẫu ở 8Khz yêu cầu băng thông tốc độ 128 Kbits/s, trong khi đó băng thông để truyền qua mạng nếu dùng giải thuật nén GSM , tiếng nói 16 bits/mẫu chỉ cần:
( 264 bits * 8.000 mẫu/giây)/160 mẫu = 13,2 Kbits/giây
Cho tỉ lệ nén 128/13,2 = 9,7 tương đương 10 :1.
b. Phương pháp nén ADPCM
Nguyên tắc :
Là một phương pháp có thể được dùng để nén các khối dữ liệu tiếng nói trước khi chúng được truyền đến các máy nhận và giải nén chúng để phát lại sau khi được nhận từ đường truyền.
Giải thuật nén IMA_ ADPCM:
Trong phạm vi luận văn này em tìm hiểu và ứng dụng giải thuật đưa ra bởi IMA (Interactive Multimedia Association) .
Giải thuật IMA ADPCM nén những mẫu PCM tuyến tính thành các mức lượng hóa 4 bits, trong đó mỗi mẫu DPCM được biểu diễn bằng các giá trị âm thanh 16 bits, do đó giải thuật này cung cấp một tỉ lệ nén là 4:1.
Quá trình thực hiện của giải thuật IMA_ADPCM là đọc từ những bộ đệm có giá trị kiểu nguyên và nén chúng thành một mẫu âm thanh 16 bits được biểu diễn bằng các mức lượng hóa 4 bit. Bởi vì không có giới hạn trong kích thước buffers tiếng nói nên những mã ADPCM được kết hợp một cách dễ dàng với các phần còn lại của chương trình để nén tiếng nói khi thu và giải nén trở lại khi phát
1.3 Tìm hiểu hỗ trợ của Windows SDK trong xử lý và truyền nhận âm thanh
1.3.1 Môi trường Windows SDK đối với truyền âm thanh
Môi trường Windows SDK là môi trường lập trình đa phương tiện dưới Windows, cung cấp các hàm cấp thấp rất thích hợp cho các ứng dụng trên mạng. Một cách thức đơn giản nhất trong việc xuất dữ liệu waveform ra loa là dùng hàm PlaySound. Chúng ta có thể thao tác với dạng dữ liệu waveform bằng các hàm cấp thấp do hệ thống cung cấp. Ngoài ra hệ thống còn cung cấp một cơ chế giúp người lập trình giao tiếp dễ dàng hơn với thiết bị, đó là các hàm MCI.
1.3.1.1 Cấu trúc file wave và hàm playsound
a. Cấu trúc file wave
Một file wave thật sự là một phần của một lớp file lớn hơn dùng bởi các hàm multimedia của windows là các file RIFF ( Resource Interchange File Format). Một file RIFF bao gồm một hay nhiều chunk. Trong mỗi chunk có con trỏ chỉ đến chunk kế tiếp. Mỗi chunk có một mô tả kiểu theo sau bởi một số dữ liệu. Một ứng dụng để đọc các file RIFF có thể bước qua một số chunk, đọc các chunk cần quan tâm và bỏ qua các chunk không liên quan. Chunk file RIFF luôn luôn bắt đầu bằng header sau:
Typedef struct { FOURCC ckID; DWORD cksize; }CK;
Trong đó:
FOURCC là một vùng 4 bytes định nghĩa loại chunk. Vùng này sẽ chứa từ WAVE đối với file wave.
ckSize đặc tả kích thước dữ liệu trong chunk, sau header này chúng ta sẽ tìm thấy cSize bytes dữ liệu.
Các chunk có thể chứa các subchunks. Cấu trúc thật sự một file wave cơ bản bao gồm một chunk fmt theo sau là một chunk dữ liệu. Có thể có những chunk khác phía sau chunk WAVE nhưng thiết bị sử dụng file WAVE sẽ bỏ qua các chunk này. Hình sau mô tả cấu trúc file RIFF chứa dữ liệu WAVE.
ID
SIZE
FROM TYPE
"fmt"
SIZE
"data"
SIZE
Hai subchunk trong chunk wave đặc tả thông tin về một âm thanh file wave và sau đó là chính dữ liệu âm thanh. Chunk fmt chứa chủ yếu đối tượng WAVEFORMAT và một số dữ liệu thêm vào gắn ở cuối chunk. Một đối tượng WAVEFORMAT được định nghĩa như sau :
Typedef struct waveformar_tag{ WORD wFormatTag;
WORD nChannels;
DWORD nSamplesPerSec;
DWORD nAvgBytesPerSec;
WORD nBlockAlign;
} WAVEFORMAT;
Trong đó:
wFormatTag : Chứa hằng WAVE_FORMAT_PCM được định nghĩa trong MMSYSTEM.H như sau:
# define WAVE_FORMAT_PCM 1
Giá trị WAVE_FORMAT_PCM báo cho phần mềm đọc file wave biết cách âm thanh trong nó được mã hoá.
nChannels : Của đối tượng WAVEFORMAT có 2 giá trị :
1 đối với âm thanh mono.
2 đối với âm thanh stereo.
nSamplePerSec : Cho biết tần số lấy mẫu của âm thanh để có thể thu và phát cùng một tốc độ, giá trị thông thường của field này nhận một những giá trị sau:
11025 - 11,025Khz
22055 - 22,050Khz
44100 - 44,1 Khz
nAvgBytesPerSec : Cho biết số bytes trung bình trong mỗi giây để thu và phát dữ liệu wave.
nBlockAlign : Xác định số bytes yêu cầu chứa trong một mẫu
Những mẫu có độ phân giải nhỏ hơn hay bằng 8 bits có thể lưu vào 1 bytes.
Những mẫu có độ phân giải từ 9 đến 16 bits yêu cầu 2 bytes.
Những mẫu stereo yêu cầu số bytes gấp đôi những mono.
Trong cấu trúc trên không định nghĩa số bits thật sự trong một mẫu dữ liệu âm thanh file wave, để định nghĩa số bits trong một mẫu ta dùng cấu trúc sau:
Typedef struct pvmwaveformat_tag{WAVEFORMAT wf;
WORD wBitsPerSample;
} PCMWAVEFORMAT;
Trong đó:
wf: Đối với dữ liệu subchunk fmt của một chunk WAVE chúng ta thật sự làm việc với đối tượng PCMWAVEFORMAT.
nBitsPerSample: Xác định số bits thật sự trong một mẫu .
Trong một mẫu mono 8 bits dữ liệu của chunk dữ liệu gồm một chuỗi dài có giá trị 1 byte. Những mẫu stereo được chia ra với byte đầu dùng cho kênh bên trái và byte thứ hai dùng cho kênh bên phải, như vậy mỗi mẫu stereo 8 bits sẽ cần 2 bytes.
Để làm việc với một file RIFF bao gồm các bước sau :
Mở file.
Vào chunk cần thiết.
Chuyển con trỏ file vào vị trí bắt đầu dữ liệu của chunk.
Hoàn tất, ra khỏi chunk.
Vào chunk kế tiếp.
b. Hàm Playsound
Chúng ta dùng hàm PlaySound để play dữ liệu dạng waveform hay chúng ta có thể dùng hàm sndPlaySound. Tuy nhiên trong môi trường Win32 thì nên dùng hàm PlaySound.
Hàm PlaySound cho phép chúng ta chỉ định các thông số nguồn âm thanh theo các cách sau:
Dùng tên alias khai báo trong file WIN.INI
Dùng tên file.
Dùng chỉ số nhận dạng tài nguyên
Waveform-Audio Files
Trong môi trường Windows, phần lớn các file âm thanh dạng waveform đều có phần mở rông là .WAV
Ví dụ dưới đây minh họa cho việc phát file âm thanh “AmThanh.WAV”
PlaySound("C:\\SOUNDS\\AmThanh.WAV", NULL, SND_SYNC);
Play sound theo các hiện tượng
Hàm PlaySound còn cho phép chúng ta xuất âm thanh tùy theo một sự kiện nào đó xảy ra trong hệ thống như click mouse hay nhấn một phím nào đó. Hệ thống sẽ phát âm thanh tùy theo hiệc tượng xảy ra để thông báo người sử dụng. Âm thanh dạng này được gọi là sound events.
Để xác định sound event, hàm PlaySound sẽ được gọi với thông số pszSound trỏ đến bảng đăng ký sự kiện. Ví dụ chúng ta sẽ gọi hàm PlaySou...

 

Các chủ đề có liên quan khác

Top