2010-06-03 37 views
13

Tôi muốn đọc các tập tin MP3 trong C++ và tôi muốn viết mã riêng cho điều này. Về cơ bản để tìm hiểu cách hoạt động của loại tệp. Tôi muốn đọc tất cả các bit của dữ liệu hex của một tập tin MP3 và có loa của tôi chơi nó. :) Tôi không biết bắt đầu từ đâu vì tôi chưa biết dữ liệu được lưu trữ như thế nào vào một tập tin MP3.Đọc các tập tin MP3

Cảm ơn sự giúp đỡ của bạn

+10

Nếu bạn cần hỏi như thế này, tôi khuyên bạn nên từ bỏ ý tưởng tự viết nó và sử dụng một số thư viện. – nothrow

Trả lời

17

Bạn có thể mua đặc điểm kỹ thuật cho định dạng MP3 từ here. Đó là khoảng 160EUR.

Ồ, và nhân tiện, đó không phải là "dữ liệu thập lục phân". Nếu bạn vẫn ở điểm mà bạn đề cập đến bất kỳ dữ liệu không thể đọc được là "hệ thập lục phân" (là hệ thống số), việc xóa đầu tiên thành định dạng dữ liệu nhị phân có liên quan đến các thuật toán giải mã/mã hóa phức tạp có thể là một chút quá nhiều cho bạn trong thời gian này.

Làm thế nào để bắt đầu bằng cách viết trình phát có thể phát tệp .wav? (Bất kỳ tập tin .wav hợp lý, quan tâm bạn, có tính đến các định dạng tập tin và các định dạng âm thanh khác nhau)

+1

Sự khác biệt giữa đặc điểm kỹ thuật có thể mua và các liên kết được cung cấp bởi các câu trả lời khác là gì? – Pindatjuh

+0

+1 cho đề xuất bắt đầu với các tệp .wav –

+1

@Pindatjuh: Tôi muốn nói đầy đủ (và có thể ở một số nơi trên thế giới, tính hợp pháp). Cộng với rất nhiều các liên kết dường như nói về định dạng tệp (mà là hợp lý đơn giản), và không phải về thuật toán giải nén thực tế. –

4

Vâng, nó sẽ là khó khăn :)

Dù sao, ứng dụng của bạn nên bao gồm hai phần - thư viện nén/thói quen và chính bạn backend, mà sẽ mất một dat nén một khối và thực sự là chơi nó.

Tôi muốn giới thiệu "nén dữ liệu" cuốn sách của David Salomon để hiểu làm thế nào giải mã của bạn nên thực sự làm điều đó. Các biến thể cho các phần thứ hai của bạn, thật không may, quá rộng để bao gồm chúng trong một câu.

Bạn cũng có thể thử điều tra một số mã nguồn mở mp3 bộ giải mã/giải mã libs như this one.

+1

+1 để đề xuất đọc mã hiện có. –

5

Tôi đã làm một ít nghiên cứu, có thể nó sẽ giúp bạn.

cấu trúc file

enter image description here Một tập tin MP3 được tạo thành từ nhiều khung MP3, trong đó bao gồm một header và một khối dữ liệu.Chuỗi khung này được gọi là luồng cơ bản. Khung không phải là các mục độc lập ("vùng chứa byte") và do đó không thể được trích xuất trên các ranh giới khung tùy ý. Các khối dữ liệu MP3 chứa thông tin âm thanh (nén) về tần số và biên độ. Biểu đồ cho thấy Tiêu đề MP3 bao gồm một từ đồng bộ, được sử dụng để xác định phần đầu của một khung hợp lệ. Tiếp theo là một chút chỉ ra rằng đây là chuẩn MPEG và hai bit chỉ ra rằng lớp 3 được sử dụng; do đó MPEG-1 Audio Layer 3 hoặc MP3. Sau đó, các giá trị sẽ khác nhau, tùy thuộc vào tệp MP3. ISO/IEC 11172-3 xác định phạm vi giá trị cho từng phần của tiêu đề cùng với đặc tả của tiêu đề. Hầu hết các tệp MP3 ngày nay chứa siêu dữ liệu ID3, trước hoặc sau các khung MP3; như đã lưu ý trong biểu đồ.

Source code của LAME

LAME là một THƯ VIỆN MP3, nhưng nó cũng mã nguồn mở, mà có nghĩa là bạn có thể tải về mã nguồn và nhìn vào nó. http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz/download Tôi đã xem bản thân mình và có vẻ như được viết bằng C hoặc C++, vì vậy bạn may mắn. Nếu bạn kiểm tra mã nguồn của LAME, và hiểu cách nó hoạt động, có thể bạn có thể thành công trong việc tạo một thư viện MP3 của riêng bạn. Chỉ cần lưu ý rằng LAME không phải là thư viện để phát các tệp MP3, nhưng để mã hóa chúng. Nhưng vì nó tạo ra MP3 thay vì đọc chúng, tôi nghĩ rằng cấu trúc nên rõ ràng hơn một chút sau đó với bất kỳ thư viện trình phát nhạc MP3 nào khác.

Giải thích về định dạng file MP3

này cũng dường như để giải thích như thế nào MP3 hoạt động khá tốt, nhưng đó là lý thuyết thuần túy, vì vậy bạn sẽ cần rất nhiều sự kiên nhẫn. http://www.mp3-converter.com/mp3codec/