Nén âm thanh file *.wav theo chuẩn mpeg

90 278 0
Nén âm thanh file *.wav theo chuẩn mpeg

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình OBO OK S CO M Mục lục Lời nói đầu PHẦN I LÝ THUYẾT CHƯƠNG CÁC KIẾN THỨC CƠ BẢN VỀ ÂM THANH I NHỮNG KHÁI NIỆM CƠ BẢN - SÓNG CƠ 1.1 Sự hình thành sóng môi trường đàn hồi 1.2 Các đặc trưng sóng 1.3 Phương trình sóng II SÓNG ÂM VÀ ĐẶC TÍNH ÂM THANH 2.1 Dao động âm truyền dao động 2.2 Đơn vò vật lý âm 2.3 Đặc tính sinh lý cảm thụ âm 12 CHƯƠNG WAVE FILE 16 I MULTIMEDIA WINDOWS 16 II CẤU TRÚC WAVE FILE 17 2.1 RIFF file 17 2.2 Cấu trúc File Wave 17 III ĐỌC RIFF FILES 21 CHƯƠNG LÝ THUYẾT XỬ LÝ TÍN HIỆU SỐ 25 I TÍN HIỆU VÀ HỆ THỐNG RỜI RẠC 25 Giới thiệu 25 Đáp ứng xung hệ TTBB 25 Tính chất tổng chập hệ TTBB 26 Hệ nhân 27 Tính ổn đònh 27 Phương trình sai phân tuyến tính hệ số 28 Biểu diễn hệ rời rạc miền tần số 28 Đònh lý lấy mẫu Shannon 30 II PHÉP BIẾN ĐỔI FOURIER RỜI RẠC 30 Chuỗi Fourier rời rạc tín hiệu rời rạc tuần hoàn 30 Biến đổi Fourier rời rạc tín hiệu có độ dài hữu hạn 31 Phép biến đổi nhanh Fourier (FFT) 32 KIL CHƯƠNG GIỚI THIỆU VỀ MPEG 33 I GIỚI THIỆU 33 MPEG gì? 33 So sánh chuẩn MPEG 33 m MPEG 34 Các khái niệm 35 Hoạt động 38 II CÁC KHÁI NIỆM TRONG ÂM THANH MPEG 40 Lược đồ mã hóa Perceptual Sub-band 40 Giải thích hiệu qủa che (masking efficiency) 41 SVTH: Đỗ Văn Tuấn Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình KIL OBO OKS CO M Các lớp âm MPEG 43 III CÁC THÔNG SỐ 45 CHƯƠNG CÁC GIẢI THUẬT NÉN ÂM THANH 50 I LÝ THUYẾT THÔNG TIN 50 II CÁC GIẢI THUẬT NÉN KHÔNG CÓ TỔN THẤT 51 Mã hóa Huffman 51 Mã hóa Huffman sửa đổi 53 Mã hóa số học 54 Giải thuật Lempel-Ziv-Welch (LZW) 55 III CÁC GIẢI THUẬT NÉN CÓ TỔN THẤT 57 Các phương pháp nén âm đơn giản 57 Nén âm dùng mô hình âm tâm lý 57 Nén âm theo chuẩn MPEG 58 PHẦN II THIẾT KẾ CHƯƠNG TRÌNH 60 CHƯƠNG LƯU ĐỒ GIẢI THUẬT VÀ CẤU TRÚC DỮ LIỆU 61 I SƠ ĐỒ KHỐI 61 II CẤU TRÚC DỮ LIỆU VÀ ĐỊNH NGHĨA .62 A CẤU TRÚC DỮ LIỆU 62 Các cấu trúc file 62 Các cấu trúc dòng bít liệu 63 Các cấu trúc để đònh dạng dòng bít liệu 63 Các cấu trúc huffmancodetab 67 Các cấu trúc tính MDCT 67 Các cấu trúc scalefac_struct 67 B CÁC ĐỊNH NGHĨA 68 Các đònh nghóa dùng truy xuất liệu .68 Các đònh nghóa dùng tính toán FFT 68 Các đònh nghóa dùng đònh dạng dòng liệu 68 Các đònh nghóa dùng mã hoá Huffman 68 Các đònh nghóa dùng phân tích liệu .69 Các đònh nghóa dùng mô hình âm tâm lý 69 Các đònh nghóa dùng truy xuất nhập liệu .69 Các đònh nghóa dùng cấu trúc file Wave file Mpeg .69 III LƯU ĐỒ .71 CHƯƠNG 7: GIAO DIỆN VÀ THUYẾT MINH CHƯƠNG TRÌNH 75 I GIỚI THIỆU .75 II GIAO DIỆN 75 III.CHƯƠNG TRÌNH 77 TÀI LIỆU THAM KHẢO 87 SVTH: Đỗ Văn Tuấn Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình Lời nói đầu KIL OBO OKS CO M Công nghệ thông tin ngành công nghiệp mũi nhọn giới nói chung việt nam nói riêng, phát triển mạnh mẽ không ngừng năm gần Khi đời sống nâng lên khoa học kỹ thuật phát triển nhu cầu giải trí đa dạng lên, loại hình giải trí không ngừng gia tăng ngày phong phú, đa dạng loại hình giải trí như: trò chơi điện tử, nghe nhạc xem phim, xem ca nhạc(video), đặc biệt chơi dạng không gian ba chiều Sự phát triển ạt dẫn tới ngành công nghệ phần cứng đáp ứng đòi hỏi lưu trữ, đồng hành với phát triển mạng máy tính Internet ngày phát triển số lượng người tham gia truy cập ngày lớn nhu cầu họ ngày phong phú đa dạng tất loại hình nói Do tốc độ truy cập, tốc độ truyền tải mạng quan tâm người dùng sốt ruột ngồi chờ trang web mà truy cập, họ bực download file âm hát mà họ ưa thích đường truyền chậm công nghệ phần cứng phát triển mạnh Chính nhà nghiên cứu phần mềm ý đến việc phát triển phần mềm để hỗ trợ phần cứng Họ tạo chương trình phần mềm hỗ trợ tích cực phần cứng, từ đời phần mềm nén âm thanh, hình ảnh, nén video, tách âm từ file video…để tạo dạng âm thanh, hình ảnh, video mindi, mpeg, mp3, mp4… file ảnh dạng gif, jpeg…với dung lượng lưu trữ vô nhỏ chất lượng có giảm đôi chút không đáng kể so với đạt để truyền tải, truy cập nhanh Sự tồn chuẩn JPEG (Joint Photographic Experts Group) để giảm tốc độ bit chủ yếu phục vụ cho hình ảnh, rõ ràng không đủ đáp ứng cho hình ảnh động có kèm âm Để đáp ứng nhu cầu thò trường, nhóm chuyên gia hình ảnh động (Moving Picture Experts Group), gọi tắt MPEG, thành lập để nghiên cứu đưa lược đồ mã hóa phù hợp cho việc truyền hình ảnh động ghi lại chúng theo tiêu chuẩn thiết bò lưu trữ số CD-ROM, Video CD Phần trình bày luận văn nằm khuôn khổ "m thanh" Do vấn đề liên quan tới hình ảnh không đề cập tới, dù chuẩn MPEG dùng cho âm hình ảnh Mục tiêu đề tài chủ yếu để tìm hiểu phương pháp mã hoá nén âm theo chuẩn Mpeg, từ dựa số source code (viết C) có mạng Internet viết lại ngôn ngữ Visual C++, SVTH: Đỗ Văn Tuấn Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình nhằm hiểu sâu giải thuật, đồng thời tạo giao diện thân thiện KIL OBO OKS CO M Do trình độ kiến thức có hạn nên không tránh khỏi thiếu sót, em kính mong thầy tham gia giúp đỡ em để em hoàn thành tốt Em xin chân thành cám ơn thầy tạo điều kiện thuân lợi giúp em hoàn thành báo cáo SVTH: Đỗ Văn Tuấn Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN KIL OBO OKS CO M GVHD thầy: Dư Thanh Bình PHẦN I LÝ THUYẾT CƠ BẢN SVTH: Đỗ Văn Tuấn Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN CHNG GVHD thầy: Dư Thanh Bình CÁC KIẾN THỨC CƠ BẢN VỀ ÂM THANH I NHỮNG KHÁI NIỆM CƠ BẢN - SÓNG CƠ KIL OBO OKS CO M 1.1 Sự hình thành sóng môi trường đàn hồi a Đònh nghóa: Các môi trường chất khí, chất lỏng, chất rắn môi trường đàn hồi Môi trường đàn hồi coi môi trường liên tục gồm phân tử liên kết chặt chẽ với nhau, lúc bình thường phân tử có vò trí cân bền b Sự hình thành sóng môi trường đàn hồi: • Do tính chất môi trường đàn hồi, tác dụng lên phân tử môi trường phân tử rời khỏi vò trí cân bền • Do tương tác, phân tử lân cận mặt kéo phân tử A vò trí cân bằng, mặt khác nhận phần lượng phân tử A truyền sang, dao động theo, tượng xảy liên tiếp tạo thành sóng Sóng đàn hồi (sóng cơ) lan truyền dao động môi trường đàn hồi Sóng truyền chân không, chân không môi trường đàn hồi • Cần lưu ý truyền dao động, phân tử môi trường không di chuyển theo dao động lan truyền mà dao động quanh vò trí cân c Một số khái niệm sóng: • Nguồn sóng: ngoại vật gây kích động sóng • Tia sóng: phương truyền sóng • Môi trường sóng: không gian mà sóng truyền qua • Mặt sóng: mặt chứa điểm (phân tử) có trạng thái dao động thời điểm Tia sóng vuông góc với mặt sóng • Sóng cầu: mặt sóng mặt cầu phân bố không gian, tâm nguồn sóng Trong môi trường đồng chất đẳng hướng có sóng cầu Đối với sóng cầu tia sóng trùng với bán kính mặt cầu SVTH: Đỗ Văn Tuấn Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình KIL OBO OKS CO M • Sóng phẳng: mặt sóng mặt phẳng song song nhau, tia sóng vuông góc với mặt sóng Nếu nguồn sóng xa môi trường xét mặt sóng coi mặt phẳng song song • Sóng dọc: sóng phân tử môi trường dao động quanh vò trí cân phương trùng với tia sóng Khi có sóng dọc, phương tia sóng phân tử môi trường bò nén chặt, giãn làm cho phân tử môi trường có chỗ dày chỗ thưa • Sóng ngang: sóng phân tử môi trường dao động quanh vò trí cân phương vuông góc với tia sóng d Nguyên nhân gây sóng ngang sóng dọc: • Tùy tính chất môi trường đàn hồi mà xuất sóng ngang hay sóng dọc - Khi lớp môi trường bò lệch lớp khác làm xuất lực đàn hồi có xu hướng kéo lớp bò lệch vò trí cân môi trường truyền sóng ngang Vậy vật rắn môi trường có tính chất - Nếu môi trường lực đàn hồi lớp song song bò lệch sóng ngang hình thành Chất lỏng chất khí môi trường - Khi bò biến dạng nén hay căng mà môi trường có lực đàn hồi xuất môi trường truyền sóng dọc Chẳng hạn bò nén, chất lỏng hay chất khí tăng áp suất, lực nén giữ vai trò lực đàn hồi • Như chất lỏng chất khí có sóng dọc truyền được, chất rắn truyền hai loại sóng 1.2 Các đặc trưng sóng a Vận tốc truyền sóng (C) : Là quãng đường mà sóng truyền đơn vò thời gian b Bước sóng λ: Là quãng đường mà sóng truyền sau thời gian chu kỳ SVTH: Đỗ Văn Tuấn Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình T Như λ khoảng cách bé phân tử dao động pha Theo đònh nghóa ta có : λ = CT KIL OBO OKS CO M c Chu kỳ tần số: • Chu kỳ T thời gian cần thiết để sóng truyền bước sóng λ • Tần số f số chu giây : F = 1/T (Hz) 1.3 Phương trình sóng • Sóng phẳng truyền dọc theo phương OY với vận tốc C phương trình sóng biểu thò mối quan hệ độ chuyển dời X phân tử dao động kể từ vò trí cân với thời gian t khoảng cách y đến vò trí cân phân tử dao động phương truyền sóng sau : X = asinω(t – y/c) • Nếu sóng phẳng truyền theo hướng ngược với hướng tính khoảng cách y : X = asinω(t + y/c) • Đối với sóng cầu biên độ a dao động sóng vò trí cách nguồn bán kính r, tỉ lệ nghòch với r, phương trình sóng có dạng: X = a/r sinω(t – r/c) II SÓNG ÂM 2.1 Dao động âm truyền dao động • Sóng âm loại sóng có biên độ dao động nhỏ mà thính giác nhận biết Thí dụ dao động phát từ dây đàn, mặt trống rung động Sóng âm loại sóng nên khái niệm tượng dao động sóng áp dụng cho sóng âm • Trong không khí chất khí khác, dao động truyền dạng sóng dọc, đến tai người dao động có tần số từ 16 đến 20000 Hz gây cảm giác đặc biệt âm • Các dao động đàn hồi có tần số f>20.000 Hz sóng siêu âm SVTH: Đỗ Văn Tuấn Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình • Các dao động đàn hồi có tần số f S Đ sent_bits += frame_bits; SVTH: Đỗ Văn Tuấn Báo lỗi Trang 76 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD Thầy:Dư Thanh Bình CHƯƠNG GIAO DIỆN VÀ THUYẾT MINH CHƯƠNG TRÌNH I Giới thiệu KIL OBO OKS CO M Giao diện công cụ trợ giúp đắc lực cho người sử dụng Những phần mềm có giao diện tốt ưa chuộng Đó ưu điểm tuyệt vời Windows Lập trình Windows hỗ trợ công cụ cho phép ta tạo giao diện dễ dàng thân thiện Tuy nhiên, thiết kế giao diện sử dụng không bò nhầm lẫn chuyện dễ dàng Nó đòi hỏi ta phải có nhìn bao quát, chí phải hiểu sâu giải thuật chương trình loại trừ sai lầm sử dụng Lập trình Windows lập trình theo tình Mọi nút nhấn, ô đối thoại giao diện truy cập tới lúc mà không theo trình tự đònh Do người lập trình cần phải dự trù đến tình cần phải đưa số đề nghò dạng thông số đònh sẵn cho người sử dụng theo mà vận hành Ngoài ra, giao diện cần có phần trợ giúp để hướng dẫn cho người sử dụng lúc II Giao diện Dựa sơ đồ khối lưu đồ giải thuật Giao diện bao gồm phần hình vẽ sau: 14 13 SVTH: Đỗ Văn Tuấn 12 11 10 Trang 77 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình Input group Nhóm thông tin cấu hình lệnh tập tin nguồn ( *.wav) Bao gồm thông tin : bitrates, samplerates, mode, File path name KIL OBO OKS CO M Open button Mở hộp thoại File Open Windows để chọn file cần nén Phần mở rộng mặc đònh wav Text Edit box Dùng gõ file nguồn tay Mặc đònh *.wav Bitrates Cho biết số tốc độ bit tập tin nguồn wav chọn mục Chỉ số mặc đònh 128 Không sửa tay Samplerates Cho biết tần số lấy mẫu tập tin nguồn wav chọn mục Tần số mặc đònh 44100 Hz Không sửa tay Các tần số bao gồm : 32000, 44100 48000 Hz Output Nhóm thông tin cấu hình lệnh tập tin đích ( *.mp3) Bao gồm thông tin : bitrates, samplerates, mode, File path name Save button Mở hộp thoại File Save Windows để ghi đường dẫn tên file nén Phần mở rộng mặc đònh mp3 Text Edit box Dùng gõ đường dẫn tên tập tin đích tay Mặc đònh *.mp3 Khi chọn tập tin nguồn phần ô tự động xuất đường dẫn tên tập tin đích Bitrates SVTH: Đỗ Văn Tuấn Trang 78 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình Đònh số tốc độ bit tập tin đích chọn mục Chỉ số mặc đònh 128 Có thể chọn số khác ô kéo xuống, bao gồm giá trò : 16, 32, 40, 48, 56, 64, 80, 96, 112, 128, 156, 160, 192, 224, 256, 320 KIL OBO OKS CO M 10 Samplerates Cho biết tần số lấy mẫu tập tin đích, phụ thuộc với tần số lấy mẫu tập tin nguồn Tần số mặc đònh 44100 Hz Không sửa tay 11 Mode group Nhóm chế độ Stereo hay Mono Mặc đònh Stereo 12 Progress bar Thanh tiến trình, xuất trình nén từ tập tin nguồn wav sang tập tin đích mp3 13 Compress button Nút nhấn sau chọn đònh cấu hình đầy đủ cho tập tin nguồn đích Nghóa nhấn nút sau nhấn nút Update Khi nhấn nút này, trình nén từ tập tin nguồn sang tập tin đích thực bắt đầu Đồng thời tiến trình bắt đầu hoạt động Kết thúc trình nén có thông điệp báo cho biết hoàn tất công việc 14 Update button Phím nhấn sau chọn tập tin nguồn đích để cập nhật thông số chuẩn bò cho trình nén kích hoạt phím Compress III Chương trình Chương trình có hộp thoại MP3 COMPRESSOR hiển thò phím nhấn cho người sử dụng lựa chọn chạy ứng dụng Do đó, tất hàm đặt lớp CMp3Dlg Sau ta lần lược khảo sát số hàm quan trọng OnInitDialog( ) : SVTH: Đỗ Văn Tuấn Trang 79 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình Hàm khởi tạo số giá trò mặc đònh cho hộp thoại, nhằm giúp cho người sử dụng có nhìn toàn cục hiểu ứng dụng, để từ chọn lựa thông số thích hợp cho ứng dụng KIL OBO OKS CO M Đồng thời, cài đặt sẵn số giá trò ban đầu cho đối tượng dùng cho chương trình BOOL CMp3Dlg::OnInitDialog() { CDialog::OnInitDialog(); // Khởi tạo giá trò ban đầu cho hộp thoại m_stereo_in = 0; m_stereo_out = 0; m_file_in = "*.wav"; m_file_out = "*.mp3"; m_samplerates_in = "44100"; m_samplerates_out = "44100"; m_bitrates_in = "128"; m_bitrates_out.AddString("32"); m_bitrates_out.AddString("40"); m_bitrates_out.AddString("48"); m_bitrates_out.AddString("56"); m_bitrates_out.AddString("64"); m_bitrates_out.AddString("80"); m_bitrates_out.AddString("96"); m_bitrates_out.AddString("112"); m_bitrates_out.AddString("128"); m_bitrates_out.AddString("160"); m_bitrates_out.AddString("192"); m_bitrates_out.AddString("224"); m_bitrates_out.AddString("256"); m_bitrates_out.AddString("320"); m_bitrates_out.SetCurSel(8); UpdateData(FALSE); bOpen = FALSE; bSave = FALSE; // Gán cho đối tượng config.mpeg.type = TYPE_MPEG_I; config.mpeg.layr = LAYR_III; config.mpeg.mode = MODE_STEREO; config.mpeg.bitr = 128; config.mpeg.psyc = PSYC_ATT; config.mpeg.emph = EMPH_NONE; config.mpeg.crc = 0; SVTH: Đỗ Văn Tuấn Trang 80 http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN config.mpeg.ext config.mpeg.mode_ext config.mpeg.copyright config.mpeg.original GVHD Thầy:Dư Thanh Bình = 0; = 0; = 0; = 0; } KIL OBO OKS CO M GetDlgItem(IDC_COMPRESS)->EnableWindow(FALSE); m_pbar.SetRange(0, 10000); return TRUE; // return TRUE unless you set the focus to a control OnFileOpen( ) : Hàm mở hộp thoại Open Windows để chọn file nguồn có phần mở rộng mặc đònh wav, gán cho biến m_file_in đường dẫn tên file chọn Đồng thời tạo đường dẫn tên file mặc đònh cho tập tin đích có phần mở rộng mp3 gán cho biến m_file_out void CMp3Dlg::OnFileOpen() { // Mở hộp thoại File Open Windows hàm thành viên dlgOpen // lớp CFileDialog thư viện MFC CFileDialog dlgOpen(TRUE, "wav", "*.wav"); if (dlgOpen.DoModal() == IDOK) { m_file_in = dlgOpen.GetPathName(); // gán đường dẫn file nguồn // cho đối tượng m_file_in int len; str1 = m_file_in; len = str1.GetLength(); str2 = str1.Left(len - 3); str2 += "mp3"; m_file_out = str2; // gán đường dẫn file đích // cho đối tượng m_file_out bOpen = TRUE; UpdateData(FALSE); } } OnFileWrite( ) : SVTH: Đỗ Văn Tuấn Trang 81 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình Hàm mở hộp thoại Save Windows để chọn đường dẫn tên tập tin đích trường hợp không muốn đường dẫn tên file mặc đònh hàm OnFileOpen( ) tạo ra, gán cho biến m_file_out KIL OBO OKS CO M void CMp3Dlg::OnFileWrite() { CFileDialog dlgWrite(FALSE, "mp3", str2); if (dlgWrite.DoModal() == IDOK) { m_file_out = dlgWrite.GetPathName(); // gán đường dẫn file đích // cho đối tượng m_file_out UpdateData(FALSE); bSave = TRUE; } } OnUpdate( ) : Hàm cập nhật tất thông số chọn hộp thoại, đưa vào đối tượng dùng chương trình Đồng thời kích hoạt phím nhấn COMPRESS cho phép phím bắt đầu sử dụng Nếu thông số nhập không hợp lệ cho thông báo để nhập lại void CMp3Dlg::OnUpdate( ) { UpdateData(TRUE); if (!m_file_in.Compare("*.wav")) MessageBox("Enter the Input file, please!"); else if (!m_file_out.Compare("*.mp3")) { int len; str1 = m_file_in; len = str1.GetLength(); str2 = str1.Left(len - 3); str2 += "mp3"; m_file_out = str2; } config.infile = m_file_in.GetBuffer(5); // Chuyển giao trỏ // đến file nguồn if (!wave_open()) { MessageBox("Unable to open input file "); bWaveOpen = FALSE; } else bWaveOpen = TRUE; SVTH: Đỗ Văn Tuấn Trang 82 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình KIL OBO OKS CO M // Gán giá trò cấu hình bitrates cho biến config.mpeg.bitr tuỳ theo giá trò // chọn hộp thoại if (m_bitrates_out.GetCurSel()==0) config.mpeg.bitr = 32; if (m_bitrates_out.GetCurSel()==1) config.mpeg.bitr = 40; if (m_bitrates_out.GetCurSel()==2) config.mpeg.bitr = 48; if (m_bitrates_out.GetCurSel()==3) config.mpeg.bitr = 56; if (m_bitrates_out.GetCurSel()==4) config.mpeg.bitr = 64; if (m_bitrates_out.GetCurSel()==5) config.mpeg.bitr = 80; if (m_bitrates_out.GetCurSel()==6) config.mpeg.bitr = 96; if (m_bitrates_out.GetCurSel()==7) config.mpeg.bitr = 112; if (m_bitrates_out.GetCurSel()==8) config.mpeg.bitr = 128; if (m_bitrates_out.GetCurSel()==9) config mpeg.bitr= 160; if (m_bitrates_out.GetCurSel()==10) config.mpeg.bitr = 192; if (m_bitrates_out.GetCurSel()==11) config.mpeg.bitr = 224; if (m_bitrates_out.GetCurSel()==12) config.mpeg.bitr = 256; if (m_bitrates_out.GetCurSel()==13) config.mpeg.bitr = 320; config.mpeg.bitrate_index = find_bitrate_index(config.mpeg.bitr); bOpen = FALSE; bSave = FALSE; // Hàm GetDlgItem(IDC_ ) cho phép phím nhấn có IDC_ làm thông số // hoạt động if (bWaveOpen) GetDlgItem(IDC_COMPRESS)->EnableWindow(); UpdateData(FALSE); } OnCompress( ) : Khi gọi hàm này, trình nén từ tập tin nguồn wav sang tập tin đích mp3 bắt đầu thực Kết thúc trình nén có hộp thoại xuất thông báo hoàn tất void CMp3Dlg::OnCompress() { CCompressDlg compDlg; config.outfile = m_file_out.GetBuffer(5); L3_compress(); wave_close(); compDlg.DoModal(); // Cho hiển thò hộp thoại thông báo // công việc nén hoàn tất m_pbar.SetPos(0); // Trả trạng thái tiến trình vò trí đầu GetDlgItem(IDC_COMPRESS)->EnableWindow(FALSE); } SVTH: Đỗ Văn Tuấn Trang 83 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình Wave_open( ) : KIL OBO OKS CO M Hàm mở file nguồn kiểm tra xem đònh dạng file có hợp lệ không, không thông bào chọn lại file khác bool CMp3Dlg::wave_open() { static char *channel_mappings[] = {NULL,"mono","stereo"}; unsigned short wFormatTag; unsigned long dAvgBytesPerSec; unsigned short wBlockAlign; long filesize; long header_size; if((config.wave.file = fopen(config.infile,"rb")) == NULL) { MessageBox("Unable to open file"); return false; } if(!checkString(config.wave.file,"RIFF")) { MessageBox("Input not a MS-RIFF file"); return false; } filesize = Read32BitsLowHigh(config.wave.file); // complete wave chunk size if(!checkString(config.wave.file,"WAVE")) { MessageBox("Input not WAVE audio"); return false; } /* WAVE FMT format chunk */ if(!checkString(config.wave.file,"fmt ")) { MessageBox("Can't find format chunk"); return false; } /* my total header size calculations don't work, so this is bogus */ header_size = Read32BitsLowHigh(config.wave.file); /* chunk size */ wFormatTag = Read16BitsLowHigh(config.wave.file); if(wFormatTag!=0x0001) { MessageBox("Unknown WAVE format"); return false; } SVTH: Đỗ Văn Tuấn Trang 84 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình KIL OBO OKS CO M config.wave.type = WAVE_RIFF_PCM; config.wave.channels = Read16BitsLowHigh(config.wave.file); config.wave.samplerate = Read32BitsLowHigh(config.wave.file); dAvgBytesPerSec = Read32BitsLowHigh(config.wave.file); wBlockAlign = Read16BitsLowHigh(config.wave.file); /* PCM specific */ if(config.wave.channels>2) { MessageBox("More than channels\n"); return false; } if(config.wave.channels>1) { m_stereo_in = 0; m_stereo_out = 0; config.mpeg.mode = MODE_STEREO; MessageBox("WAVE audio, mode stereo"); } else { m_stereo_in = 1; m_stereo_out = 1; config.mpeg.mode = MODE_MONO; MessageBox("Microsoft RIFF , WAVE audio, mode mono"); } switch (config.wave.samplerate) { case 32000: m_samplerates_in = "32000"; m_samplerates_out = "32000"; config.mpeg.samplerate_index = 2; break; case 44100: m_samplerates_in = "44100"; m_samplerates_out = "44100"; config.mpeg.samplerate_index = 0; break; case 48000: m_samplerates_in = "48000"; m_samplerates_out = "48000"; config.mpeg.samplerate_index = 1; break; default: MessageBox("Samplerate not supported !!"); exit(-1); } config.wave.bits = Read16BitsLowHigh(config.wave.file); if(config.wave.bits!=16) { MessageBox("NOT 16 Bit !!!"); SVTH: Đỗ Văn Tuấn Trang 85 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình return false; KIL OBO OKS CO M } if(!checkString(config.wave.file,"data")) { MessageBox("Can't find data chunk"); return false; } header_size = ftell(config.wave.file); fseek(config.wave.file, 0, SEEK_END); filesize = ftell(config.wave.file); fseek(config.wave.file, header_size, SEEK_SET); config.wave.total_samples =(filesizeheader_size)/(2*config.wave.channels); config.wave.length = config.wave.total_samples/config.wave.samplerate; return true; } L3_compress( ) : Đây hàm quan trọng chương trình, mô tả toàn giải thuật ứng dụng Vòng lặp nén nằm hàm Mỗi vòng lặp thực công việc nén cho frame liệu đọc từ file nguồn Cũng từ vòng lặp này, ta cho tiến trình hoạt động nhờ vào kích thước biết trước file đọc vào Vòng lặp kết thúc lúc tiến trình điền đầy thông báo “Compress complete !” xuất void CMp3Dlg::L3_compress() { int frames_processed; int m_step; int total_frames; static short buffer[2][1152]; int channel; int i; int gr; short sam[2][1344]; double snr32[32]; L3_psy_ratio_t ratio; double pe[2][2]; L3_side_info_t side_info; short *buffer_window[2]; double win_que[2][HAN_SIZE]; double l3_sb_sample[2][3][18][SBLIMIT]; SVTH: Đỗ Văn Tuấn Trang 86 http://kilobooks.com Khoa CNTT – ĐHBKHN THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình KIL OBO OKS CO M double mdct_freq[2][2][576]; int l3_enc[2][2][576]; L3_scalefac_t scalefactor; bitstream_t bs; double vg_slots_per_frame; ouble rac_slots_per_frame; ong hole_slots_per_frame; ouble lot_lag; nt mean_bits; unsigned long sent_bits = 0; unsigned long frame_bits = 0; int sideinfo_len; // Mở thiết bò để ghi vào open_bit_stream_w(&bs, config.outfile, BUFFER_SIZE); memset((char*)snr32,0,sizeof(snr32)); memset((char *)sam,0,sizeof(sam)); memset((char *)&side_info,0,sizeof(L3_side_info_t)); L3_psycho_initialise(); L3_subband_initialise(); L3_mdct_initialise(); L3_loop_initialise(); config.mpeg.mode_gr config.mpeg.samples_per_frame config.mpeg.total_frames = 2; = 1152; = config.wave.total_samples/config.mpeg.samples_per_frame; total_frames = config.mpeg.total_frames; config.mpeg.bits_per_slot = 8; frames_processed = 0; sideinfo_len = 32; if(config.wave.channels==1) sideinfo_len += 136; else sideinfo_len += 256; if(config.mpeg.crc) sideinfo_len += 16; /* Figure average number of 'slots' per frame */ avg_slots_per_frame = ((double)config.mpeg.samples_per_frame / ((double)config.wave.samplerate/1000)) * ((double)config.mpeg.bitr / (double)config.mpeg.bits_per_slot); whole_slots_per_frame = (int)avg_slots_per_frame; frac_slots_per_frame = avg_slots_per_frame (double)whole_slots_per_frame; SVTH: Đỗ Văn Tuấn Trang 87 http://kilobooks.com Khoa CNTT – ĐHBKHN slot_lag = if(frac_slots_per_frame==0) THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN GVHD Thầy:Dư Thanh Bình -frac_slots_per_frame; config.mpeg.padding = 0; while(wave_get(buffer)) { KIL OBO OKS CO M frames_processed++; m_step = (int)(10000 * frames_processed / total_frames); m_pbar.SetPos(m_step); buffer_window[0] = buffer[0]; buffer_window[1] = buffer[1]; if(frac_slots_per_frame!=0) if(slot_lag>(frac_slots_per_frame-1.0)) { /* No padding for this frame */ slot_lag -= frac_slots_per_frame; config.mpeg.padding = 0; } else { /* Padding for this frame */ slot_lag += (1-frac_slots_per_frame); config.mpeg.padding = 1; } config.mpeg.bits_per_frame = 8*(whole_slots_per_frame + config.mpeg.padding); mean_bits = (config.mpeg.bits_per_frame - sideinfo_len) / config.mpeg.mode_gr; /* psychoacousic model */ for(gr=0;gr[...]... CHƯƠNG 4 GVHD thầy: Dư Thanh Bình GIỚI THIỆU VỀ MPEG KIL OBO OKS CO M I GIỚI THIỆU 1 MPEG là gì? MPEG, viết tắt của cụm từ “Moving Picture Experts Group”, là một nhóm chuyên nghiên cứu phát triển các tiêu chuẩn về hình ảnh số và nén âm thanh theo chuẩn ISO/IEC Ngày nay, nhóm làm việc MPEG đã phát triển và phát hành các tiêu chuẩn MPEG- 1, MPEG- 2 và MPEG- 4 Chuẩn MPEG- 3 được kết hợp vào MPEG- 2 và không còn... mức to của âm chuẩn, về giá trò bằng mức áp suất âm của âm chuẩn tức là : L = 20lg P/Po (Fôn) SVTH: Đỗ Văn Tuấn 13 Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình KIL OBO OKS CO M - Vậy mức to của một âm bất kỳ đo bằng Fôn, về giá trò bằng mức áp suất âm của âm chuẩn đo bằng db có cùng mức to với âm đó Thí dụ: âm có tần số 500 Hz mức áp suất âm bằng 25... f3=3f1 • Âm có tần số f1 gọi là âm cơ bản hay họa âm thứ nhất, các âm có tần số f2 , f3 gọi là các họa âm thứ hai, thứ ba Âm cơ bản bao giờ cũng mạnh nhất, các họa âm có tác dụng quyết đònh âm sắc của âm cơ bản, giúp ta phân biệt các nguồn âm khác nhau Chẳng hạn tiếng đàn Pi-a-nô và tiếng sáo tuy cùng một âm cơ bản nhưng lại rất dễ phân biệt, nguyên nhân là do số lượng, cấu trúc những họa âm quanh âm cơ... thứ hai là MIDI Khác với âm thanh dạng sóng, MIDI chỉ lưu lại những thông điệp điều khiển bộ tổng hợp phát ra âm thanh Do đó kích thước của tập tin MID nhỏ hơn nhiều so với tập tin.WAV II CẤU TRÚC WAVE FILE 1 RIFF file Wave File là tập tin chứa các dữ liệu của mẫu âm thanh đã được số hóa Phương pháp số hóa âm thanh hiện nay là phương pháp PCM Phương pháp này sẽ lấy mẫu âm thanh với tần số khoảng 11.025... một âm là sức mạnh cảm giác do âm thanh gây nên trong tai người, nó không những phụ thuộc vào áp suất âm mà còn phụ thuộc vào tần số của âm đó Thí dụ 2 âm có tần số 100 Hz và 1000 Hz áp suất âm đều bằng 0,02 µbar nhưng nghe to nhỏ khác nhau, âm 1000 Hz nghe to hơn âm 100 Hz Muốn nghe to bằng âm 1000 Hz thì âm 100 Hz phải có áp suất bằng 0,25 µbar Như vậy tai người không nhạy đối với âm 100 Hz bằng âm. .. của một âm nào đó so với âm chuẩn mà tai người có thể phân biệt được - Độ to là một thuộc tính của thính giác, cho phép phán đoán tính chất mạnh yếu của âm thanh Căn cứ vào độ to mà sắp xếp âm từ nhỏ tới to - Mức to tăng 10 Fôn thì độ to tăng gấp đôi và ngược lại 2.3.2 m điệu và âm sắc: • Âm điệu chỉ âm cao hay thấp, trầm hay bổng Âm điệu chủ yếu phụ thuộc vào tần số của âm, tần số càng cao, âm nghe... độ âm (LI): Nếu gọi I là cường độ âm của âm đang xét và Io là cường độ âm của mức zero qui ước của âm chuẩn thì mức cường độ âm LI bằng : LI = 10lg(I/Io) db I tính bằng W/m2 c Mức áp suất âm (Lp): Mức áp suất âm suy dẫn từ mức cường độ âm Lp = 20lg(P/Po) db SVTH: Đỗ Văn Tuấn 11 Trang http://kilobooks.com THƯ VIỆN ĐIỆN TỬ TRỰC TUYẾN Khoa CNTT – ĐHBKHN GVHD thầy: Dư Thanh Bình Trong đó: P :áp suất âm. .. không đổi MPEG- 5 và MPEG- 6 vẫn chưa được công bố MPEG- 7 đònh nghóa một tiêu chuẩn về việc biểu diễn nội dung cho các nghiên cứu thông tin hình ảnh và âm thanh Tên chính thức là “Multimedia Content Description Interface” Mục tiêu của MPEG- 7 là chuẩn hoá việc biểu diễn các mô tả về nội dung nghe nhìn Tuy nhiên chuẩn không đònh nghóa các công cụ để nhận ra nội dung nghe nhìn thật sự 3 Âm thanh MPEG Khả... Âm thanh MPEG Khả năng của âm thanh MPEG, về cơ bản, âm thanh MPEG sẽ làm giảm kích thước lưu trữ 1 tâp tin âm thanh đi rất nhiều Một đóa AudioCD lưu trữ được khoảng 650 Mbyte dữ liệu âm thanh thô với cách mã hóa 16 bit (bitdepth) và tần số lấy mẫu (sample rate) 44.1 kHz Nếu đem phát ra thì cũng chỉ được 60 đến 72 phút - bitdepth: mô tả mức biên độ lớn nhất mà một mẫu âm thanh có thể đạt tới Ví dụ:... âm bằng 25 db và âm có tần số 50 Hz mức áp suất âm bằng 64 db sẽ có cùng mức to bằng 20 Fôn, bằng mức to của âm 1000 Hz mức áp suất bằng 20 db - Muốn biết mức to của một âm bất kỳ phải so sánh với âm chuẩn - Đối với âm chuẩn, mức to ở ngưỡng nghe là 0 Fôn, ngưỡng chói tai là 120 Fôn - Cùng một giá trò áp suất, âm tần số càng cao, mức to càng lớn b Độ to: - Khi so sánh âm này to hơn âm kia bao nhiêu ... số (hay ốc-ta) Khi x=1/2 tức f2 / f1 = 1.41 gọi nửa ốc-ta Khi x=1/3 tức f2 / f1 = 1.26 gọi 1/3 ốc-ta - Mức áp suất âm ốc-ta mức áp suất âm 1/2 ốc-ta cộng thêm 3db - Mức áp suất âm ốc-ta mức áp... chuẩn) - Đối với âm chuẩn, phạm vi nghe Áp suất âm nhỏ Pmin = 2.1 0-4 µbar Cường độ âm nhỏ Imin = 1 0-1 6 W/cm2 - p suất âm cường độ âm lớn mà tai người chòu là: Pmax = 2.102 µbar Imax = 1 0-4 W/cm2 -. .. việc MPEG phát triển phát hành tiêu chuẩn MPEG-1, MPEG-2 MPEG-4 Chuẩn MPEG-3 kết hợp vào MPEG-2 không tách riêng Nhóm MPEG phát triển đến chuẩn MPEG-7 MPEG tên riêng, tên thức : ISO/IEC JTC1 SC29

Ngày đăng: 02/12/2015, 12:31

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan