Tìm hiểu về âm thanh MPEG và các giải thuật nén âm thanh

100 16 0
  • Loading ...
1/100 trang
Tải xuống

Thông tin tài liệu

Ngày đăng: 17/04/2018, 09:26

Công nghệ thông tin là ngành công nghiệp mũi nhọn của thế giới nói chung và của việt nam nói riêng, nó đã phát triển mạnh mẽ không ngừng trong những năm gần đây. Khi đời sống được nâng lên khoa học kỹ thuật phát triển nhu cầu về giải trí cũng đa dạng lên, các loại hình giải trí không ngừng gia tăng và ngày càng phong phú, đa dạng các loại hình giải trí như: trò chơi điện tử, nghe nhạc xem phim, xem ca nhạc(video), và đặc biệt là những trong chơi dạng không gian ba chiều. Sự phát triển ồ ạt này đã dẫn tới ngành công nghệ phần cứng đã không thể đáp ứng được những đòi hỏi về lưu trữ, đồng hành với sự phát triển này là mạng máy tính đó chính là Internet ngày càng phát triển số lượng người tham gia truy cập ngày càng lớn và nhu cầu của họ thì ngày càng phong phú và đa dạng về tất cả các loại hình nói trên. Do đó tốc độ truy cập, tốc độ truyền tải trên mạng được quan tâm hơn để cho người dùng không phải sốt ruột ngồi chờ những trang web mà mình truy cập, họ không phải bực mình khi download những file âm thanh và những bài hát mà họ ưa thích vì đường truyền quá chậm trong khi công nghệ phần cứng đã phát triển mạnh. Chính vì vậy các nhà nghiên cứu phần mềm đã chú ý đến việc phát triển phần mềm để hỗ trợ phần cứng. Họ đã tạo ra những chương trình phần mềm hỗ trợ tích cực phần cứng, từ đó đã ra đời những phần mềm nén âm thanh, hình ảnh, nén video, tách âm thanh từ những file video…để tạo ra những dạng âm thanh, hình ảnh, video như mindi, mpeg, mp3, mp4… những file ảnh dạng gif, jpeg…với dung lượng lưu trữ vô cùng nhỏ mặc dù chất lượng có giảm đi đôi chút nhưng không đáng kể so với những gì nó đạt được để truyền tải, truy cập nhanh hơn. Sự tồn tại của chuẩn JPEG (Joint Photographic Experts Group) chỉ để giảm tốc độ bit và chủ yếu phục vụ cho hình ảnh, rõ ràng là không đủ đáp ứng cho hình ảnh động có kèm âm thanh. Để đáp ứng nhu cầu của thị trường, một nhóm các chuyên gia về hình ảnh động (Moving Picture Experts Group), gọi tắt là MPEG, được thành lập để nghiên cứu đưa ra những lược đồ mã hóa phù hợp cho việc truyền hình ảnh động và ghi lại chúng theo tiêu chuẩn trong các thiết bị lưu trữ số như CDROM, Video CD.. Muïc luï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Ơ .6 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 .9 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 Bieá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 CHƯƠNG GIỚI THIỆU VỀ MPEG .33 I GIỚI THIỆU .33 MPEG gì? 33 So saùnh caùc chuaån MPEG 33 Aâm MPEG 34 Caù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 Các lớp âm MPEG 43 Trang 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 2.Các cấu trúc dòng bít liệu .63 3.Các cấu trúc để đònh dạng dòng bít liệu 63 4.Các cấu trúc huffmancodetab 67 5.Các cấu trúc tính MDCT 67 6.Các cấu trúc scalefac_struct 67 B CÁC ĐỊNH NGHĨA 68 1.Các đònh nghóa dùng truy xuất liệu.68 2.Các đònh nghóa dùng tính toán FFT .68 3.Các đònh nghóa dùng đònh dạng dòng liệu 68 4.Các đònh nghóa dùng mã hoá Huffman 68 5.Các đònh nghóa dùng phân tích liệu 69 6.Các đònh nghóa dùng mô hình âm tâm lý 69 7.Các đònh nghóa dùng truy xuất nhập liệu 69 8.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 DIEÄN 75 III.CHƯƠNG TRÌNH 77 TÀI LIỆU THAM KHAÛO 87 Trang Lời nói đầu 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 Trang 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++, nhằm hiểu sâu giải thuật, đồng thời tạo giao diện thân thiện Trang CHNG THANH CÁC KIẾN THỨC CƠ BẢN VỀ ÂM 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 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 Trang 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  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 Trang - 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ỳ T Như  khoảng cách bé phân tử dao động pha Theo đònh nghóa ta có :  = CT 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 Trang  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  Các dao động đàn hồi có tần số fEnableWindow(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 Trang 91 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( ) : 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 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 Trang 92 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; // 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; Trang 93 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); } Wave_open( ) : 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() Trang 94 { 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; } 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); Trang 95 /* 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 !!!"); return false; } 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); Trang 96 config.wave.total_samples =(filesize-header_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]; 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; Trang 97 // 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; slot_lag = -frac_slots_per_frame; if(frac_slots_per_frame==0) config.mpeg.padding 0; while(wave_get(buffer)) { 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 */ Trang 98 = 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
- Xem thêm -

Xem thêm: Tìm hiểu về âm thanh MPEG và các giải thuật nén âm thanh, Tìm hiểu về âm thanh MPEG và các giải thuật nén âm thanh, TÀI LIỆU THAM KHẢO 87, THIẾT KẾ CHƯƠNG TRÌNH

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay