2013-08-28 24 views
6

Đây là điều tôi đã cố gắng làm trong một thời gian và là một câu hỏi mở kết thúc. Nếu bất cứ ai có bất kỳ kiến ​​thức nào có thể giúp tôi làm sáng tỏ điều này, nó sẽ được đánh giá rất cao.Phân tích cú pháp Mp3 trong Python

Tôi muốn giải mã luồng âm thanh bằng mp3 và sử dụng để truyền hoạt ảnh, tất cả đều sử dụng python. Theo tôi hiểu, dữ liệu âm thanh trong mp3 được lưu trong khung 32 băng tần (hoặc tần số thùng), lý tưởng cho tôi - nếu tôi có thể lấy mp3 và trích biên độ cho mỗi băng con trên mỗi khung, hoàn hảo cho những gì tôi muốn làm.

Tôi tìm thấy giải pháp ở đây https://bitbucket.org/portalfire/pymp3 nơi tất cả quá trình xử lý dường như được thực hiện trong python. Nó khá chậm, nhưng ngay cả khi tôi có thể sử dụng để trích xuất những gì tôi muốn, nó sẽ là tốt - Tôi đang đấu tranh để hiểu những gì đang xảy ra trong mã đó mặc dù. Tôi cũng đã có một giải pháp mà tôi chuyển đổi sang wav và sau đó sử dụng fft để trích xuất tần số từ wav. Điều này là rất ồn ào và có vẻ như một cách ngu ngốc để làm điều đó như dữ liệu tôi muốn được lưu trữ trực tiếp trong mp3 - chuyển đổi trở lại một làn sóng âm thanh có vẻ không cần thiết. Điều này thực sự nhanh hơn cái đầu tiên. Đây là những gì tôi đã kết thúc với:

http://www.youtube.com/watch?v=f_0FORxlK4A

Vâng nếu có ai có lời khuyên nào, hay kinh nghiệm mà họ muốn chia sẻ, hay ý tưởng cho các thư viện tôi nên nhìn vào, tôi thực sự muốn nghe.

Cảm ơn!

Henry

+1

Bạn có thể xem qua http://wiki.python.org/moin/PythonInMusic một lần để xem một bộ thư viện khổng lồ có sẵn ở đó –

+0

Có một số thư viện MP3 ở ngoài đó và yêu cầu đề xuất mà một trong những sử dụng là chính xác loại điều mà một câu hỏi và câu trả lời diễn đàn như SO là xấu lúc xử lý. – abarnert

+2

Một lời khuyên tôi có thể đưa ra: Nếu bạn biết cách sử dụng cython, ctypes hoặc bất kỳ cơ chế nào khác, bạn nên xem các thư viện C như mpg123 không có bất kỳ ràng buộc Python nào và chỉ gói các bit mà bạn cần . Bạn có nhiều lựa chọn hơn theo cách đó. – abarnert

Trả lời

1

Hãy xem tại địa chỉ:

http://lightshowpi.org/

Sniff lên mã nguồn và xem cách họ đã làm điều đó.

Họ cũng đã sử dụng FFT trên đầu ra sóng nhưng theo thời gian thực và không quá chậm khi bạn xem xét nó hoạt động tốt trên Raspberry Pi.

Chúng có thể chuyển sang cosin biến đổi thay vì nó nhanh hơn, và đây là những gì bạn sẽ làm nếu kiểm tra khung MP3 một cách thẳng thắn, vì MP3 được mã hóa biến đổi cosin.

Vì vậy, trước tiên bạn sẽ phải biết bin nào giống với tần số nào trong thế giới thực.

Trên pypi.python.org có liên kết trực tiếp AV hoặc ffmpeg cho phép bạn giải mã khung theo khung, nhưng tôi không biết liệu bạn có thể trích xuất freq từ các đối tượng đại diện cho khung hay không. cũng vậy.

Nếu tôi là bạn, tôi sẽ sử dụng mã Python MP3 thuần túy mà bạn tìm thấy để trích xuất chỉ những gì tôi cần, tối ưu hóa nó trong tiến trình. Sử dụng cython nếu cần.

Nhưng cách tiếp cận đó giới hạn bạn chỉ với MP3. Lightshow Pi hoạt động trên hầu hết các loại nén.